特許第5732882号(P5732882)IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ カシオ計算機株式会社の特許一覧

<>
  • 特許5732882-メトロノーム装置およびプログラム 図000002
  • 特許5732882-メトロノーム装置およびプログラム 図000003
  • 特許5732882-メトロノーム装置およびプログラム 図000004
  • 特許5732882-メトロノーム装置およびプログラム 図000005
  • 特許5732882-メトロノーム装置およびプログラム 図000006
  • 特許5732882-メトロノーム装置およびプログラム 図000007
  • 特許5732882-メトロノーム装置およびプログラム 図000008
  • 特許5732882-メトロノーム装置およびプログラム 図000009
  • 特許5732882-メトロノーム装置およびプログラム 図000010
  • 特許5732882-メトロノーム装置およびプログラム 図000011
  • 特許5732882-メトロノーム装置およびプログラム 図000012
  • 特許5732882-メトロノーム装置およびプログラム 図000013
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】5732882
(24)【登録日】2015年4月24日
(45)【発行日】2015年6月10日
(54)【発明の名称】メトロノーム装置およびプログラム
(51)【国際特許分類】
   G04F 5/02 20060101AFI20150521BHJP
【FI】
   G04F5/02 C
【請求項の数】4
【全頁数】17
(21)【出願番号】特願2011-25544(P2011-25544)
(22)【出願日】2011年2月9日
(65)【公開番号】特開2012-163500(P2012-163500A)
(43)【公開日】2012年8月30日
【審査請求日】2014年1月27日
(73)【特許権者】
【識別番号】000001443
【氏名又は名称】カシオ計算機株式会社
(74)【代理人】
【識別番号】100096699
【弁理士】
【氏名又は名称】鹿嶋 英實
(72)【発明者】
【氏名】渡邊 一嘉
【審査官】 榮永 雅夫
(56)【参考文献】
【文献】 特開2001−141852(JP,A)
【文献】 特開2007−193907(JP,A)
【文献】 特開平06−130960(JP,A)
【文献】 特開2001−239070(JP,A)
【文献】 特開2003−195858(JP,A)
【文献】 特開2006−226930(JP,A)
【文献】 特開平06−259076(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
G04F 5/02
G09B 15/00
G10H 1/00
(57)【特許請求の範囲】
【請求項1】
指定されたテンポ周期でテンポ報知するテンポ報知手段と、
ユーザの動作タイミングを検出する検出手段と、
前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差の揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、
前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する直前に検出された第1の動作タイミングと、前記第1の動作タイミングに連続して、許容範囲を逸脱した時に検出された第2の動作タイミングと、前記第2の動作タイミングに連続して、許容範囲を逸脱した直後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段と
を具備することを特徴とするメトロノーム装置。
【請求項2】
前記検出手段がユーザの動作タイミングを一定時間検出しない場合に、前記テンポ報知手段の動作を停止させる停止手段と、
前記停止手段により前記テンポ報知手段の動作を停止させた後に、再び前記検出手段が許容範囲に収まる動作タイミングを検出した場合に、前記テンポ報知手段の動作を再開させる再開手段と
を更に具備することを特徴とする請求項1記載のメトロノーム装置。
【請求項3】
前記テンポ変更手段は、前記第3の動作タイミングと前記第2の動作タイミングとの時間差分と、前記第2の動作タイミングと前記第1の動作タイミングとの時間差分とを相加平均して新たなテンポ周期を算出するテンポ周期算出手段を備えることを特徴とする請求項1記載のメトロノーム装置。
【請求項4】
コンピュータに、
指定されたテンポ周期でテンポ報知するテンポ報知ステップと、
ユーザの動作タイミングを検出する検出ステップと、
前記テンポ報知ステップがテンポ報知するテンポ報知タイミングと前記検出ステップにより検出される動作タイミングとの時間差の揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得ステップと、
前記検出ステップにより検出される動作タイミングが、前記許容範囲取得ステップにより取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する直前に検出された第1の動作タイミングと、前記第1の動作タイミングに連続して、許容範囲を逸脱した時に検出された第2の動作タイミングと、前記第2の動作タイミングに連続して、許容範囲を逸脱した直後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知ステップに指示するテンポ変更ステップと
を実行させることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、ユーザのリズム動作に応じて、報知するテンポを変更可能なメトロノーム装置およびプログラムに関する。
【背景技術】
【0002】
従来より、一分間における四分音符の数を設定して一定のリズムを刻む機械式のメトロノームの他、例えば特許文献1に開示されているように、ユーザのタッピング動作に応じて入力されるタップ周期を判定し、判定したタップ周期から算出されるテンポ値でテンポ報知する電子式のメトロノーム装置も知られている。
【先行技術文献】
【特許文献】
【0003】
【特許文献1】特開2006−226930号公報
【発明の概要】
【発明が解決しようとする課題】
【0004】
ところで、上記特許文献1に開示の装置では、ユーザのタッピング動作に応じて一意的に定まるテンポ値に従ってテンポ報知するだけなので、ユーザが意図したリズム変化に対応してテンポを変更することが出来ないという問題が有る。
【0005】
本発明は、このような事情に鑑みてなされたもので、ユーザが意図したリズム変化に対応してテンポを変更することができるメトロノーム装置およびプログラムを提供することを目的としている。
【課題を解決するための手段】
【0006】
上記目的を達成するため、請求項1に記載の発明では、指定されたテンポ周期でテンポ報知するテンポ報知手段と、ユーザの動作タイミングを検出する検出手段と、前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差の揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する直前に検出された第1の動作タイミングと、前記第1の動作タイミングに連続して、許容範囲を逸脱した時に検出された第2の動作タイミングと、前記第2の動作タイミングに連続して、許容範囲を逸脱した直後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段とを具備することを特徴とする。
【発明の効果】
【0007】
本発明では、ユーザが意図したリズム変化に対応してテンポを変更することができる。
【図面の簡単な説明】
【0008】
図1】実施の一形態によるメトロノーム装置100の構成を示すブロック図である。
図2】ユーザのリズム動作に応じてセンサ部14が発生する検出出力とテンポ周期との関係を示す図である。
図3】メインルーチンの動作を示すフローチャートである。
図4】報知処理の動作を示すフローチャートである。
図5】テンポ設定処理の動作を示すフローチャートである。
図6】スタート/ストップスイッチ処理Aの動作を示すフローチャートである。
図7】マージン設定処理の動作を示すフローチャートである。
図8】マージン設定動作を説明するための図である。
図9】スタート/ストップスイッチ処理Bの動作を示すフローチャートである。
図10】テンポ変更処理の動作を示すフローチャートである。
図11】テンポ変更処理の動作を示すフローチャートである。
図12】テンポ変更動作を説明するための図である。
【発明を実施するための形態】
【0009】
以下、図面を参照して本発明の実施形態について説明する。
A.構成
図1は、実施の一形態によるメトロノーム装置100の構成を示すブロック図である。この図において、CPU10は、操作部13が発生する各種スイッチイベントに応じて装置各部を制御する。本発明の要旨に係わるCPU10の特徴的な処理動作については追って詳述する。ROM11には、CPU10にロードされる各種プログラムが記憶される。各種プログラムとは、後述するメインルーチン、報知処理、テンポ設定処理、スタート/ストップスイッチ処理A、マージン設定処理、スタート/ストップスイッチ処理Bおよびテンポ変更処理を含む。
【0010】
RAM12は、ワークエリアおよび検出データエリアを備える。RAM12のワークエリアには、CPU10の処理に用いられる各種レジスタ・フラグデータが一時記憶される。RAM12の検出データエリアには、後述するセンサ部14から出力される検出データが一時記憶される。操作部13は、装置電源をパワーオン/パワーオフする電源スイッチの他、動作モード(テンポ調整モード又はテンポ変更モード)を選択するモードスイッチ、モードスイッチ操作で選択された動作モードの開始/停止を指示するスタート/ストップスイッチおよびテンポ値を設定する設定スイッチ等を備え、それら各スイッチの操作に応じたイベントを発生する。操作部13が発生するイベントはCPU10により取り込まれる。
【0011】
センサ部14は、ユーザの動きを検出する加速度センサと、当該加速度センサの出力をA/D変換して検出データを発生するA/D変換器とから構成される。センサ部14が発生する検出データは、CPU10の制御の下に、RAM12の検出データエリアにストアされる。センサ部14の加速度センサは、例えば楽器演奏するユーザの上半身や足などの身体の一部に装着され、演奏しながら体を振ったり揺すったりしてリズムをとる動作(以下、リズム動作と称す)を検出し、例えば図2に図示するように、周期的なリズム動作を表す検出データを発生する。この検出データから得られる周期がテンポ周期となる。報知部15は、CPU10からの報知指示に応じてテンポ報知音を発音する。
【0012】
B.動作
次に、図3図12を参照して上記構成によるメトロノーム装置100の動作を説明する。以下では、メトロノーム装置100のCPU10が実行するメインルーチン、報知処理、テンポ設定処理、スタート/ストップスイッチ処理A、マージン設定処理、スタート/ストップスイッチ処理Bおよびテンポ変更処理の各動作について述べる。なお、後述する報知処理は、タイマインタラプトにより一定周期毎に割り込み実行される。
【0013】
(1)メインルーチンの動作
電源スイッチ操作によりメトロノーム装置100がパワーオンされると、CPU10は図3に図示するメインルーチンを実行してステップSA1に進み、装置各部を初期化するイニシャライズを行う。イニシャライズが完了すると、次のステップSA2に進み、テンポ設定スイッチ処理を実行する。テンポ設定スイッチ処理では、後述するように、設定スイッチ操作に応じて設定されるテンポ値をレジスタTEMPOにストアすると共に、レジスタTEMPOにストアされた設定テンポ値で定まる1拍分のクロック数(ティック数)をレジスタBEATにストアする。
【0014】
続いて、ステップSA3では、モードフラグMFが「0」又は「1」の何れであるかを判別する。モードフラグMFは、モードスイッチがオン操作される毎に反転するフラグであり、「0」の場合にテンポ調整モードを表し、「1」の場合にテンポ変更モードを表す。モードフラグMFが「0」(テンポ調整モード)であると、ステップSA4を介してスタート/ストップスイッチ処理Aを実行する。
【0015】
スタート/ストップスイッチ処理Aでは、後述するように、スタートフラグSTFが「1」となり、テンポ調整モードの動作開始が指示されると、経過時間T(タイマカウンタTの値)をゼロリセットすると共に、タイミング配列T( )を全てクリアし、さらにタイミング配列T( )中の配列番号を指定するポインタnを初期値「1」をストアした後、時間差上限TMAXおよび時間差下限TMINをそれぞれゼロリセットする。一方、スタートフラグSTFが「0」となり、テンポ調整モードの動作停止が指示されると、テンポ報知タイミング(拍タイミング)とユーザのリズム動作が行われたタイミングとの時間差ΔTを算出し、各拍タイミングにおける時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINを取得する。
【0016】
そして、次のステップSA5では、マージン設定処理を実行する。マージン設定処理では、後述するように、スタートフラグSTFが「1」となり、テンポ調整モードの動作が開始されている状態において、報知処理(図4参照)により発生されるテンポ報知音に従ったユーザのリズム動作を検出する毎に、検出時点における経過時間Tをポインタnで指定されるタイミング配列T(n)に順次ストアする。
【0017】
この後、ステップSA6に進み、モードスイッチのオン操作の有無を判別する。モードスイッチがオン操作されなければ、判断結果は「NO」になり、上述したステップSA2に処理を戻すが、モードスイッチがオン操作されると、判断結果は「YES」になり、ステップSA7に進む。ステップSA7では、モードスイッチのオン操作に応じてモードフラグMFを反転させた後、上述のステップSA2に処理を戻す。そして、反転されたモードフラグMFが「1」(テンポ変更モード)になると、上述したステップSA3を介してステップSA8を介してスタート/ストップスイッチ処理Bを実行する。
【0018】
スタート/ストップスイッチ処理Bでは、後述するように、スタートフラグSTFが「1」となり、テンポ変更モードの動作開始が指示されると、経過時間T(タイマカウンタTの値)および経過時間T0(タイマカウンタT0の値)をゼロリセットし、ポインタnに初期値「1」をセットすると共に、オンフラグONFを「1」にセットする。更にレジスタTOLD、TNEW1、TNEW2をクリアし、タイミングフラグTF1、TF2をクリアした後、タイマインタラプトの禁止を解除して経過時間Tを計時するタイマカウンタTをスタートさせる。一方、スタートフラグSTFが「0」となり、テンポ変更モードの動作停止が指示されると、報知部15にテンポ報知音の消音を指示すると共に、タイマインタラプトを禁止して経過時間Tを計時するタイマカウンタTを一時停止させる。
【0019】
そして、次のステップSA9では、テンポ変更処理を実行する。テンポ変更処理では、後述するように、テンポ報知タイミングに対し、ユーザのリズム動作が許容範囲(時間差下限TMIN以上、時間差上限TMAX以下)を逸脱したタイミングで行われると、テンポ変更と判断し、その後に為されるユーザのリズム動作のタイミングから取得した新たなテンポ周期に基づきテンポ報知を再開する。また、テンポ変更処理では、ユーザのリズム動作を検出していない時間が2拍を超えると、タイマインタラプトを禁止して報知処理(図4参照)の動作を停止させ、その後に再び許容範囲(時間差下限TMIN以上、時間差上限TMAX以下)に収まるタイミングのリズム動作を検出すると、テンポ設定処理(図5参照)にて設定された以前のテンポ値に従ってテンポ報知を再開する。この後、上述したステップSA6に処理を進める。
【0020】
(2)報知処理の動作
図4は、報知処理の動作を示すフローチャートである。CPU10では、報知処理をタイマインタラプトにより所定周期毎に実行する。実行タイミングになると、ステップSB1に進み、スタートフラグSTFが「1」であるか否かを判断する。スタートフラグSTFとは、スタート/ストップスイッチのオン操作に応じてセットされるフラグである。
【0021】
後述するように、スタート/ストップスイッチは、オン操作される毎に動作の開始/停止を交互に指示する所謂トグルスイッチとして機能し、オン操作に応じて反転されるスタートフラグSTFが「1」の場合には動作開始を指示し、一方、オン操作に応じて反転されるスタートフラグSTFが「0」の場合には動作停止を指示する。したがって、このステップSB1では、モードスイッチ操作で選択された動作モード(テンポ調整モード/テンポ変更モードの何れか)の開始を指示した状態であるかどうかを判断する。
【0022】
スタートフラグSTFが「0」、すなわちモードスイッチ操作で選択された動作モードが停止の状態ならば、上記ステップSB1の判断結果は「NO」になり、本処理を終えるが、スタートフラグSTFが「1」であると、上記ステップSB1の判断結果は「YES」になり、ステップSB2に進み、最小単位時間(ティック)が経過したか否かを判断する。
【0023】
最小単位時間が経過していなければ、判断結果は「NO」になり、本処理を終えるが、最小単位時間が経過していると、上記ステップSB2の判断結果が「YES」になり、ステップSB3に進み、タイマカウンタTをインクリメントして歩進させる。なお、このタイマカウンタTは、後述するように、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」にセットされた時点、つまり動作開始時点からの経過時間を計時する。以下、タイマカウンタTの値を経過時間Tと称す。
【0024】
続いて、ステップSB4では、経過時間Tがn×BEATに一致したか否かを判断する。ここで、ポインタnは、後述するように、ユーザのリズム動作を検出するセンサ部14が所定レベル以上のセンサ出力(検出データ)を発生する毎にインクリメントされて歩進される正数である。また、レジスタBEATには、後述するテンポ設定処理(図5参照)において、設定テンポ値で定まる1拍分のクロック数(ティック数)がストアされる。
【0025】
したがって、経過時間Tが設定テンポ値TEMPOに対応した拍タイミングになると、判断結果は「YES」となり、ステップSB5に進み、報知部15にテンポ報知音の発生を指示して本処理を終える。一方、経過時間Tが設定テンポ値TEMPOに対応した拍タイミングに一致しなければ、上記ステップSB5の判断結果は「NO」になり、テンポ報知音を発生させずに本処理を終える。
【0026】
このように、報知処理では、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」となり、動作開始が指示され、最小単位時間(ティック)が経過すると、タイマカウンタTにより計時される経過時間Tを歩進させ、歩進させた経過時間Tがn×BEATに一致すると、テンポ報知音を発生させる。
【0027】
(3)テンポ設定処理の動作
次に、図5を参照してテンポ設定処理の動作を説明する。前述したメインルーチンのステップSA2(図3参照)を介して本処理が実行されると、CPU10は図5に図示するステップSC1に進み、設定スッチの操作の有無を判断する。設定スイッチが操作されなければ、判断結果は「NO」になり、本処理を終えるが、設定スイッチが操作されると、上記ステップSC1の判断結果が「YES」となり、ステップSC2に進む。ステップSC2では、設定スイッチ操作に応じて設定されるテンポ値をレジスタTEMPOにストアし、続くステップSC3では、レジスタTEMPOにストアされた設定テンポ値で定まる1拍分のクロック数(ティック数)をレジスタBEATにストアして本処理を終える。
【0028】
(4)スタート/ストップスイッチ処理Aの動作
次に、図6を参照してスタート/ストップスイッチ処理Aの動作を説明する。前述したメインルーチンのステップSA4(図3参照)を介して本処理が実行されると、CPU10は図6に図示するステップSD1に進み、スタート/ストップスイッチがオン操作されたか否かを判断する。スタート/ストップスイッチがオン操作されなければ、判断結果は「NO」になり、本処理を終える。
【0029】
一方、スタート/ストップスイッチがオン操作されると、上記ステップSD1の判断結果が「YES」になり、ステップSD2に進み、スタートフラグSTFを反転する。そして、ステップSD3では、反転されたスタートフラグSTFが「1」であるか否かを判断する。以下、スタートフラグSTFが「1」の場合の動作と、スタートフラグSTFが「0」の場合の動作とに分けて説明を進める。
【0030】
<スタートフラグSTFが「1」の場合>
反転されたスタートフラグSTFが「1」となり、モードスイッチ操作で選択されたテンポ調整モードの動作開始が指示されると、上記ステップSD3の判断結果は「YES」となり、ステップSD4に進む。ステップSD4では、経過時間T(タイマカウンタTの値)をゼロリセットし、続くステップSD5では、経過時間Tを一時記憶する複数のタイミング配列T( )を全てクリアする。そして、ステップSD6では、タイミング配列T( )中の配列番号を指定するポインタnを初期値「1」をストアする。この後、ステップSD7に進み、レジスタTMAX、TMINをそれぞれゼロリセットして本処理を終える。
【0031】
なお、レジスタTMAX、TMINが意図するところについては追って述べる。また、上記ステップSD4〜SD7において、テンポ調整モードの動作開始に伴った初期化が完了すると、一旦、スタート/ストップスイッチ処理Aの動作を終えて、図7のマージン設定処理を実行する。マージン設定処理では、後述するように、スタートフラグSTFが「1」となり、テンポ調整モードの動作が開始されている状態において、前述した報知処理(図4参照)により発生されるテンポ報知音に合わせるように行われるユーザのリズム動作を検出する毎に、検出時点における経過時間Tをポインタnで指定されるタイミング配列T(n)に順次ストアする。
【0032】
<スタートフラグSTFが「0」の場合>
さて、こうしたマージン設定処理が実行されている状態において、スタート/ストップスイッチのオン操作に応じて反転されたスタートフラグSTFが「0」となり、テンポ調整モードの動作停止が指示されたとする。そうすると、上記ステップSD3の判断結果は「NO」となり、ステップSD8に進む。ステップSD8では、タイマインタラプトを禁止して報知処理(図4参照)の動作を停止させ、これにより経過時間Tを計時するタイマカウンタTを一時停止させる。
【0033】
次いで、ステップSD9では、マージン設定処理によってタイミング配列T(1)〜T(n)に格納された各経過時間Tを読み出す為のポインタmを初期値「1」にセットする。続いて、ステップSD10では、ポインタmの値とレジスタBEATに格納されるクロック数(ティック数)との乗算値m×BEAT(拍タイミング)からポインタmで指定されるタイミング配列T(m)の差分、すなわちテンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング(拍タイミング)とリズム動作が行われたタイミングとの時間差ΔTを算出する。
【0034】
続いて、ステップSD11では、算出された時間差ΔTがレジスタTMAXの値を超えているか否かを判断する。以下、レジスタTMAXの値を時間差上限TMAXと称す。時間差ΔTが時間差上限TMAXを超えていれば、判断結果は「YES」になり、ステップSD12に進み、時間差ΔTを新たな時間差上限TMAXとして更新した後、ステップSD15に進む。
【0035】
一方、時間差ΔTが時間差上限TMAXより小さければ、上記ステップSD11の判断結果は「NO」になり、ステップSD13に進む。ステップSD13では、算出された時間差ΔTがレジスタTMINの値より小さいか否かを判断する。以下、レジスタTMINの値を時間差下限TMINと称す。時間差ΔTが時間差下限TMINより小さければ、判断結果は「YES」になり、ステップSD14に進み、時間差ΔTを新たな時間差下限TMINとして更新した後、ステップSD15に進む。
【0036】
これに対し、時間差ΔTが時間差下限TMINより大きいと、上記ステップSD13の判断結果は「NO」になり、ステップSD15に進む。そして、ステップSD15では、ポインタmをインクリメントして歩進させ、続くステップSD16では、歩進されたポインタmがポインタnを超えたか、つまりマージン設定処理で取得したタイミング配列T(1)〜T(n)の全てについて読み出し終えたかどうかを判断する。全てのタイミング配列T(1)〜(n)を読み出し終えていなければ、ここでの判断結果は「NO」になり、上述のステップSD10に処理を戻す。
【0037】
以後、全てのタイミング配列T(1)〜T(n)について読み出し終える迄、上述したステップSD10〜SD16を繰り返す。これにより、各拍タイミングにおける時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINが得られる。そして、全てのタイミング配列T(1)〜T(n)について読み出し終えると、上記ステップSD16の判断結果が「YES」になり、本処理を終える。
【0038】
このように、スタート/ストップスイッチ処理Aでは、スタートフラグSTFが「1」となり、テンポ調整モードの動作開始が指示されると、経過時間T(タイマカウンタTの値)をゼロリセットすると共に、タイミング配列T( )を全てクリアし、さらにタイミング配列T( )中の配列番号を指定するポインタnを初期値「1」をストアした後、時間差上限TMAXおよび時間差下限TMINをそれぞれゼロリセットする。
【0039】
一方、スタートフラグSTFが「0」となり、テンポ調整モードの動作停止が指示されると、テンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング(拍タイミング)とリズム動作が行われたタイミングとの時間差ΔTを算出する。そして、図8に図示する一例のように、各拍タイミングT0,T1,…における時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINを取得する。
【0040】
(5)マージン設定処理の動作
次に、図7を参照してマージン設定処理の動作を説明する。前述したメインルーチンのステップSA5(図3参照)を介して本処理が実行されると、CPU10は図7に図示するステップSE1に進み、スタートフラグSTFが「1」であるか否か、すなわちテンポ調整モードの動作が開始されているかどうかを判断する。スタートフラグSTFが「0」(テンポ調整モードの動作が停止中)であれば、判断結果は「NO」になり、本処理を完了させるが、テンポ調整モードの動作が開始されていると、判断結果は「YES」になり、ステップSE2に進む。
【0041】
ステップSE2では、センサ部14が所定レベル以上のセンサ出力(検出データ)を発生したか否か、換言すれば、ユーザのリズム動作を検出したかどうかを判断する。なお、ここで言うユーザのリズム動作とは、前述した報知処理(図4参照)により発生されるテンポ報知音に従ってリズムを取る動作を指す。こうしたユーザのリズム動作が検出されない場合、つまりセンサ部14から出力されるセンサ出力(検出データ)が所定レベル未満であると、上記ステップSE2の判断結果は「NO」となり、本処理を終える。
【0042】
一方、ユーザのリズム動作が検出された場合、すなわちセンサ部14から出力されるセンサ出力(検出データ)が所定レベル以上であると、上記ステップSE2の判断結果は「YES」になり、ステップSE3に進む。ステップSE3では、ポインタnで指定されるタイミング配列T(n)に経過時間Tをストアする。なお、スタート/ストップスイッチのオン操作に応じてスタートフラグSTFが「1」となった直後では、ポインタnには初期値「1」がセットされるので、タイミング配列T(1)に最初の経過時間Tがストアされる。そして、ステップSE4に進むと、ポインタnをインクリメントして歩進させた後、本処理を終える。
【0043】
以上のように、マージン設定処理では、スタートフラグSTFが「1」となり、テンポ調整モードの動作が開始されている状態において、前述した報知処理(図4参照)により発生されるテンポ報知音に従ったユーザのリズム動作を検出する毎に、検出時点における経過時間Tをポインタnで指定されるタイミング配列T(n)に順次ストアするようになっている。
【0044】
(6)スタート/ストップスイッチ処理Bの動作
次に、図9を参照してスタート/ストップスイッチ処理Bの動作を説明する。前述したメインルーチンのステップSA8(図3参照)を介して本処理が実行されると、CPU10は図9に図示するステップSF1に進み、スタート/ストップスイッチがオン操作されたか否かを判断する。スタート/ストップスイッチがオン操作されなければ、判断結果は「NO」になり、本処理を終えるが、オン操作された場合には判断結果が「YES」になり、ステップSF2に進み、スタートフラグSTFを反転する。続いて、ステップSF3では、反転されたスタートフラグSTFが「1」であるか否かを判断する。以下、スタートフラグSTFが「1」の場合の動作と、スタートフラグSTFが「0」の場合の動作とに分けて説明を進める。
【0045】
<スタートフラグSTFが「1」の場合>
反転されたスタートフラグSTFが「1」となり、モードスイッチ操作で選択されたテンポ変更モードの動作開始が指示されると、上記ステップSF3の判断結果は「YES」となり、ステップSF4に進む。ステップSF4〜SF8では、後述するテンポ変更処理(図10図11参照)で用いられるタイマカウンタ、フラグおよびレジスタを初期化する。すなわち、ステップSF4では、経過時間T(タイマカウンタTの値)および経過時間T0(タイマカウンタT0の値)をゼロリセットし、続くステップSF5では、ポインタnに初期値「1」をセットすると共に、オンフラグONFを「1」にセットする。
【0046】
ステップSF6では、レジスタTOLD、TNEW1、TNEW2をクリアし、ステップSF7では、タイミングフラグTF1、TF2をクリアする。そして、ステップSF8では、タイマインタラプトの禁止を解除して報知処理(図4参照)を起動させ、これにより経過時間Tを計時するタイマカウンタTをスタートさせて本処理を終える。
【0047】
<スタートフラグSTFが「0」の場合>
反転されたスタートフラグSTFが「0」となり、モードスイッチ操作で選択されたテンポ変更モードの動作停止が指示されると、上記ステップSF3の判断結果は「NO」となり、ステップSF9に進み、報知部15にテンポ報知音の消音を指示し、続くステップSF10では、タイマインタラプトを禁止して報知処理(図4参照)の動作を停止させ、これにより経過時間Tを計時するタイマカウンタTを一時停止させて本処理を終える。
【0048】
このように、スタート/ストップスイッチ処理Bでは、スタートフラグSTFが「1」となり、テンポ変更モードの動作開始が指示されると、経過時間T(タイマカウンタTの値)および経過時間T0(タイマカウンタT0の値)をゼロリセットし、ポインタnに初期値「1」をセットすると共に、オンフラグONFを「1」にセットする。更にレジスタTOLD、TNEW1、TNEW2をクリアし、タイミングフラグTF1、TF2をクリアした後、タイマインタラプトの禁止を解除して経過時間Tを計時するタイマカウンタTをスタートさせる。一方、スタートフラグSTFが「0」となり、テンポ変更モードの動作停止が指示されると、報知部15にテンポ報知音の消音を指示すると共に、タイマインタラプトを禁止して経過時間Tを計時するタイマカウンタTを一時停止させる。
【0049】
(7)テンポ変更処理の動作
次に、図10図11を参照してテンポ変更処理の動作を説明する。前述したメインルーチンのステップSA9(図3参照)を介して本処理が実行されると、CPU10は図10に図示するステップSG1に進み、スタートフラグSTFが「1」、つまりテンポ変更モードの動作が開始されているか否かを判断する。テンポ変更モードの動作が開始されておらず、スタートフラグSTFが「0」ならば、判断結果は「NO」になり、本処理を終えるが、テンポ変更モードの動作が開始されていると、判断結果は「YES」になり、ステップSG2に進む。
【0050】
ステップSG2では、タイマ停止中であるか否かを判断する。スタートフラグSTFが「1」となり、テンポ変更モードの動作開始が指示された直後ではタイマ起動中なので、判断結果は「NO」になり、ステップSG3に進み、最小単位時間(ティック)が経過したか否かを判断する。最小単位時間が経過していなければ、判断結果は「NO」になり、後述のステップSG12に進むが、最小単位時間が経過すると、、判断結果は「YES」になり、ステップSG4に進み、経過時間T0をインクリメントして歩進させる。なお、経過時間T0はユーザのリズム動作を検出していない時間を表す。
【0051】
次いで、ステップSG5では、経過時間T0が2拍(2×BEAT)以下であるか否か、つまりユーザのリズム動作を検出していない時間が2拍以下であるかどうかを判断する。ユーザのリズム動作を検出していない時間が2拍を超えていれば、判断結果は「NO」になり、ステップSG6に進み、タイマインタラプトを禁止して報知処理(図4参照)の動作を停止させ、これにより経過時間Tを計時するタイマカウンタTを一時停止させる。そして、ステップSG7〜SG8では、レジスタTOLD、TNEW1およびTNEW2をクリアすると共に、フラグTF1、TF2をクリアして本処理を終える。
【0052】
これに対し、ユーザのリズム動作を検出していない時間が2拍以下ならば、上記ステップSG5の判断結果は「YES」になり、ステップSG9に進み、経過時間Tがn×BEATに一致したか否か、つまり設定テンポ値TEMPOに対応したテンポ報知タイミング(拍タイミング)であるかどうかを判断する。テンポ報知タイミングでなければ、判断結果は「NO」になり、後述のステップSG12に進むが、テンポ報知タイミングならば、判断結果は「YES」になり、ステップSG10に進む。
【0053】
ステップSG10では、オンフラグONFが「1」であるか否かを判断する。オンフラグONFは、テンポ変更される場合に「0」、テンポ変更済みの場合に「1」となるフラグである。したがって、ここではテンポ変更済みである否かを判断する。テンポ変更済み(オンフラグONFが「1」)ならば、判断結果は「YES」になり、ステップSG11に進み、テンポ報知音の発生を報知部15に指示する。これによりテン報知音が発音される。
【0054】
一方、テンポ変更(オンフラグONFが「0」)であると、上記ステップSG10の判断結果は「NO」になり、ステップSG12に進む。ステップSG12では、センサ部14が所定レベル以上のセンサ出力(検出データ)を発生したか否か、すなわち、ユーザのリズム動作を検出したかどうかを判断する。ユーザのリズム動作が検出されなければ、判断結果は「NO」になり、本処理を終えるが、ユーザのリズム動作を検出すると、上記ステップSG12の判断結果が「YES」になり、ステップSG13に進む。
【0055】
ステップSG13〜SG15では、経過時間TをレジスタTNEW2に、レジスタTNEW2の値をレジスタTNEW1に、レジスタTNEW1の値をレジスタTOLDにそれぞれストアし直す。つまり、レジスタTNEW2には現リズム動作のタイミング(経過時間T)が、レジスタTNEW1にはその一つ前のリズム動作のタイミングが、レジスタTOLDにはさらに一つ前のリズム動作のタイミングがそれぞれストアされることになる。
【0056】
次いで、ステップSG16では、ユーザのリズム動作を検出したのに対応して経過時間T0をゼロリセットする。続いて、ステップSG17では、タイマ停止中であるか否かを判断する。タイマ停止中でなければ、判断結果は「NO」になり、図11に図示するステップSG19に進む。タイマ停止中ならば、上記ステップSG17の判断結果は「YES」になり、ステップSG18に進み、タイマインタラプトの禁止を解除して報知処理(図4参照)を起動させ、これにより経過時間Tを計時するタイマカウンタTをスタートさせた後、図11に図示するステップSG19に進む。
【0057】
ステップSG19では、ポインタnの値とレジスタBEATに格納されるクロック数(ティック数)との乗算値n×BEAT(拍タイミング)から経過時間Tの差分、すなわちテンポ報知音に合わせてユーザがリズム動作を行っている際に生じる、テンポ報知タイミング(拍タイミング)とリズム動作が行われたタイミングとの時間差ΔTを算出する。
【0058】
次いで、ステップSG20では、算出された時間差ΔTが時間差下限TMIN以上、時間差上限TMAX以下であるか否か、つまりテンポ報知音に合わせて行われたユーザのリズム動作のタイミングが許容範囲(時間差下限TMIN以上、時間差上限TMAX以下)に収まっているかどうかを判断する。許容範囲内ならば、判断結果は「YES」となり、ステップSG21に進み、ポインタnの値をインクリメントして歩進させて本処理を終える。したがって、この場合にはテンポ変更は行われない。
【0059】
一方、テンポ報知音に合わせて行われたユーザのリズム動作のタイミングが許容範囲(時間差下限TMIN以上、時間差上限TMAX以下)を超えた場合には、上記ステップSG20の判断結果が「NO」になり、ステップSG22に進む。ステップSG22では、オンフラグONFを「0」にセットしてテンポ変更する旨を表す。続いて、ステップSG23〜SG24では、フラグTF2をフラグTF1にセットし、フラグTF2に「1」をセットする。
【0060】
そして、ステップSG25では、フラグTF1,TF2が共に「1」であるか否か、すなわちユーザのリズム動作のタイミングが2回続けて許容範囲を超えたかどうかを判断する。許容範囲を2回続けて超えなければ、判断結果は「NO」になり、本処理を終えるが、許容範囲を2回続けて超えると、判断結果が「YES」になり、ステップSG26に進む。
【0061】
ステップSG26では、レジスタTNEW2に格納される現リズム動作のタイミング(経過時間T)とレジスタTNEW1に格納されるその一つ前のリズム動作のタイミングとの時間差(TNEW2−TNEW1)と、レジスタTNEW1に格納されるその一つ前のリズム動作のタイミングとレジスタTOLDに格納されるさらに一つ前のリズム動作のタイミングとの時間差(TNEW1−TOLD)との相加平均(TNEW2−TNEW1)+(TNEW1−TOLD)/2に基づき算出される周期に基づき一拍分のクロック数(ティック数)を算出してレジスタBEATにストアする。
【0062】
次いで、ステップSG27では、レジスタBEATの値に応じたテンポ値をレジスタTEMPOにストアする。こうして、テンポ変更が完了すると、ステップSG28に進み、フラグTF1、TF2を「0」にセットし、続くステップSG29では、テンポ変更済みに対応してオンフラグONFに「1」をセットして本処理を終える。
【0063】
次に、図12を参照して上述したテンポ変更処理の動作について具体的に説明する。時刻t0のテンポ報知タイミングに対するユーザのリズム動作が、許容範囲t0margin(上述した時間差下限TMIN以上、時間差上限TMAX以下の範囲)に収まるタイミングt0oldで為されると、時刻t1にテンポ報知音が発生する。そして、時刻t1のテンポ報知タイミングに対し、ユーザのリズム動作のタイミングが許容範囲t1marginを逸脱した時刻t1newで行われたとする。
【0064】
そうすると、テンポ変更するものと見なし、時刻t2でのテンポ報知を行わないようにする。その後、時刻t2newにおいてユーザのリズム動作が為されると、(t2new−t1new)+(t1new−t0old)/2に基づき算出される新たなテンポ周期を確定し、確定した新たなテンポ周期に基づき時刻t3からテンポ報知動作を再開する。このように、ユーザのリズム動作のタイミングを異ならせてテンポ報知のタイミングを変化させるので、ユーザが意図したリズム変化に対応してテンポを変更することが可能になる。
【0065】
また、上述したテンポ変更処理では、ユーザのリズム動作を検出していない時間が2拍を超えると、タイマインタラプトを禁止して報知処理(図4参照)の動作を停止させ、その後に再び許容範囲(時間差下限TMIN以上、時間差上限TMAX以下)に収まるタイミングでユーザのリズム動作を検出すると、テンポ設定処理(図5参照)にて設定された元のテンポに対応してテンポ報知を再開することも出来る。
【0066】
以上説明したように、本実施形態では、テンポ報知タイミングとユーザのリズム動作が行われたタイミングとの時間差ΔTを算出し、算出された各拍タイミングにおける時間差ΔTの揺らぎに基づき時間差上限TMAXおよび時間差下限TMINを取得する。そして、テンポ報知タイミングに対し、ユーザのリズム動作が許容範囲(時間差下限TMIN以上、時間差上限TMAX以下)を逸脱したタイミングで行われると、テンポ変更と判断し、許容範囲を逸脱する前に検出された第1の動作タイミングt0oldと、許容範囲を逸脱した時に検出された第2の動作タイミングt1newと、許容範囲を逸脱した後に検出された第3の動作タイミングt2newとを用い、(t2new−t1new)+(t1new−t0old)/2から算出される新たなテンポ周期に基づきテンポ報知を再開するので、ユーザが意図したリズム変化に対応してテンポを変更することが出来る。
【0067】
また、ユーザのリズム動作を検出していない時間が2拍を超えると、タイマインタラプトを禁止して報知処理(図4参照)の動作を停止させ、その後に再び許容範囲(時間差下限TMIN以上、時間差上限TMAX以下)に収まるタイミングでユーザのリズム動作を検出すると、テンポ設定処理(図5参照)にて設定された元のテンポに対応してテンポ報知を再開するので、ユーザが意図したリズム変化に対応してテンポを変更することが出来る。
【0068】
以上、本発明の実施の一形態について説明したが、本発明はそれに限定されるものではなく、本願出願の特許請求の範囲に記載された発明とその均等の範囲に含まれる。以下では、本願出願当初の特許請求の範囲に記載された各発明について付記する。
【0069】
(付記)
[請求項1]
指定されたテンポ周期でテンポ報知するテンポ報知手段と、
前記テンポ報知手段によるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出手段と、
前記テンポ報知手段がテンポ報知するテンポ報知タイミングと前記検出手段により検出される動作タイミングとの時間差ΔTの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得手段と、
前記検出手段により検出される動作タイミングが、前記許容範囲取得手段により取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第1の動作タイミングと、許容範囲を逸脱した時に検出された第2の動作タイミングと、許容範囲を逸脱した後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知手段に指示するテンポ変更手段と
を具備することを特徴とするメトロノーム装置。
【0070】
[請求項2]
前記検出手段がユーザの動作タイミングを一定時間検出しない場合に、前記テンポ報知手段の動作を停止させる停止手段と、
前記停止手段により前記テンポ報知手段の動作を停止させた後に、再び前記検出手段が許容範囲に収まる動作タイミングを検出した場合に、前記テンポ報知手段の動作を再開させる再開手段と
を更に具備することを特徴とする請求項1記載のメトロノーム装置。
【0071】
[請求項3]
前記テンポ変更手段は、第3の動作タイミングと第2の動作タイミングとの時間差分と、第2の動作タイミングと第1の動作タイミングとの時間差分とを相加平均して新たなテンポ周期を算出するテンポ周期算出手段を備えることを特徴とする請求項1記載のメトロノーム装置。
【0072】
[請求項4]
コンピュータに、
指定されたテンポ周期でテンポ報知するテンポ報知ステップと、
前記テンポ報知ステップによるテンポ報知に合わせてリズムを取るユーザの動作タイミングを検出する検出ステップと、
前記テンポ報知ステップがテンポ報知するテンポ報知タイミングと前記検出ステップにより検出される動作タイミングとの時間差ΔTの揺らぎの最大値と最小値とで定まる許容範囲を取得する許容範囲取得ステップと、
前記検出ステップにより検出される動作タイミングが、前記許容範囲取得ステップにより取得された許容範囲を逸脱した場合に、少なくとも許容範囲を逸脱する前に検出された第1の動作タイミングと、許容範囲を逸脱した時に検出された第2の動作タイミングと、許容範囲を逸脱した後に検出された第3の動作タイミングとに応じて算出される新たなテンポ周期を前記テンポ報知ステップに指示するテンポ変更ステップと
を実行させることを特徴とするプログラム。
【符号の説明】
【0073】
10 CPU
11 ROM
12 RAM
13 操作部
14 センサ部
15 報知部
100 メトロノーム装置
図1
図2
図3
図4
図5
図6
図7
図8
図9
図10
図11
図12