(57)【特許請求の範囲】
【請求項１】
指定されたテンポ周期でテンポ報知するテンポ報知手段と、
ユーザの動作タイミングを検出する検出手段と、
前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差の揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、
前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する直前に検出された第１の動作タイミングと、前記第１の動作タイミングに連続して、許容範囲を逸脱した時に検出された第２の動作タイミングと、前記第２の動作タイミングに連続して、許容範囲を逸脱した直後に検出された第３の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段と
を具備することを特徴とするメトロノーム装置。
【請求項２】
前記検出手段がユーザの動作タイミングを一定時間検出しない場合に、前記テンポ報知手段の動作を停止させる停止手段と、
前記停止手段により前記テンポ報知手段の動作を停止させた後に、再び前記検出手段が許容範囲に収まる動作タイミングを検出した場合に、前記テンポ報知手段の動作を再開させる再開手段と
を更に具備することを特徴とする請求項１記載のメトロノーム装置。
【請求項３】
前記テンポ変更手段は、前記第３の動作タイミングと前記第２の動作タイミングとの時間差分と、前記第２の動作タイミングと前記第１の動作タイミングとの時間差分とを相加平均して新たなテンポ周期を算出するテンポ周期算出手段を備えることを特徴とする請求項１記載のメトロノーム装置。
【請求項４】
コンピュータに、
指定されたテンポ周期でテンポ報知するテンポ報知ステップと、
ユーザの動作タイミングを検出する検出ステップと、
前記テンポ報知ステップがテンポ報知するテンポ報知タイミングと前記検出ステップにより検出される動作タイミングとの時間差の揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得ステップと、
前記検出ステップにより検出される動作タイミングが、前記許容範囲取得ステップにより取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する直前に検出された第１の動作タイミングと、前記第１の動作タイミングに連続して、許容範囲を逸脱した時に検出された第２の動作タイミングと、前記第２の動作タイミングに連続して、許容範囲を逸脱した直後に検出された第３の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知ステップに指示するテンポ変更ステップと
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ユーザのリズム動作に応じて、報知するテンポを変更可能なメトロノーム装置およびプログラムに関する。
【背景技術】
【０００２】
従来より、一分間における四分音符の数を設定して一定のリズムを刻む機械式のメトロノームの他、例えば特許文献１に開示されているように、ユーザのタッピング動作に応じて入力されるタップ周期を判定し、判定したタップ周期から算出されるテンポ値でテンポ報知する電子式のメトロノーム装置も知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２００６−２２６９３０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
ところで、上記特許文献１に開示の装置では、ユーザのタッピング動作に応じて一意的に定まるテンポ値に従ってテンポ報知するだけなので、ユーザが意図したリズム変化に対応してテンポを変更することが出来ないという問題が有る。
【０００５】
本発明は、このような事情に鑑みてなされたもので、ユーザが意図したリズム変化に対応してテンポを変更することができるメトロノーム装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【０００６】
上記目的を達成するため、請求項１に記載の発明では、指定されたテンポ周期でテンポ報知するテンポ報知手段と、ユーザの動作タイミングを検出する検出手段と、前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差の揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する直前に検出された第１の動作タイミングと、前記第１の動作タイミングに連続して、許容範囲を逸脱した時に検出された第２の動作タイミングと、前記第２の動作タイミングに連続して、許容範囲を逸脱した直後に検出された第３の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段とを具備することを特徴とする。
【発明の効果】
【０００７】
本発明では、ユーザが意図したリズム変化に対応してテンポを変更することができる。
【図面の簡単な説明】
【０００８】
【図１】実施の一形態によるメトロノーム装置１００の構成を示すブロック図である。
【図２】ユーザのリズム動作に応じてセンサ部１４が発生する検出出力とテンポ周期との関係を示す図である。
【図３】メインルーチンの動作を示すフローチャートである。
【図４】報知処理の動作を示すフローチャートである。
【図５】テンポ設定処理の動作を示すフローチャートである。
【図６】スタート／ストップスイッチ処理Ａの動作を示すフローチャートである。
【図７】マージン設定処理の動作を示すフローチャートである。
【図８】マージン設定動作を説明するための図である。
【図９】スタート／ストップスイッチ処理Ｂの動作を示すフローチャートである。
【図１０】テンポ変更処理の動作を示すフローチャートである。
【図１１】テンポ変更処理の動作を示すフローチャートである。
【図１２】テンポ変更動作を説明するための図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照して本発明の実施形態について説明する。
Ａ．構成
図１は、実施の一形態によるメトロノーム装置１００の構成を示すブロック図である。この図において、ＣＰＵ１０は、操作部１３が発生する各種スイッチイベントに応じて装置各部を制御する。本発明の要旨に係わるＣＰＵ１０の特徴的な処理動作については追って詳述する。ＲＯＭ１１には、ＣＰＵ１０にロードされる各種プログラムが記憶される。各種プログラムとは、後述するメインルーチン、報知処理、テンポ設定処理、スタート／ストップスイッチ処理Ａ、マージン設定処理、スタート／ストップスイッチ処理Ｂおよびテンポ変更処理を含む。
【００１０】
ＲＡＭ１２は、ワークエリアおよび検出データエリアを備える。ＲＡＭ１２のワークエリアには、ＣＰＵ１０の処理に用いられる各種レジスタ・フラグデータが一時記憶される。ＲＡＭ１２の検出データエリアには、後述するセンサ部１４から出力される検出データが一時記憶される。操作部１３は、装置電源をパワーオン／パワーオフする電源スイッチの他、動作モード（テンポ調整モード又はテンポ変更モード）を選択するモードスイッチ、モードスイッチ操作で選択された動作モードの開始／停止を指示するスタート／ストップスイッチおよびテンポ値を設定する設定スイッチ等を備え、それら各スイッチの操作に応じたイベントを発生する。操作部１３が発生するイベントはＣＰＵ１０により取り込まれる。
【００１１】
センサ部１４は、ユーザの動きを検出する加速度センサと、当該加速度センサの出力をＡ／Ｄ変換して検出データを発生するＡ／Ｄ変換器とから構成される。センサ部１４が発生する検出データは、ＣＰＵ１０の制御の下に、ＲＡＭ１２の検出データエリアにストアされる。センサ部１４の加速度センサは、例えば楽器演奏するユーザの上半身や足などの身体の一部に装着され、演奏しながら体を振ったり揺すったりしてリズムをとる動作（以下、リズム動作と称す）を検出し、例えば図２に図示するように、周期的なリズム動作を表す検出データを発生する。この検出データから得られる周期がテンポ周期となる。報知部１５は、ＣＰＵ１０からの報知指示に応じてテンポ報知音を発音する。
【００１２】
Ｂ．動作
次に、図３〜図１２を参照して上記構成によるメトロノーム装置１００の動作を説明する。以下では、メトロノーム装置１００のＣＰＵ１０が実行するメインルーチン、報知処理、テンポ設定処理、スタート／ストップスイッチ処理Ａ、マージン設定処理、スタート／ストップスイッチ処理Ｂおよびテンポ変更処理の各動作について述べる。なお、後述する報知処理は、タイマインタラプトにより一定周期毎に割り込み実行される。
【００１３】
（１）メインルーチンの動作
電源スイッチ操作によりメトロノーム装置１００がパワーオンされると、ＣＰＵ１０は図３に図示するメインルーチンを実行してステップＳＡ１に進み、装置各部を初期化するイニシャライズを行う。イニシャライズが完了すると、次のステップＳＡ２に進み、テンポ設定スイッチ処理を実行する。テンポ設定スイッチ処理では、後述するように、設定スイッチ操作に応じて設定されるテンポ値をレジスタＴＥＭＰＯにストアすると共に、レジスタＴＥＭＰＯにストアされた設定テンポ値で定まる１拍分のクロック数（ティック数）をレジスタＢＥＡＴにストアする。
【００１４】
続いて、ステップＳＡ３では、モードフラグＭＦが「０」又は「１」の何れであるかを判別する。モードフラグＭＦは、モードスイッチがオン操作される毎に反転するフラグであり、「０」の場合にテンポ調整モードを表し、「１」の場合にテンポ変更モードを表す。モードフラグＭＦが「０」（テンポ調整モード）であると、ステップＳＡ４を介してスタート／ストップスイッチ処理Ａを実行する。
【００１５】
スタート／ストップスイッチ処理Ａでは、後述するように、スタートフラグＳＴＦが「１」となり、テンポ調整モードの動作開始が指示されると、経過時間Ｔ（タイマカウンタＴの値）をゼロリセットすると共に、タイミング配列Ｔ（  ）を全てクリアし、さらにタイミング配列Ｔ（  ）中の配列番号を指定するポインタｎを初期値「１」をストアした後、時間差上限ＴＭＡＸおよび時間差下限ＴＭＩＮをそれぞれゼロリセットする。一方、スタートフラグＳＴＦが「０」となり、テンポ調整モードの動作停止が指示されると、テンポ報知タイミング（拍タイミング）とユーザのリズム動作が行われたタイミングとの時間差ΔＴを算出し、各拍タイミングにおける時間差ΔＴの揺らぎに基づき時間差上限ＴＭＡＸおよび時間差下限ＴＭＩＮを取得する。
【００１６】
そして、次のステップＳＡ５では、マージン設定処理を実行する。マージン設定処理では、後述するように、スタートフラグＳＴＦが「１」となり、テンポ調整モードの動作が開始されている状態において、報知処理（図４参照）により発生されるテンポ報知音に従ったユーザのリズム動作を検出する毎に、検出時点における経過時間Ｔをポインタｎで指定されるタイミング配列Ｔ（ｎ）に順次ストアする。
【００１７】
この後、ステップＳＡ６に進み、モードスイッチのオン操作の有無を判別する。モードスイッチがオン操作されなければ、判断結果は「ＮＯ」になり、上述したステップＳＡ２に処理を戻すが、モードスイッチがオン操作されると、判断結果は「ＹＥＳ」になり、ステップＳＡ７に進む。ステップＳＡ７では、モードスイッチのオン操作に応じてモードフラグＭＦを反転させた後、上述のステップＳＡ２に処理を戻す。そして、反転されたモードフラグＭＦが「１」（テンポ変更モード）になると、上述したステップＳＡ３を介してステップＳＡ８を介してスタート／ストップスイッチ処理Ｂを実行する。
【００１８】
スタート／ストップスイッチ処理Ｂでは、後述するように、スタートフラグＳＴＦが「１」となり、テンポ変更モードの動作開始が指示されると、経過時間Ｔ（タイマカウンタＴの値）および経過時間Ｔ０（タイマカウンタＴ０の値）をゼロリセットし、ポインタｎに初期値「１」をセットすると共に、オンフラグＯＮＦを「１」にセットする。更にレジスタＴＯＬＤ、ＴＮＥＷ１、ＴＮＥＷ２をクリアし、タイミングフラグＴＦ１、ＴＦ２をクリアした後、タイマインタラプトの禁止を解除して経過時間Ｔを計時するタイマカウンタＴをスタートさせる。一方、スタートフラグＳＴＦが「０」となり、テンポ変更モードの動作停止が指示されると、報知部１５にテンポ報知音の消音を指示すると共に、タイマインタラプトを禁止して経過時間Ｔを計時するタイマカウンタＴを一時停止させる。
【００１９】
そして、次のステップＳＡ９では、テンポ変更処理を実行する。テンポ変更処理では、後述するように、テンポ報知タイミングに対し、ユーザのリズム動作が許容範囲（時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下）を逸脱したタイミングで行われると、テンポ変更と判断し、その後に為されるユーザのリズム動作のタイミングから取得した新たなテンポ周期に基づきテンポ報知を再開する。また、テンポ変更処理では、ユーザのリズム動作を検出していない時間が２拍を超えると、タイマインタラプトを禁止して報知処理（図４参照）の動作を停止させ、その後に再び許容範囲（時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下）に収まるタイミングのリズム動作を検出すると、テンポ設定処理（図５参照）にて設定された以前のテンポ値に従ってテンポ報知を再開する。この後、上述したステップＳＡ６に処理を進める。
【００２０】
（２）報知処理の動作
図４は、報知処理の動作を示すフローチャートである。ＣＰＵ１０では、報知処理をタイマインタラプトにより所定周期毎に実行する。実行タイミングになると、ステップＳＢ１に進み、スタートフラグＳＴＦが「１」であるか否かを判断する。スタートフラグＳＴＦとは、スタート／ストップスイッチのオン操作に応じてセットされるフラグである。
【００２１】
後述するように、スタート／ストップスイッチは、オン操作される毎に動作の開始／停止を交互に指示する所謂トグルスイッチとして機能し、オン操作に応じて反転されるスタートフラグＳＴＦが「１」の場合には動作開始を指示し、一方、オン操作に応じて反転されるスタートフラグＳＴＦが「０」の場合には動作停止を指示する。したがって、このステップＳＢ１では、モードスイッチ操作で選択された動作モード（テンポ調整モード／テンポ変更モードの何れか）の開始を指示した状態であるかどうかを判断する。
【００２２】
スタートフラグＳＴＦが「０」、すなわちモードスイッチ操作で選択された動作モードが停止の状態ならば、上記ステップＳＢ１の判断結果は「ＮＯ」になり、本処理を終えるが、スタートフラグＳＴＦが「１」であると、上記ステップＳＢ１の判断結果は「ＹＥＳ」になり、ステップＳＢ２に進み、最小単位時間（ティック）が経過したか否かを判断する。
【００２３】
最小単位時間が経過していなければ、判断結果は「ＮＯ」になり、本処理を終えるが、最小単位時間が経過していると、上記ステップＳＢ２の判断結果が「ＹＥＳ」になり、ステップＳＢ３に進み、タイマカウンタＴをインクリメントして歩進させる。なお、このタイマカウンタＴは、後述するように、スタート／ストップスイッチのオン操作に応じてスタートフラグＳＴＦが「１」にセットされた時点、つまり動作開始時点からの経過時間を計時する。以下、タイマカウンタＴの値を経過時間Ｔと称す。
【００２４】
続いて、ステップＳＢ４では、経過時間Ｔがｎ×ＢＥＡＴに一致したか否かを判断する。ここで、ポインタｎは、後述するように、ユーザのリズム動作を検出するセンサ部１４が所定レベル以上のセンサ出力（検出データ）を発生する毎にインクリメントされて歩進される正数である。また、レジスタＢＥＡＴには、後述するテンポ設定処理（図５参照）において、設定テンポ値で定まる１拍分のクロック数（ティック数）がストアされる。
【００２５】
したがって、経過時間Ｔが設定テンポ値ＴＥＭＰＯに対応した拍タイミングになると、判断結果は「ＹＥＳ」となり、ステップＳＢ５に進み、報知部１５にテンポ報知音の発生を指示して本処理を終える。一方、経過時間Ｔが設定テンポ値ＴＥＭＰＯに対応した拍タイミングに一致しなければ、上記ステップＳＢ５の判断結果は「ＮＯ」になり、テンポ報知音を発生させずに本処理を終える。
【００２６】
このように、報知処理では、スタート／ストップスイッチのオン操作に応じてスタートフラグＳＴＦが「１」となり、動作開始が指示され、最小単位時間（ティック）が経過すると、タイマカウンタＴにより計時される経過時間Ｔを歩進させ、歩進させた経過時間Ｔがｎ×ＢＥＡＴに一致すると、テンポ報知音を発生させる。
【００２７】
（３）テンポ設定処理の動作
次に、図５を参照してテンポ設定処理の動作を説明する。前述したメインルーチンのステップＳＡ２（図３参照）を介して本処理が実行されると、ＣＰＵ１０は図５に図示するステップＳＣ１に進み、設定スッチの操作の有無を判断する。設定スイッチが操作されなければ、判断結果は「ＮＯ」になり、本処理を終えるが、設定スイッチが操作されると、上記ステップＳＣ１の判断結果が「ＹＥＳ」となり、ステップＳＣ２に進む。ステップＳＣ２では、設定スイッチ操作に応じて設定されるテンポ値をレジスタＴＥＭＰＯにストアし、続くステップＳＣ３では、レジスタＴＥＭＰＯにストアされた設定テンポ値で定まる１拍分のクロック数（ティック数）をレジスタＢＥＡＴにストアして本処理を終える。
【００２８】
（４）スタート／ストップスイッチ処理Ａの動作
次に、図６を参照してスタート／ストップスイッチ処理Ａの動作を説明する。前述したメインルーチンのステップＳＡ４（図３参照）を介して本処理が実行されると、ＣＰＵ１０は図６に図示するステップＳＤ１に進み、スタート／ストップスイッチがオン操作されたか否かを判断する。スタート／ストップスイッチがオン操作されなければ、判断結果は「ＮＯ」になり、本処理を終える。
【００２９】
一方、スタート／ストップスイッチがオン操作されると、上記ステップＳＤ１の判断結果が「ＹＥＳ」になり、ステップＳＤ２に進み、スタートフラグＳＴＦを反転する。そして、ステップＳＤ３では、反転されたスタートフラグＳＴＦが「１」であるか否かを判断する。以下、スタートフラグＳＴＦが「１」の場合の動作と、スタートフラグＳＴＦが「０」の場合の動作とに分けて説明を進める。
【００３０】
＜スタートフラグＳＴＦが「１」の場合＞
反転されたスタートフラグＳＴＦが「１」となり、モードスイッチ操作で選択されたテンポ調整モードの動作開始が指示されると、上記ステップＳＤ３の判断結果は「ＹＥＳ」となり、ステップＳＤ４に進む。ステップＳＤ４では、経過時間Ｔ（タイマカウンタＴの値）をゼロリセットし、続くステップＳＤ５では、経過時間Ｔを一時記憶する複数のタイミング配列Ｔ（  ）を全てクリアする。そして、ステップＳＤ６では、タイミング配列Ｔ（  ）中の配列番号を指定するポインタｎを初期値「１」をストアする。この後、ステップＳＤ７に進み、レジスタＴＭＡＸ、ＴＭＩＮをそれぞれゼロリセットして本処理を終える。
【００３１】
なお、レジスタＴＭＡＸ、ＴＭＩＮが意図するところについては追って述べる。また、上記ステップＳＤ４〜ＳＤ７において、テンポ調整モードの動作開始に伴った初期化が完了すると、一旦、スタート／ストップスイッチ処理Ａの動作を終えて、図７のマージン設定処理を実行する。マージン設定処理では、後述するように、スタートフラグＳＴＦが「１」となり、テンポ調整モードの動作が開始されている状態において、前述した報知処理（図４参照）により発生されるテンポ報知音に合わせるように行われるユーザのリズム動作を検出する毎に、検出時点における経過時間Ｔをポインタｎで指定されるタイミング配列Ｔ（ｎ）に順次ストアする。
【００３２】
＜スタートフラグＳＴＦが「０」の場合＞
さて、こうしたマージン設定処理が実行されている状態において、スタート／ストップスイッチのオン操作に応じて反転されたスタートフラグＳＴＦが「０」となり、テンポ調整モードの動作停止が指示されたとする。そうすると、上記ステップＳＤ３の判断結果は「ＮＯ」となり、ステップＳＤ８に進む。ステップＳＤ８では、タイマインタラプトを禁止して報知処理（図４参照）の動作を停止させ、これにより経過時間Ｔを計時するタイマカウンタＴを一時停止させる。
【００３３】
次いで、ステップＳＤ９では、マージン設定処理によってタイミング配列Ｔ（１）〜Ｔ（ｎ）に格納された各経過時間Ｔを読み出す為のポインタｍを初期値「１」にセットする。続いて、ステップＳＤ１０では、ポインタｍの値とレジスタＢＥＡＴに格納されるクロック数（ティック数）との乗算値ｍ×ＢＥＡＴ（拍タイミング）からポインタｍで指定されるタイミング配列Ｔ（ｍ）の差分、すなわちテンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング（拍タイミング）とリズム動作が行われたタイミングとの時間差ΔＴを算出する。
【００３４】
続いて、ステップＳＤ１１では、算出された時間差ΔＴがレジスタＴＭＡＸの値を超えているか否かを判断する。以下、レジスタＴＭＡＸの値を時間差上限ＴＭＡＸと称す。時間差ΔＴが時間差上限ＴＭＡＸを超えていれば、判断結果は「ＹＥＳ」になり、ステップＳＤ１２に進み、時間差ΔＴを新たな時間差上限ＴＭＡＸとして更新した後、ステップＳＤ１５に進む。
【００３５】
一方、時間差ΔＴが時間差上限ＴＭＡＸより小さければ、上記ステップＳＤ１１の判断結果は「ＮＯ」になり、ステップＳＤ１３に進む。ステップＳＤ１３では、算出された時間差ΔＴがレジスタＴＭＩＮの値より小さいか否かを判断する。以下、レジスタＴＭＩＮの値を時間差下限ＴＭＩＮと称す。時間差ΔＴが時間差下限ＴＭＩＮより小さければ、判断結果は「ＹＥＳ」になり、ステップＳＤ１４に進み、時間差ΔＴを新たな時間差下限ＴＭＩＮとして更新した後、ステップＳＤ１５に進む。
【００３６】
これに対し、時間差ΔＴが時間差下限ＴＭＩＮより大きいと、上記ステップＳＤ１３の判断結果は「ＮＯ」になり、ステップＳＤ１５に進む。そして、ステップＳＤ１５では、ポインタｍをインクリメントして歩進させ、続くステップＳＤ１６では、歩進されたポインタｍがポインタｎを超えたか、つまりマージン設定処理で取得したタイミング配列Ｔ（１）〜Ｔ（ｎ）の全てについて読み出し終えたかどうかを判断する。全てのタイミング配列Ｔ（１）〜（ｎ）を読み出し終えていなければ、ここでの判断結果は「ＮＯ」になり、上述のステップＳＤ１０に処理を戻す。
【００３７】
以後、全てのタイミング配列Ｔ（１）〜Ｔ（ｎ）について読み出し終える迄、上述したステップＳＤ１０〜ＳＤ１６を繰り返す。これにより、各拍タイミングにおける時間差ΔＴの揺らぎに基づき時間差上限ＴＭＡＸおよび時間差下限ＴＭＩＮが得られる。そして、全てのタイミング配列Ｔ（１）〜Ｔ（ｎ）について読み出し終えると、上記ステップＳＤ１６の判断結果が「ＹＥＳ」になり、本処理を終える。
【００３８】
このように、スタート／ストップスイッチ処理Ａでは、スタートフラグＳＴＦが「１」となり、テンポ調整モードの動作開始が指示されると、経過時間Ｔ（タイマカウンタＴの値）をゼロリセットすると共に、タイミング配列Ｔ（  ）を全てクリアし、さらにタイミング配列Ｔ（  ）中の配列番号を指定するポインタｎを初期値「１」をストアした後、時間差上限ＴＭＡＸおよび時間差下限ＴＭＩＮをそれぞれゼロリセットする。
【００３９】
一方、スタートフラグＳＴＦが「０」となり、テンポ調整モードの動作停止が指示されると、テンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング（拍タイミング）とリズム動作が行われたタイミングとの時間差ΔＴを算出する。そして、図８に図示する一例のように、各拍タイミングＴ０,Ｔ１，…における時間差ΔＴの揺らぎに基づき時間差上限ＴＭＡＸおよび時間差下限ＴＭＩＮを取得する。
【００４０】
（５）マージン設定処理の動作
次に、図７を参照してマージン設定処理の動作を説明する。前述したメインルーチンのステップＳＡ５（図３参照）を介して本処理が実行されると、ＣＰＵ１０は図７に図示するステップＳＥ１に進み、スタートフラグＳＴＦが「１」であるか否か、すなわちテンポ調整モードの動作が開始されているかどうかを判断する。スタートフラグＳＴＦが「０」（テンポ調整モードの動作が停止中）であれば、判断結果は「ＮＯ」になり、本処理を完了させるが、テンポ調整モードの動作が開始されていると、判断結果は「ＹＥＳ」になり、ステップＳＥ２に進む。
【００４１】
ステップＳＥ２では、センサ部１４が所定レベル以上のセンサ出力（検出データ）を発生したか否か、換言すれば、ユーザのリズム動作を検出したかどうかを判断する。なお、ここで言うユーザのリズム動作とは、前述した報知処理（図４参照）により発生されるテンポ報知音に従ってリズムを取る動作を指す。こうしたユーザのリズム動作が検出されない場合、つまりセンサ部１４から出力されるセンサ出力（検出データ）が所定レベル未満であると、上記ステップＳＥ２の判断結果は「ＮＯ」となり、本処理を終える。
【００４２】
一方、ユーザのリズム動作が検出された場合、すなわちセンサ部１４から出力されるセンサ出力（検出データ）が所定レベル以上であると、上記ステップＳＥ２の判断結果は「ＹＥＳ」になり、ステップＳＥ３に進む。ステップＳＥ３では、ポインタｎで指定されるタイミング配列Ｔ（ｎ）に経過時間Ｔをストアする。なお、スタート／ストップスイッチのオン操作に応じてスタートフラグＳＴＦが「１」となった直後では、ポインタｎには初期値「１」がセットされるので、タイミング配列Ｔ（１）に最初の経過時間Ｔがストアされる。そして、ステップＳＥ４に進むと、ポインタｎをインクリメントして歩進させた後、本処理を終える。
【００４３】
以上のように、マージン設定処理では、スタートフラグＳＴＦが「１」となり、テンポ調整モードの動作が開始されている状態において、前述した報知処理（図４参照）により発生されるテンポ報知音に従ったユーザのリズム動作を検出する毎に、検出時点における経過時間Ｔをポインタｎで指定されるタイミング配列Ｔ（ｎ）に順次ストアするようになっている。
【００４４】
（６）スタート／ストップスイッチ処理Ｂの動作
次に、図９を参照してスタート／ストップスイッチ処理Ｂの動作を説明する。前述したメインルーチンのステップＳＡ８（図３参照）を介して本処理が実行されると、ＣＰＵ１０は図９に図示するステップＳＦ１に進み、スタート／ストップスイッチがオン操作されたか否かを判断する。スタート／ストップスイッチがオン操作されなければ、判断結果は「ＮＯ」になり、本処理を終えるが、オン操作された場合には判断結果が「ＹＥＳ」になり、ステップＳＦ２に進み、スタートフラグＳＴＦを反転する。続いて、ステップＳＦ３では、反転されたスタートフラグＳＴＦが「１」であるか否かを判断する。以下、スタートフラグＳＴＦが「１」の場合の動作と、スタートフラグＳＴＦが「０」の場合の動作とに分けて説明を進める。
【００４５】
＜スタートフラグＳＴＦが「１」の場合＞
反転されたスタートフラグＳＴＦが「１」となり、モードスイッチ操作で選択されたテンポ変更モードの動作開始が指示されると、上記ステップＳＦ３の判断結果は「ＹＥＳ」となり、ステップＳＦ４に進む。ステップＳＦ４〜ＳＦ８では、後述するテンポ変更処理（図１０〜図１１参照）で用いられるタイマカウンタ、フラグおよびレジスタを初期化する。すなわち、ステップＳＦ４では、経過時間Ｔ（タイマカウンタＴの値）および経過時間Ｔ０（タイマカウンタＴ０の値）をゼロリセットし、続くステップＳＦ５では、ポインタｎに初期値「１」をセットすると共に、オンフラグＯＮＦを「１」にセットする。
【００４６】
ステップＳＦ６では、レジスタＴＯＬＤ、ＴＮＥＷ１、ＴＮＥＷ２をクリアし、ステップＳＦ７では、タイミングフラグＴＦ１、ＴＦ２をクリアする。そして、ステップＳＦ８では、タイマインタラプトの禁止を解除して報知処理（図４参照）を起動させ、これにより経過時間Ｔを計時するタイマカウンタＴをスタートさせて本処理を終える。
【００４７】
＜スタートフラグＳＴＦが「０」の場合＞
反転されたスタートフラグＳＴＦが「０」となり、モードスイッチ操作で選択されたテンポ変更モードの動作停止が指示されると、上記ステップＳＦ３の判断結果は「ＮＯ」となり、ステップＳＦ９に進み、報知部１５にテンポ報知音の消音を指示し、続くステップＳＦ１０では、タイマインタラプトを禁止して報知処理（図４参照）の動作を停止させ、これにより経過時間Ｔを計時するタイマカウンタＴを一時停止させて本処理を終える。
【００４８】
このように、スタート／ストップスイッチ処理Ｂでは、スタートフラグＳＴＦが「１」となり、テンポ変更モードの動作開始が指示されると、経過時間Ｔ（タイマカウンタＴの値）および経過時間Ｔ０（タイマカウンタＴ０の値）をゼロリセットし、ポインタｎに初期値「１」をセットすると共に、オンフラグＯＮＦを「１」にセットする。更にレジスタＴＯＬＤ、ＴＮＥＷ１、ＴＮＥＷ２をクリアし、タイミングフラグＴＦ１、ＴＦ２をクリアした後、タイマインタラプトの禁止を解除して経過時間Ｔを計時するタイマカウンタＴをスタートさせる。一方、スタートフラグＳＴＦが「０」となり、テンポ変更モードの動作停止が指示されると、報知部１５にテンポ報知音の消音を指示すると共に、タイマインタラプトを禁止して経過時間Ｔを計時するタイマカウンタＴを一時停止させる。
【００４９】
（７）テンポ変更処理の動作
次に、図１０〜図１１を参照してテンポ変更処理の動作を説明する。前述したメインルーチンのステップＳＡ９（図３参照）を介して本処理が実行されると、ＣＰＵ１０は図１０に図示するステップＳＧ１に進み、スタートフラグＳＴＦが「１」、つまりテンポ変更モードの動作が開始されているか否かを判断する。テンポ変更モードの動作が開始されておらず、スタートフラグＳＴＦが「０」ならば、判断結果は「ＮＯ」になり、本処理を終えるが、テンポ変更モードの動作が開始されていると、判断結果は「ＹＥＳ」になり、ステップＳＧ２に進む。
【００５０】
ステップＳＧ２では、タイマ停止中であるか否かを判断する。スタートフラグＳＴＦが「１」となり、テンポ変更モードの動作開始が指示された直後ではタイマ起動中なので、判断結果は「ＮＯ」になり、ステップＳＧ３に進み、最小単位時間（ティック）が経過したか否かを判断する。最小単位時間が経過していなければ、判断結果は「ＮＯ」になり、後述のステップＳＧ１２に進むが、最小単位時間が経過すると、、判断結果は「ＹＥＳ」になり、ステップＳＧ４に進み、経過時間Ｔ０をインクリメントして歩進させる。なお、経過時間Ｔ０はユーザのリズム動作を検出していない時間を表す。
【００５１】
次いで、ステップＳＧ５では、経過時間Ｔ０が２拍（２×ＢＥＡＴ）以下であるか否か、つまりユーザのリズム動作を検出していない時間が２拍以下であるかどうかを判断する。ユーザのリズム動作を検出していない時間が２拍を超えていれば、判断結果は「ＮＯ」になり、ステップＳＧ６に進み、タイマインタラプトを禁止して報知処理（図４参照）の動作を停止させ、これにより経過時間Ｔを計時するタイマカウンタＴを一時停止させる。そして、ステップＳＧ７〜ＳＧ８では、レジスタＴＯＬＤ、ＴＮＥＷ１およびＴＮＥＷ２をクリアすると共に、フラグＴＦ１、ＴＦ２をクリアして本処理を終える。
【００５２】
これに対し、ユーザのリズム動作を検出していない時間が２拍以下ならば、上記ステップＳＧ５の判断結果は「ＹＥＳ」になり、ステップＳＧ９に進み、経過時間Ｔがｎ×ＢＥＡＴに一致したか否か、つまり設定テンポ値ＴＥＭＰＯに対応したテンポ報知タイミング（拍タイミング）であるかどうかを判断する。テンポ報知タイミングでなければ、判断結果は「ＮＯ」になり、後述のステップＳＧ１２に進むが、テンポ報知タイミングならば、判断結果は「ＹＥＳ」になり、ステップＳＧ１０に進む。
【００５３】
ステップＳＧ１０では、オンフラグＯＮＦが「１」であるか否かを判断する。オンフラグＯＮＦは、テンポ変更される場合に「０」、テンポ変更済みの場合に「１」となるフラグである。したがって、ここではテンポ変更済みである否かを判断する。テンポ変更済み（オンフラグＯＮＦが「１」）ならば、判断結果は「ＹＥＳ」になり、ステップＳＧ１１に進み、テンポ報知音の発生を報知部１５に指示する。これによりテン報知音が発音される。
【００５４】
一方、テンポ変更（オンフラグＯＮＦが「０」）であると、上記ステップＳＧ１０の判断結果は「ＮＯ」になり、ステップＳＧ１２に進む。ステップＳＧ１２では、センサ部１４が所定レベル以上のセンサ出力（検出データ）を発生したか否か、すなわち、ユーザのリズム動作を検出したかどうかを判断する。ユーザのリズム動作が検出されなければ、判断結果は「ＮＯ」になり、本処理を終えるが、ユーザのリズム動作を検出すると、上記ステップＳＧ１２の判断結果が「ＹＥＳ」になり、ステップＳＧ１３に進む。
【００５５】
ステップＳＧ１３〜ＳＧ１５では、経過時間ＴをレジスタＴＮＥＷ２に、レジスタＴＮＥＷ２の値をレジスタＴＮＥＷ１に、レジスタＴＮＥＷ１の値をレジスタＴＯＬＤにそれぞれストアし直す。つまり、レジスタＴＮＥＷ２には現リズム動作のタイミング（経過時間Ｔ）が、レジスタＴＮＥＷ１にはその一つ前のリズム動作のタイミングが、レジスタＴＯＬＤにはさらに一つ前のリズム動作のタイミングがそれぞれストアされることになる。
【００５６】
次いで、ステップＳＧ１６では、ユーザのリズム動作を検出したのに対応して経過時間Ｔ０をゼロリセットする。続いて、ステップＳＧ１７では、タイマ停止中であるか否かを判断する。タイマ停止中でなければ、判断結果は「ＮＯ」になり、図１１に図示するステップＳＧ１９に進む。タイマ停止中ならば、上記ステップＳＧ１７の判断結果は「ＹＥＳ」になり、ステップＳＧ１８に進み、タイマインタラプトの禁止を解除して報知処理（図４参照）を起動させ、これにより経過時間Ｔを計時するタイマカウンタＴをスタートさせた後、図１１に図示するステップＳＧ１９に進む。
【００５７】
ステップＳＧ１９では、ポインタｎの値とレジスタＢＥＡＴに格納されるクロック数（ティック数）との乗算値ｎ×ＢＥＡＴ（拍タイミング）から経過時間Ｔの差分、すなわちテンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング（拍タイミング）とリズム動作が行われたタイミングとの時間差ΔＴを算出する。
【００５８】
次いで、ステップＳＧ２０では、算出された時間差ΔＴが時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下であるか否か、つまりテンポ報知音に合わせて行われたユーザのリズム動作のタイミングが許容範囲（時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下）に収まっているかどうかを判断する。許容範囲内ならば、判断結果は「ＹＥＳ」となり、ステップＳＧ２１に進み、ポインタｎの値をインクリメントして歩進させて本処理を終える。したがって、この場合にはテンポ変更は行われない。
【００５９】
一方、テンポ報知音に合わせて行われたユーザのリズム動作のタイミングが許容範囲（時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下）を超えた場合には、上記ステップＳＧ２０の判断結果が「ＮＯ」になり、ステップＳＧ２２に進む。ステップＳＧ２２では、オンフラグＯＮＦを「０」にセットしてテンポ変更する旨を表す。続いて、ステップＳＧ２３〜ＳＧ２４では、フラグＴＦ２をフラグＴＦ１にセットし、フラグＴＦ２に「１」をセットする。
【００６０】
そして、ステップＳＧ２５では、フラグＴＦ１，ＴＦ２が共に「１」であるか否か、すなわちユーザのリズム動作のタイミングが２回続けて許容範囲を超えたかどうかを判断する。許容範囲を２回続けて超えなければ、判断結果は「ＮＯ」になり、本処理を終えるが、許容範囲を２回続けて超えると、判断結果が「ＹＥＳ」になり、ステップＳＧ２６に進む。
【００６１】
ステップＳＧ２６では、レジスタＴＮＥＷ２に格納される現リズム動作のタイミング（経過時間Ｔ）とレジスタＴＮＥＷ１に格納されるその一つ前のリズム動作のタイミングとの時間差（ＴＮＥＷ２−ＴＮＥＷ１）と、レジスタＴＮＥＷ１に格納されるその一つ前のリズム動作のタイミングとレジスタＴＯＬＤに格納されるさらに一つ前のリズム動作のタイミングとの時間差（ＴＮＥＷ１−ＴＯＬＤ）との相加平均（ＴＮＥＷ２−ＴＮＥＷ１）＋（ＴＮＥＷ１−ＴＯＬＤ）／２に基づき算出される周期に基づき一拍分のクロック数（ティック数）を算出してレジスタＢＥＡＴにストアする。
【００６２】
次いで、ステップＳＧ２７では、レジスタＢＥＡＴの値に応じたテンポ値をレジスタＴＥＭＰＯにストアする。こうして、テンポ変更が完了すると、ステップＳＧ２８に進み、フラグＴＦ１、ＴＦ２を「０」にセットし、続くステップＳＧ２９では、テンポ変更済みに対応してオンフラグＯＮＦに「１」をセットして本処理を終える。
【００６３】
次に、図１２を参照して上述したテンポ変更処理の動作について具体的に説明する。時刻ｔ０のテンポ報知タイミングに対するユーザのリズム動作が、許容範囲ｔ０ｍａｒｇｉｎ（上述した時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下の範囲）に収まるタイミングｔ０ｏｌｄで為されると、時刻ｔ１にテンポ報知音が発生する。そして、時刻ｔ１のテンポ報知タイミングに対し、ユーザのリズム動作のタイミングが許容範囲ｔ１ｍａｒｇｉｎを逸脱した時刻ｔ１ｎｅｗで行われたとする。
【００６４】
そうすると、テンポ変更するものと見なし、時刻ｔ２でのテンポ報知を行わないようにする。その後、時刻ｔ２ｎｅｗにおいてユーザのリズム動作が為されると、（ｔ２ｎｅｗ−ｔ１ｎｅｗ）＋（ｔ１ｎｅｗ−ｔ０ｏｌｄ）／２に基づき算出される新たなテンポ周期を確定し、確定した新たなテンポ周期に基づき時刻ｔ３からテンポ報知動作を再開する。このように、ユーザのリズム動作のタイミングを異ならせてテンポ報知のタイミングを変化させるので、ユーザが意図したリズム変化に対応してテンポを変更することが可能になる。
【００６５】
また、上述したテンポ変更処理では、ユーザのリズム動作を検出していない時間が２拍を超えると、タイマインタラプトを禁止して報知処理（図４参照）の動作を停止させ、その後に再び許容範囲（時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下）に収まるタイミングでユーザのリズム動作を検出すると、テンポ設定処理（図５参照）にて設定された元のテンポに対応してテンポ報知を再開することも出来る。
【００６６】
以上説明したように、本実施形態では、テンポ報知タイミングとユーザのリズム動作が行われたタイミングとの時間差ΔＴを算出し、算出された各拍タイミングにおける時間差ΔＴの揺らぎに基づき時間差上限ＴＭＡＸおよび時間差下限ＴＭＩＮを取得する。そして、テンポ報知タイミングに対し、ユーザのリズム動作が許容範囲（時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下）を逸脱したタイミングで行われると、テンポ変更と判断し、許容範囲を逸脱する前に検出された第１の動作タイミングｔ０ｏｌｄと、許容範囲を逸脱した時に検出された第２の動作タイミングｔ１ｎｅｗと、許容範囲を逸脱した後に検出された第３の動作タイミングｔ２ｎｅｗとを用い、（ｔ２ｎｅｗ−ｔ１ｎｅｗ）＋（ｔ１ｎｅｗ−ｔ０ｏｌｄ）／２から算出される新たなテンポ周期に基づきテンポ報知を再開するので、ユーザが意図したリズム変化に対応してテンポを変更することが出来る。
【００６７】
また、ユーザのリズム動作を検出していない時間が２拍を超えると、タイマインタラプトを禁止して報知処理（図４参照）の動作を停止させ、その後に再び許容範囲（時間差下限ＴＭＩＮ以上、時間差上限ＴＭＡＸ以下）に収まるタイミングでユーザのリズム動作を検出すると、テンポ設定処理（図５参照）にて設定された元のテンポに対応してテンポ報知を再開するので、ユーザが意図したリズム変化に対応してテンポを変更することが出来る。
【００６８】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【００６９】
（付記）
［請求項１］
指定されたテンポ周期でテンポ報知するテンポ報知手段と、
前記テンポ報知手段によるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出手段と、
前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差ΔＴの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、
前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第１の動作タイミングと、許容範囲を逸脱した時に検出された第２の動作タイミングと、許容範囲を逸脱した後に検出された第３の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段と
を具備することを特徴とするメトロノーム装置。
【００７０】
［請求項２］
前記検出手段がユーザの動作タイミングを一定時間検出しない場合に、前記テンポ報知手段の動作を停止させる停止手段と、
前記停止手段により前記テンポ報知手段の動作を停止させた後に、再び前記検出手段が許容範囲に収まる動作タイミングを検出した場合に、前記テンポ報知手段の動作を再開させる再開手段と
を更に具備することを特徴とする請求項１記載のメトロノーム装置。
【００７１】
［請求項３］
前記テンポ変更手段は、第３の動作タイミングと第２の動作タイミングとの時間差分と、第２の動作タイミングと第１の動作タイミングとの時間差分とを相加平均して新たなテンポ周期を算出するテンポ周期算出手段を備えることを特徴とする請求項１記載のメトロノーム装置。
【００７２】
［請求項４］
コンピュータに、
指定されたテンポ周期でテンポ報知するテンポ報知ステップと、
前記テンポ報知ステップによるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出ステップと、
前記テンポ報知ステップがテンポ報知するテンポ報知タイミングと前記検出ステップにより検出される動作タイミングとの時間差ΔＴの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得ステップと、
前記検出ステップにより検出される動作タイミングが、前記許容範囲取得ステップにより取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第１の動作タイミングと、許容範囲を逸脱した時に検出された第２の動作タイミングと、許容範囲を逸脱した後に検出された第３の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知ステップに指示するテンポ変更ステップと
を実行させることを特徴とするプログラム。
【符号の説明】
【００７３】
１０  ＣＰＵ
１１  ＲＯＭ
１２  ＲＡＭ
１３  操作部
１４  センサ部
１５  報知部
１００  メトロノーム装置
【図１】
0005732882.tif 000002
【図２】
0005732882.tif 000003
【図３】
0005732882.tif 000004
【図４】
0005732882.tif 000005
【図５】
0005732882.tif 000006
【図６】
0005732882.tif 000007
【図７】
0005732882.tif 000008
【図８】
0005732882.tif 000009
【図９】
0005732882.tif 000010
【図１０】
0005732882.tif 000011
【図１１】
0005732882.tif 000012
【図１２】
0005732882.tif 000013