"指定されたテンポ周期でテンポ報知するテンポ報知手段と、前記テンポ報知手段によるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出手段と、前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差ΔTの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第1の動作タイミングと、許容範囲を逸脱した時に検出された第2の動作タイミングと、許容範囲を逸脱した後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段とを具備することを特徴とするメトロノーム装置。前記検出手段がユーザの動作タイミングを一定時間検出しない場合に、前記テンポ報知手段の動作を停止させる停止手段と、前記停止手段により前記テンポ報知手段の動作を停止させた後に、再び前記検出手段が許容範囲に収まる動作タイミングを検出した場合に、前記テンポ報知手段の動作を再開させる再開手段とを更に具備することを特徴とする請求項1記載のメトロノーム装置。前記テンポ変更手段は、第3の動作タイミングと第2の動作タイミングとの時間差分と、第2の動作タイミングと第1の動作タイミングとの時間差分とを相加平均して新たなテンポ周期を算出するテンポ周期算出手段を備えることを特徴とする請求項1記載のメトロノーム装置。コンピュータに、指定されたテンポ周期でテンポ報知するテンポ報知ステップと、前記テンポ報知ステップによるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出ステップと、前記テンポ報知ステップがテンポ報知するテンポ報知タイミングと前記検出ステップにより検出される動作タイミングとの時間差ΔTの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得ステップと、前記検出ステップにより検出される動作タイミングが、前記許容範囲取得ステップにより取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第1の動作タイミングと、許容範囲を逸脱した時に検出された第2の動作タイミングと、許容範囲を逸脱した後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知ステップに指示するテンポ変更ステップとを実行させることを特徴とするプログラム。ところで、上記特許文献1に開示の装置では、ユーザのタッピング動作に応じて一意的に定まるテンポ値に従ってテンポ報知するだけなので、ユーザが意図したリズム変化に対応してテンポを変更することが出来ないという問題が有る。本発明は、このような事情に鑑みてなされたもので、ユーザが意図したリズム変化に対応してテンポを変更することができるメトロノーム装置およびプログラムを提供することを目的としている。上記目的を達成するため、請求項1に記載の発明では、指定されたテンポ周期でテンポ報知するテンポ報知手段と、前記テンポ報知手段によるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出手段と、前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差ΔTの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第1の動作タイミングと、許容範囲を逸脱した時に検出された第2の動作タイミングと、許容範囲を逸脱した後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段とを具備することを特徴とする。本発明では、ユーザが意図したリズム変化に対応してテンポを変更することができる。以下、図面を参照して本発明の実施形態について説明する。A.構成図1は、実施の一形態によるメトロノーム装置100の構成を示すブロック図である。この図において、CPU10は、操作部13が発生する各種スイッチイベントに応じて装置各部を制御する。本発明の要旨に係わるCPU10の特徴的な処理動作については追って詳述する。ROM11には、CPU10にロードされる各種プログラムが記憶される。各種プログラムとは、後述するメインルーチン、報知処理、テンポ設定処理、スタート/ストップスイッチ処理A、マージン設定処理、スタート/ストップスイッチ処理Bおよびテンポ変更処理を含む。RAM12は、ワークエリアおよび検出データエリアを備える。RAM12のワークエリアには、CPU10の処理に用いられる各種レジスタフラグデータが一時記憶される。RAM12の検出データエリアには、後述するセンサ部14から出力される検出データが一時記憶される。操作部13は、装置電源をパワーオン/パワーオフする電源スイッチの他、動作モードテンポ調整モード又はテンポ変更モードを選択するモードスイッチ、モードスイッチ操作で選択された動作モードの開始/停止を指示するスタート/ストップスイッチおよびテンポ値を設定する設定スイッチ等を備え、それら各スイッチの操作に応じたイベントを発生する。操作部13が発生するイベントはCPU10により取り込まれる。センサ部14は、ユーザの動きを検出する加速度センサと、当該加速度センサの出力をA/D変換して検出データを発生するA/D変換器とから構成される。センサ部14が発生する検出データは、CPU10の制御の下に、RAM12の検出データエリアにストアされる。センサ部14の加速度センサは、例えば楽器演奏するユーザの上半身や足などの身体の一部に装着され、演奏しながら体を振ったり揺すったりしてリズムをとる動作以下、リズム動作と称すを検出し、例えば図2に図示するように、周期的なリズム動作を表す検出データを発生する。この検出データから得られる周期がテンポ周期となる。報知部15は、CPU10からの報知指示に応じてテンポ報知音を発音する。B.動作次に、図3~図12を参照して上記構成によるメトロノーム装置100の動作を説明する。以下では、メトロノーム装置100のCPU10が実行するメインルーチン、報知処理、テンポ設定処理、スタート/ストップスイッチ処理A、マージン設定処理、スタート/ストップスイッチ処理Bおよびテンポ変更処理の各動作について述べる。なお、後述する報知処理は、タイマインタラプトにより一定周期毎に割り込み実行される。1メインルーチンの動作電源スイッチ操作によりメトロノーム装置100がパワーオンされると、CPU10は図3に図示するメインルーチンを実行してステップSA1に進み、装置各部を初期化するイニシャライズを行う。イニシャライズが完了すると、次のステップSA2に進み、テンポ設定スイッチ処理を実行する。テンポ設定スイッチ処理では、後述するように、設定スイッチ操作に応じて設定されるテンポ値をレジスタTEMPOにストアすると共に、レジスタTEMPOにストアされた設定テンポ値で定まる1拍分のクロック数ティック数をレジスタBEATにストアする。続いて、ステップSA3では、モードフラグMFが0又は1の何れであるかを判別する。モードフラグMFは、モードスイッチがオン操作される毎に反転するフラグであり、0の場合にテンポ調整モードを表し、1の場合にテンポ変更モードを表す。モードフラグMFが0テンポ調整モードであると、ステップSA4を介してスタート/ストップスイッチ処理Aを実行する。スタート/ストップスイッチ処理Aでは、後述するように、スタートフラグSTFが1となり、テンポ調整モードの動作開始が指示されると、経過時間TタイマカウンタTの値をゼロリセットすると共に、タイミング配列Tを全てクリアし、さらにタイミング配列T中の配列番号を指定するポインタnを初期値1をストアした後、時間差上限TMAXおよび時間差下限TMINをそれぞれゼロリセットする。一方、スタートフラグSTFが0となり、テンポ調整モードの動作停止が指示されると、テンポ報知タイミング拍タイミングとユーザのリズム動作が行われたタイミングとの時間差ΔTを算出し、各拍タイミングにおける時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINを取得する。そして、次のステップSA5では、マージン設定処理を実行する。マージン設定処理では、後述するように、スタートフラグSTFが1となり、テンポ調整モードの動作が開始されている状態において、報知処理図4参照により発生されるテンポ報知音に従ったユーザのリズム動作を検出する毎に、検出時点における経過時間Tをポインタnで指定されるタイミング配列Tnに順次ストアする。この後、ステップSA6に進み、モードスイッチのオン操作の有無を判別する。モードスイッチがオン操作されなければ、判断結果はNOになり、上述したステップSA2に処理を戻すが、モードスイッチがオン操作されると、判断結果はYESになり、ステップSA7に進む。ステップSA7では、モードスイッチのオン操作に応じてモードフラグMFを反転させた後、上述のステップSA2に処理を戻す。そして、反転されたモードフラグMFが1テンポ変更モードになると、上述したステップSA3を介してステップSA8を介してスタート/ストップスイッチ処理Bを実行する。スタート/ストップスイッチ処理Bでは、後述するように、スタートフラグSTFが1となり、テンポ変更モードの動作開始が指示されると、経過時間TタイマカウンタTの値および経過時間T0タイマカウンタT0の値をゼロリセットし、ポインタnに初期値1をセットすると共に、オンフラグONFを1にセットする。更にレジスタTOLD、TNEW1、TNEW2をクリアし、タイミングフラグTF1、TF2をクリアした後、タイマインタラプトの禁止を解除して経過時間Tを計時するタイマカウンタTをスタートさせる。一方、スタートフラグSTFが0となり、テンポ変更モードの動作停止が指示されると、報知部15にテンポ報知音の消音を指示すると共に、タイマインタラプトを禁止して経過時間Tを計時するタイマカウンタTを一時停止させる。そして、次のステップSA9では、テンポ変更処理を実行する。テンポ変更処理では、後述するように、テンポ報知タイミングに対し、ユーザのリズム動作が許容範囲時間差下限TMIN以上、時間差上限TMAX以下を逸脱したタイミングで行われると、テンポ変更と判断し、その後に為されるユーザのリズム動作のタイミングから取得した新たなテンポ周期に基づきテンポ報知を再開する。また、テンポ変更処理では、ユーザのリズム動作を検出していない時間が2拍を超えると、タイマインタラプトを禁止して報知処理図4参照の動作を停止させ、その後に再び許容範囲時間差下限TMIN以上、時間差上限TMAX以下に収まるタイミングのリズム動作を検出すると、テンポ設定処理図5参照にて設定された以前のテンポ値に従ってテンポ報知を再開する。この後、上述したステップSA6に処理を進める。2報知処理の動作図4は、報知処理の動作を示すフローチャートである。CPU10では、報知処理をタイマインタラプトにより所定周期毎に実行する。実行タイミングになると、ステップSB1に進み、スタートフラグSTFが1であるか否かを判断する。スタートフラグSTFとは、スタート/ストップスイッチのオン操作に応じてセットされるフラグである。後述するように、スタート/ストップスイッチは、オン操作される毎に動作の開始/停止を交互に指示する所謂トグルスイッチとして機能し、オン操作に応じて反転されるスタートフラグSTFが1の場合には動作開始を指示し、一方、オン操作に応じて反転されるスタートフラグSTFが0の場合には動作停止を指示する。したがって、このステップSB1では、モードスイッチ操作で選択された動作モードテンポ調整モード/テンポ変更モードの何れかの開始を指示した状態であるかどうかを判断する。スタートフラグSTFが0、すなわちモードスイッチ操作で選択された動作モードが停止の状態ならば、上記ステップSB1の判断結果はNOになり、本処理を終えるが、スタートフラグSTFが1であると、上記ステップSB1の判断結果はYESになり、ステップSB2に進み、最小単位時間ティックが経過したか否かを判断する。最小単位時間が経過していなければ、判断結果はNOになり、本処理を終えるが、最小単位時間が経過していると、上記ステップSB2の判断結果がYESになり、ステップSB3に進み、タイマカウンタTをインクリメントして歩進させる。なお、このタイマカウンタTは、後述するように、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが1にセットされた時点、つまり動作開始時点からの経過時間を計時する。以下、タイマカウンタTの値を経過時間Tと称す。続いて、ステップSB4では、経過時間Tがn×BEATに一致したか否かを判断する。ここで、ポインタnは、後述するように、ユーザのリズム動作を検出するセンサ部14が所定レベル以上のセンサ出力検出データを発生する毎にインクリメントされて歩進される正数である。また、レジスタBEATには、後述するテンポ設定処理図5参照において、設定テンポ値で定まる1拍分のクロック数ティック数がストアされる。したがって、経過時間Tが設定テンポ値TEMPOに対応した拍タイミングになると、判断結果はYESとなり、ステップSB5に進み、報知部15にテンポ報知音の発生を指示して本処理を終える。一方、経過時間Tが設定テンポ値TEMPOに対応した拍タイミングに一致しなければ、上記ステップSB5の判断結果はNOになり、テンポ報知音を発生させずに本処理を終える。このように、報知処理では、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが1となり、動作開始が指示され、最小単位時間ティックが経過すると、タイマカウンタTにより計時される経過時間Tを歩進させ、歩進させた経過時間Tがn×BEATに一致すると、テンポ報知音を発生させる。3テンポ設定処理の動作次に、図5を参照してテンポ設定処理の動作を説明する。前述したメインルーチンのステップSA2図3参照を介して本処理が実行されると、CPU10は図5に図示するステップSC1に進み、設定スッチの操作の有無を判断する。設定スイッチが操作されなければ、判断結果はNOになり、本処理を終えるが、設定スイッチが操作されると、上記ステップSC1の判断結果がYESとなり、ステップSC2に進む。ステップSC2では、設定スイッチ操作に応じて設定されるテンポ値をレジスタTEMPOにストアし、続くステップSC3では、レジスタTEMPOにストアされた設定テンポ値で定まる1拍分のクロック数ティック数をレジスタBEATにストアして本処理を終える。4スタート/ストップスイッチ処理Aの動作次に、図6を参照してスタート/ストップスイッチ処理Aの動作を説明する。前述したメインルーチンのステップSA4図3参照を介して本処理が実行されると、CPU10は図6に図示するステップSD1に進み、スタート/ストップスイッチがオン操作されたか否かを判断する。スタート/ストップスイッチがオン操作されなければ、判断結果はNOになり、本処理を終える。一方、スタート/ストップスイッチがオン操作されると、上記ステップSD1の判断結果がYESになり、ステップSD2に進み、スタートフラグSTFを反転する。そして、ステップSD3では、反転されたスタートフラグSTFが1であるか否かを判断する。以下、スタートフラグSTFが1の場合の動作と、スタートフラグSTFが0の場合の動作とに分けて説明を進める。<スタートフラグSTFが1の場合>反転されたスタートフラグSTFが1となり、モードスイッチ操作で選択されたテンポ調整モードの動作開始が指示されると、上記ステップSD3の判断結果はYESとなり、ステップSD4に進む。ステップSD4では、経過時間TタイマカウンタTの値をゼロリセットし、続くステップSD5では、経過時間Tを一時記憶する複数のタイミング配列Tを全てクリアする。そして、ステップSD6では、タイミング配列T中の配列番号を指定するポインタnを初期値1をストアする。この後、ステップSD7に進み、レジスタTMAX、TMINをそれぞれゼロリセットして本処理を終える。なお、レジスタTMAX、TMINが意図するところについては追って述べる。また、上記ステップSD4~SD7において、テンポ調整モードの動作開始に伴った初期化が完了すると、一旦、スタート/ストップスイッチ処理Aの動作を終えて、図7のマージン設定処理を実行する。マージン設定処理では、後述するように、スタートフラグSTFが1となり、テンポ調整モードの動作が開始されている状態において、前述した報知処理図4参照により発生されるテンポ報知音に合わせるように行われるユーザのリズム動作を検出する毎に、検出時点における経過時間Tをポインタnで指定されるタイミング配列Tnに順次ストアする。<スタートフラグSTFが0の場合>さて、こうしたマージン設定処理が実行されている状態において、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが0となり、テンポ調整モードの動作停止が指示されたとする。そうすると、上記ステップSD3の判断結果はNOとなり、ステップSD8に進む。ステップSD8では、タイマインタラプトを禁止して報知処理図4参照の動作を停止させ、これにより経過時間Tを計時するタイマカウンタTを一時停止させる。次いで、ステップSD9では、マージン設定処理によってタイミング配列T1~Tnに格納された各経過時間Tを読み出す為のポインタmを初期値1にセットする。続いて、ステップSD10では、ポインタmの値とレジスタBEATに格納されるクロック数ティック数との乗算値m×BEAT拍タイミングからポインタmで指定されるタイミング配列Tmの差分、すなわちテンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング拍タイミングとリズム動作が行われたタイミングとの時間差ΔTを算出する。続いて、ステップSD11では、算出された時間差ΔTがレジスタTMAXの値を超えているか否かを判断する。以下、レジスタTMAXの値を時間差上限TMAXと称す。時間差ΔTが時間差上限TMAXを超えていれば、判断結果はYESになり、ステップSD12に進み、時間差ΔTを新たな時間差上限TMAXとして更新した後、ステップSD15に進む。一方、時間差ΔTが時間差上限TMAXより小さければ、上記ステップSD11の判断結果はNOになり、ステップSD13に進む。ステップSD13では、算出された時間差ΔTがレジスタTMINの値より小さいか否かを判断する。以下、レジスタTMINの値を時間差下限TMINと称す。時間差ΔTが時間差下限TMINより小さければ、判断結果はYESになり、ステップSD14に進み、時間差ΔTを新たな時間差下限TMINとして更新した後、ステップSD15に進む。これに対し、時間差ΔTが時間差下限TMINより大きいと、上記ステップSD13の判断結果はNOになり、ステップSD15に進む。そして、ステップSD15では、ポインタmをインクリメントして歩進させ、続くステップSD16では、歩進されたポインタmがポインタnを超えたか、つまりマージン設定処理で取得したタイミング配列T1~Tnの全てについて読み出し終えたかどうかを判断する。全てのタイミング配列T1~nを読み出し終えていなければ、ここでの判断結果はNOになり、上述のステップSD10に処理を戻す。以後、全てのタイミング配列T1~Tnについて読み出し終える迄、上述したステップSD10~SD16を繰り返す。これにより、各拍タイミングにおける時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINが得られる。そして、全てのタイミング配列T1~Tnについて読み出し終えると、上記ステップSD16の判断結果がYESになり、本処理を終える。このように、スタート/ストップスイッチ処理Aでは、スタートフラグSTFが1となり、テンポ調整モードの動作開始が指示されると、経過時間TタイマカウンタTの値をゼロリセットすると共に、タイミング配列Tを全てクリアし、さらにタイミング配列T中の配列番号を指定するポインタnを初期値1をストアした後、時間差上限TMAXおよび時間差下限TMINをそれぞれゼロリセットする。一方、スタートフラグSTFが0となり、テンポ調整モードの動作停止が指示されると、テンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング拍タイミングとリズム動作が行われたタイミングとの時間差ΔTを算出する。そして、図8に図示する一例のように、各拍タイミングT0T1,...における時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINを取得する。5マージン設定処理の動作次に、図7を参照してマージン設定処理の動作を説明する。前述したメインルーチンのステップSA5図3参照を介して本処理が実行されると、CPU10は図7に図示するステップSE1に進み、スタートフラグSTFが1であるか否か、すなわちテンポ調整モードの動作が開始されているかどうかを判断する。スタートフラグSTFが0テンポ調整モードの動作が停止中であれば、判断結果はNOになり、本処理を完了させるが、テンポ調整モードの動作が開始されていると、判断結果はYESになり、ステップSE2に進む。ステップSE2では、センサ部14が所定レベル以上のセンサ出力検出データを発生したか否か、換言すれば、ユーザのリズム動作を検出したかどうかを判断する。なお、ここで言うユーザのリズム動作とは、前述した報知処理図4参照により発生されるテンポ報知音に従ってリズムを取る動作を指す。こうしたユーザのリズム動作が検出されない場合、つまりセンサ部14から出力されるセンサ出力検出データが所定レベル未満であると、上記ステップSE2の判断結果はNOとなり、本処理を終える。一方、ユーザのリズム動作が検出された場合、すなわちセンサ部14から出力されるセンサ出力検出データが所定レベル以上であると、上記ステップSE2の判断結果はYESになり、ステップSE3に進む。ステップSE3では、ポインタnで指定されるタイミング配列Tnに経過時間Tをストアする。なお、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが1となった直後では、ポインタnには初期値1がセットされるので、タイミング配列T1に最初の経過時間Tがストアされる。そして、ステップSE4に進むと、ポインタnをインクリメントして歩進させた後、本処理を終える。以上のように、マージン設定処理では、スタートフラグSTFが1となり、テンポ調整モードの動作が開始されている状態において、前述した報知処理図4参照により発生されるテンポ報知音に従ったユーザのリズム動作を検出する毎に、検出時点における経過時間Tをポインタnで指定されるタイミング配列Tnに順次ストアするようになっている。6スタート/ストップスイッチ処理Bの動作次に、図9を参照してスタート/ストップスイッチ処理Bの動作を説明する。前述したメインルーチンのステップSA8図3参照を介して本処理が実行されると、CPU10は図9に図示するステップSF1に進み、スタート/ストップスイッチがオン操作されたか否かを判断する。スタート/ストップスイッチがオン操作されなければ、判断結果はNOになり、本処理を終えるが、オン操作された場合には判断結果がYESになり、ステップSF2に進み、スタートフラグSTFを反転する。続いて、ステップSF3では、反転されたスタートフラグSTFが1であるか否かを判断する。以下、スタートフラグSTFが1の場合の動作と、スタートフラグSTFが0の場合の動作とに分けて説明を進める。<スタートフラグSTFが1の場合>反転されたスタートフラグSTFが1となり、モードスイッチ操作で選択されたテンポ変更モードの動作開始が指示されると、上記ステップSF3の判断結果はYESとなり、ステップSF4に進む。ステップSF4~SF8では、後述するテンポ変更処理図10~図11参照で用いられるタイマカウンタ、フラグおよびレジスタを初期化する。すなわち、ステップSF4では、経過時間TタイマカウンタTの値および経過時間T0タイマカウンタT0の値をゼロリセットし、続くステップSF5では、ポインタnに初期値1をセットすると共に、オンフラグONFを1にセットする。ステップSF6では、レジスタTOLD、TNEW1、TNEW2をクリアし、ステップSF7では、タイミングフラグTF1、TF2をクリアする。そして、ステップSF8では、タイマインタラプトの禁止を解除して報知処理図4参照を起動させ、これにより経過時間Tを計時するタイマカウンタTをスタートさせて本処理を終える。<スタートフラグSTFが0の場合>反転されたスタートフラグSTFが0となり、モードスイッチ操作で選択されたテンポ変更モードの動作停止が指示されると、上記ステップSF3の判断結果はNOとなり、ステップSF9に進み、報知部15にテンポ報知音の消音を指示し、続くステップSF10では、タイマインタラプトを禁止して報知処理図4参照の動作を停止させ、これにより経過時間Tを計時するタイマカウンタTを一時停止させて本処理を終える。このように、スタート/ストップスイッチ処理Bでは、スタートフラグSTFが1となり、テンポ変更モードの動作開始が指示されると、経過時間TタイマカウンタTの値および経過時間T0タイマカウンタT0の値をゼロリセットし、ポインタnに初期値1をセットすると共に、オンフラグONFを1にセットする。更にレジスタTOLD、TNEW1、TNEW2をクリアし、タイミングフラグTF1、TF2をクリアした後、タイマインタラプトの禁止を解除して経過時間Tを計時するタイマカウンタTをスタートさせる。一方、スタートフラグSTFが0となり、テンポ変更モードの動作停止が指示されると、報知部15にテンポ報知音の消音を指示すると共に、タイマインタラプトを禁止して経過時間Tを計時するタイマカウンタTを一時停止させる。7テンポ変更処理の動作次に、図10~図11を参照してテンポ変更処理の動作を説明する。前述したメインルーチンのステップSA9図3参照を介して本処理が実行されると、CPU10は図10に図示するステップSG1に進み、スタートフラグSTFが1、つまりテンポ変更モードの動作が開始されているか否かを判断する。テンポ変更モードの動作が開始されておらず、スタートフラグSTFが0ならば、判断結果はNOになり、本処理を終えるが、テンポ変更モードの動作が開始されていると、判断結果はYESになり、ステップSG2に進む。ステップSG2では、タイマ停止中であるか否かを判断する。スタートフラグSTFが1となり、テンポ変更モードの動作開始が指示された直後ではタイマ起動中なので、判断結果はNOになり、ステップSG3に進み、最小単位時間ティックが経過したか否かを判断する。最小単位時間が経過していなければ、判断結果はNOになり、後述のステップSG12に進むが、最小単位時間が経過すると、、判断結果はYESになり、ステップSG4に進み、経過時間T0をインクリメントして歩進させる。なお、経過時間T0はユーザのリズム動作を検出していない時間を表す。次いで、ステップSG5では、経過時間T0が2拍2×BEAT以下であるか否か、つまりユーザのリズム動作を検出していない時間が2拍以下であるかどうかを判断する。ユーザのリズム動作を検出していない時間が2拍を超えていれば、判断結果はNOになり、ステップSG6に進み、タイマインタラプトを禁止して報知処理図4参照の動作を停止させ、これにより経過時間Tを計時するタイマカウンタTを一時停止させる。そして、ステップSG7~SG8では、レジスタTOLD、TNEW1およびTNEW2をクリアすると共に、フラグTF1、TF2をクリアして本処理を終える。これに対し、ユーザのリズム動作を検出していない時間が2拍以下ならば、上記ステップSG5の判断結果はYESになり、ステップSG9に進み、経過時間Tがn×BEATに一致したか否か、つまり設定テンポ値TEMPOに対応したテンポ報知タイミング拍タイミングであるかどうかを判断する。テンポ報知タイミングでなければ、判断結果はNOになり、後述のステップSG12に進むが、テンポ報知タイミングならば、判断結果はYESになり、ステップSG10に進む。ステップSG10では、オンフラグONFが1であるか否かを判断する。オンフラグONFは、テンポ変更される場合に0、テンポ変更済みの場合に1となるフラグである。したがって、ここではテンポ変更済みである否かを判断する。テンポ変更済みオンフラグONFが1ならば、判断結果はYESになり、ステップSG11に進み、テンポ報知音の発生を報知部15に指示する。これによりテン報知音が発音される。一方、テンポ変更オンフラグONFが0であると、上記ステップSG10の判断結果はNOになり、ステップSG12に進む。ステップSG12では、センサ部14が所定レベル以上のセンサ出力検出データを発生したか否か、すなわち、ユーザのリズム動作を検出したかどうかを判断する。ユーザのリズム動作が検出されなければ、判断結果はNOになり、本処理を終えるが、ユーザのリズム動作を検出すると、上記ステップSG12の判断結果がYESになり、ステップSG13に進む。ステップSG13~SG15では、経過時間TをレジスタTNEW2に、レジスタTNEW2の値をレジスタTNEW1に、レジスタTNEW1の値をレジスタTOLDにそれぞれストアし直す。つまり、レジスタTNEW2には現リズム動作のタイミング経過時間Tが、レジスタTNEW1にはその一つ前のリズム動作のタイミングが、レジスタTOLDにはさらに一つ前のリズム動作のタイミングがそれぞれストアされることになる。次いで、ステップSG16では、ユーザのリズム動作を検出したのに対応して経過時間T0をゼロリセットする。続いて、ステップSG17では、タイマ停止中であるか否かを判断する。タイマ停止中でなければ、判断結果はNOになり、図11に図示するステップSG19に進む。タイマ停止中ならば、上記ステップSG17の判断結果はYESになり、ステップSG18に進み、タイマインタラプトの禁止を解除して報知処理図4参照を起動させ、これにより経過時間Tを計時するタイマカウンタTをスタートさせた後、図11に図示するステップSG19に進む。ステップSG19では、ポインタnの値とレジスタBEATに格納されるクロック数ティック数との乗算値n×BEAT拍タイミングから経過時間Tの差分、すなわちテンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング拍タイミングとリズム動作が行われたタイミングとの時間差ΔTを算出する。次いで、ステップSG20では、算出された時間差ΔTが時間差下限TMIN以上、時間差上限TMAX以下であるか否か、つまりテンポ報知音に合わせて行われたユーザのリズム動作のタイミングが許容範囲時間差下限TMIN以上、時間差上限TMAX以下に収まっているかどうかを判断する。許容範囲内ならば、判断結果はYESとなり、ステップSG21に進み、ポインタnの値をインクリメントして歩進させて本処理を終える。したがって、この場合にはテンポ変更は行われない。一方、テンポ報知音に合わせて行われたユーザのリズム動作のタイミングが許容範囲時間差下限TMIN以上、時間差上限TMAX以下を超えた場合には、上記ステップSG20の判断結果がNOになり、ステップSG22に進む。ステップSG22では、オンフラグONFを0にセットしてテンポ変更する旨を表す。続いて、ステップSG23~SG24では、フラグTF2をフラグTF1にセットし、フラグTF2に1をセットする。そして、ステップSG25では、フラグTF1,TF2が共に1であるか否か、すなわちユーザのリズム動作のタイミングが2回続けて許容範囲を超えたかどうかを判断する。許容範囲を2回続けて超えなければ、判断結果はNOになり、本処理を終えるが、許容範囲を2回続けて超えると、判断結果がYESになり、ステップSG26に進む。ステップSG26では、レジスタTNEW2に格納される現リズム動作のタイミング経過時間TとレジスタTNEW1に格納されるその一つ前のリズム動作のタイミングとの時間差TNEW2-TNEW1と、レジスタTNEW1に格納されるその一つ前のリズム動作のタイミングとレジスタTOLDに格納されるさらに一つ前のリズム動作のタイミングとの時間差TNEW1-TOLDとの相加平均TNEW2-TNEW1TNEW1-TOLD/2に基づき算出される周期に基づき一拍分のクロック数ティック数を算出してレジスタBEATにストアする。次いで、ステップSG27では、レジスタBEATの値に応じたテンポ値をレジスタTEMPOにストアする。こうして、テンポ変更が完了すると、ステップSG28に進み、フラグTF1、TF2を0にセットし、続くステップSG29では、テンポ変更済みに対応してオンフラグONFに1をセットして本処理を終える。次に、図12を参照して上述したテンポ変更処理の動作について具体的に説明する。時刻t0のテンポ報知タイミングに対するユーザのリズム動作が、許容範囲t0margin上述した時間差下限TMIN以上、時間差上限TMAX以下の範囲に収まるタイミングt0oldで為されると、時刻t1にテンポ報知音が発生する。そして、時刻t1のテンポ報知タイミングに対し、ユーザのリズム動作のタイミングが許容範囲t1marginを逸脱した時刻t1newで行われたとする。そうすると、テンポ変更するものと見なし、時刻t2でのテンポ報知を行わないようにする。その後、時刻t2newにおいてユーザのリズム動作が為されると、t2new-t1newt1new-t0old/2に基づき算出される新たなテンポ周期を確定し、確定した新たなテンポ周期に基づき時刻t3からテンポ報知動作を再開する。このように、ユーザのリズム動作のタイミングを異ならせてテンポ報知のタイミングを変化させるので、ユーザが意図したリズム変化に対応してテンポを変更することが可能になる。また、上述したテンポ変更処理では、ユーザのリズム動作を検出していない時間が2拍を超えると、タイマインタラプトを禁止して報知処理図4参照の動作を停止させ、その後に再び許容範囲時間差下限TMIN以上、時間差上限TMAX以下に収まるタイミングでユーザのリズム動作を検出すると、テンポ設定処理図5参照にて設定された元のテンポに対応してテンポ報知を再開することも出来る。以上説明したように、本実施形態では、テンポ報知タイミングとユーザのリズム動作が行われたタイミングとの時間差ΔTを算出し、算出された各拍タイミングにおける時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINを取得する。そして、テンポ報知タイミングに対し、ユーザのリズム動作が許容範囲時間差下限TMIN以上、時間差上限TMAX以下を逸脱したタイミングで行われると、テンポ変更と判断し、許容範囲を逸脱する前に検出された第1の動作タイミングt0oldと、許容範囲を逸脱した時に検出された第2の動作タイミングt1newと、許容範囲を逸脱した後に検出された第3の動作タイミングt2newとを用い、t2new-t1newt1new-t0old/2から算出される新たなテンポ周期に基づきテンポ報知を再開するので、ユーザが意図したリズム変化に対応してテンポを変更することが出来る。また、ユーザのリズム動作を検出していない時間が2拍を超えると、タイマインタラプトを禁止して報知処理図4参照の動作を停止させ、その後に再び許容範囲時間差下限TMIN以上、時間差上限TMAX以下に収まるタイミングでユーザのリズム動作を検出すると、テンポ設定処理図5参照にて設定された元のテンポに対応してテンポ報知を再開するので、ユーザが意図したリズム変化に対応してテンポを変更することが出来る。以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。付記[請求項1]指定されたテンポ周期でテンポ報知するテンポ報知手段と、前記テンポ報知手段によるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出手段と、前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差ΔTの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第1の動作タイミングと、許容範囲を逸脱した時に検出された第2の動作タイミングと、許容範囲を逸脱した後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段とを具備することを特徴とするメトロノーム装置。[請求項2]前記検出手段がユーザの動作タイミングを一定時間検出しない場合に、前記テンポ報知手段の動作を停止させる停止手段と、前記停止手段により前記テンポ報知手段の動作を停止させた後に、再び前記検出手段が許容範囲に収まる動作タイミングを検出した場合に、前記テンポ報知手段の動作を再開させる再開手段とを更に具備することを特徴とする請求項1記載のメトロノーム装置。[請求項3]前記テンポ変更手段は、第3の動作タイミングと第2の動作タイミングとの時間差分と、第2の動作タイミングと第1の動作タイミングとの時間差分とを相加平均して新たなテンポ周期を算出するテンポ周期算出手段を備えることを特徴とする請求項1記載のメトロノーム装置。[請求項4]コンピュータに、指定されたテンポ周期でテンポ報知するテンポ報知ステップと、前記テンポ報知ステップによるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出ステップと、前記テンポ報知ステップがテンポ報知するテンポ報知タイミングと前記検出ステップにより検出される動作タイミングとの時間差ΔTの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得ステップと、前記検出ステップにより検出される動作タイミングが、前記許容範囲取得ステップにより取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第1の動作タイミングと、許容範囲を逸脱した時に検出された第2の動作タイミングと、許容範囲を逸脱した後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知ステップに指示するテンポ変更ステップとを実行させることを特徴とするプログラム。"