(57)【要約】【課題】演奏上の揺れを表現する小さなテンポ変動を排除でき、しかも曲調の再現性を損ねることなく再生テンポを調整できる自動演奏装置を実現する。【解決手段】曲の再生テンポを指定するテンポコマンドＭＥＴＡ＿ＴＥＭＰＯと、曲中で局所的な演奏上の揺れを表現する小さなテンポ変動を設定するメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯとをＭＩＤＩデータ中のメタイベントで定義しておき、自動演奏の開始前に予めＵＳＥＲテンポ調整値を設定した状態で自動演奏を開始させた場合にのみ、メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯを無効化する一方、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯで指定される再生テンポを、設定されたＵＳＥＲテンポ調整値に応じて更新する。【選択図】図７
2008197407.tif 000002
【特許請求の範囲】
【請求項１】
曲を構成する各音を表すと共に、再生テンポを指定する第１のテンポコマンドおよびテンポ変更を指示する第２のテンポコマンドを含む演奏データを記憶する演奏データ記憶手段と、
テンポ調整値を設定するテンポ調整手段と、
前記演奏データ記憶手段から読み出す演奏データに応じて自動演奏する自動演奏手段と、
前記テンポ調整手段によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏手段に指示する一方、前記テンポ調整手段により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏手段に指示するテンポ変更指示手段と
を具備することを特徴とする自動演奏装置。
【請求項２】
曲を構成する各音を表すと共に、再生テンポを指定するテンポコマンドを含む演奏データを記憶する演奏データ記憶手段と、
前記演奏データ記憶手段に記憶される一定区間毎の演奏データの中からそれぞれ区間占有期間が最も長いテンポコマンドを検出すると共に、検出されたテンポコマンドを当該区間の代表的な再生テンポを指定する第１のテンポコマンドに設定し、当該区間中に存在する第１のテンポコマンド以外のテンポコマンドを、テンポ変更を指示する第２のテンポコマンドに差し換えるコマンド差換手段と、
テンポ調整値を設定するテンポ調整手段と、
前記コマンド差換手段によりテンポコマンドが第１又は第２のテンポコマンドに差し換えられた演奏データを、前記演奏データ記憶手段から読み出して自動演奏する自動演奏手段と、
前記テンポ調整手段によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏手段に指示する一方、前記テンポ調整手段により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏手段に指示するテンポ変更指示手段と
を具備することを特徴とする自動演奏装置。
【請求項３】
前記第２のテンポコマンドは、演奏データ中のメタイベントを用いて演奏上の揺れを表現する小さなテンポ変動を設定することを特徴とする請求項１又は２のいずれかに記載の自動演奏装置。
【請求項４】
前記コマンド差換手段は、差換対象の現区間の第１のテンポコマンドで指定されるテンポ値と、前区間の第１のテンポコマンドで指定されるテンポ値との差分が所定値以内の場合に、前区間の第１のテンポコマンドを現区間の第１のテンポコマンドに置き換える置換手段を
更に具備することを特徴とする請求項２記載の自動演奏装置。
【請求項５】
テンポ調整値を設定するテンポ調整処理と、
曲を構成する各音を表すと共に、再生テンポを指定する第１のテンポコマンドおよびテンポ変更を指示する第２のテンポコマンドを含む演奏データに応じて自動演奏する自動演奏処理と、
前記テンポ調整処理によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏処理に指示する一方、前記テンポ調整処理により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏処理に指示するテンポ変更指示処理と
をコンピュータで実行させることを特徴とする自動演奏処理プログラム。
【請求項６】
曲を構成する各音を表すと共に、再生テンポを指定するテンポコマンドを含む一定区間毎の演奏データの中からそれぞれ区間占有期間が最も長いテンポコマンドを検出すると共に、検出されたテンポコマンドを当該区間の代表的な再生テンポを指定する第１のテンポコマンドに設定し、当該区間中に存在する第１のテンポコマンド以外のテンポコマンドを、テンポ変更を指示する第２のテンポコマンドに差し換えるコマンド差換処理と、
テンポ調整値を設定するテンポ調整処理と、
前記コマンド差換処理によりテンポコマンドが第１又は第２のテンポコマンドに差し換えられた演奏データに応じて自動演奏する自動演奏処理と、
前記テンポ調整処理によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏処理に指示する一方、前記テンポ調整処理により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏処理に指示するテンポ変更指示処理と
をコンピュータで実行させることを特徴とする自動演奏処理プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、電子楽器に用いて好適な自動演奏装置および自動演奏処理プログラムに関する。
【背景技術】
【０００２】
周知のように、シーケンサ等の自動演奏装置では、演奏すべき各音の音高、音量および発音／消音タイミングを表すデータ、発生すべき楽音の音色を指定するデータおよび再生テンポを指定するテンポデータ等を含むＳＭＦ形式の演奏データ（ＭＩＤＩデータ）に基づき、指定された音色の波形データから生成される指定音高／音量の楽音を、指定テンポで再生する自動演奏が行われる。
【０００３】
こうした自動演奏において、再生テンポを調整するには、例えば特許文献１に開示の技術のように、ユーザのテンポ変更操作で生じるユーザテンポ設定値を、ＭＩＤＩデータ中で定義されるテンポデータの値に乗算して再生テンポを変更する他、ユーザテンポ設定値をテンポデータの値に加算したり、ユーザテンポ設定値をテンポデータに置き換える態様が知られている。
【０００４】
【特許文献１】特開平８−３０２７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００５】
上述した従来の再生テンポ調整に生じる課題について、図１３〜図１５を参照して説明する。先ず図１３は、ＭＩＤＩデータで定義されるテンポ値の経時変化を図示するグラフであり、当該グラフの縦軸はテンポ値、横軸は小節数で表す経過時間である。このグラフに図示する一例は、第１小節から第４小節までの各小節内において演奏上の揺れを表現する小さなテンポ変動と、曲調変化に伴う第３小節目の急激なテンポ変動とを表現している。
【０００６】
さて、ＭＩＤＩデータ中で定義されるテンポ値が、図１３に図示した一例のように経時変化する場合に、ユーザのテンポ変更操作で生じるユーザテンポ設定値（−５０％）をテンポ値に乗算すると、図１４に図示する通り、演奏上の揺れを表現する小さなテンポ変動もそのまま同じ比率で再現されてしまう。自動演奏される曲の鑑賞を目的としていれば、この小さなテンポ変動は、所謂演奏上の「ノリ」として解釈される為、特段支障は生じない。
【０００７】
しかしながら、演奏練習する目的でユーザがテンポ調整する場合であれば、意図しない演奏上の揺らぎとなってしまい、とりわけ遅めでかつ一定なテンポで曲を自動演奏させながら演奏練習したいビギナーユーザにとっては好ましくないテンポ変動となる。
【０００８】
一方、ユーザのテンポ変更操作で生じるユーザテンポ設定値をそのままテンポ値に置き換える態様であると、図１５に図示する通り、一定のテンポ値に固定される為、曲調変化に伴うテンポ変動が失われ、曲調の再現性を損ねるという弊害が生じる。結局、以上の内容を換言すると、従来のテンポ調整では、演奏上の揺れを表現する小さなテンポ変動を排除することができず、しかも曲調の再現性を損ねてしまう、という問題がある。
【０００９】
本発明は、このような事情に鑑みてなされたもので、演奏上の揺れを表現する小さなテンポ変動を排除でき、しかも曲調の再現性を損ねることなく再生テンポを調整することができる自動演奏装置および自動演奏処理プログラムを提供することを目的としている。
【課題を解決するための手段】
【００１０】
上記目的を達成するため、請求項１に記載の発明では、曲を構成する各音を表すと共に、再生テンポを指定する第１のテンポコマンドおよびテンポ変更を指示する第２のテンポコマンドを含む演奏データを記憶する演奏データ記憶手段と、テンポ調整値を設定するテンポ調整手段と、前記演奏データ記憶手段から読み出す演奏データに応じて自動演奏する自動演奏手段と、前記テンポ調整手段によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏手段に指示する一方、前記テンポ調整手段により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏手段に指示するテンポ変更指示手段とを具備することを特徴とする。
【００１１】
請求項２に記載の発明では、曲を構成する各音を表すと共に、再生テンポを指定するテンポコマンドを含む演奏データを記憶する演奏データ記憶手段と、前記演奏データ記憶手段に記憶される一定区間毎の演奏データの中からそれぞれ区間占有期間が最も長いテンポコマンドを検出すると共に、検出されたテンポコマンドを当該区間の代表的な再生テンポを指定する第１のテンポコマンドに設定し、当該区間中に存在する第１のテンポコマンド以外のテンポコマンドを、テンポ変更を指示する第２のテンポコマンドに差し換えるコマンド差換手段と、テンポ調整値を設定するテンポ調整手段と、前記コマンド差換手段によりテンポコマンドが第１又は第２のテンポコマンドに差し換えられた演奏データを、前記演奏データ記憶手段から読み出して自動演奏する自動演奏手段と、前記テンポ調整手段によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏手段に指示する一方、前記テンポ調整手段により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏手段に指示するテンポ変更指示手段とを具備することを特徴とする。
【００１２】
上記請求項１又は２のいずれかに従属する請求項３に記載の発明では、前記第２のテンポコマンドは、演奏データ中のメタイベントを用いて演奏上の揺れを表現する小さなテンポ変動を設定することを特徴とする。
【００１３】
上記請求項２に従属する請求項４に記載の発明では、前記コマンド差換手段は、差換対象の現区間の第１のテンポコマンドで指定されるテンポ値と、前区間の第１のテンポコマンドで指定されるテンポ値との差分が所定値以内の場合に、前区間の第１のテンポコマンドを現区間の第１のテンポコマンドに置き換える置換手段を更に具備することを特徴とする。
【００１４】
請求項５に記載の発明では、テンポ調整値を設定するテンポ調整処理と、曲を構成する各音を表すと共に、再生テンポを指定する第１のテンポコマンドおよびテンポ変更を指示する第２のテンポコマンドを含む演奏データに応じて自動演奏する自動演奏処理と、前記テンポ調整処理によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏処理に指示する一方、前記テンポ調整処理により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏処理に指示するテンポ変更指示処理とを特徴とする。
【００１５】
請求項６に記載の発明では、曲を構成する各音を表すと共に、再生テンポを指定するテンポコマンドを含む一定区間毎の演奏データの中からそれぞれ区間占有期間が最も長いテンポコマンドを検出すると共に、検出されたテンポコマンドを当該区間の代表的な再生テンポを指定する第１のテンポコマンドに設定し、当該区間中に存在する第１のテンポコマンド以外のテンポコマンドを、テンポ変更を指示する第２のテンポコマンドに差し換えるコマンド差換処理と、テンポ調整値を設定するテンポ調整処理と、前記コマンド差換処理によりテンポコマンドが第１又は第２のテンポコマンドに差し換えられた演奏データに応じて自動演奏する自動演奏処理と、前記テンポ調整処理によりテンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示の無効を前記自動演奏処理に指示する一方、前記テンポ調整処理により設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するよう前記自動演奏処理に指示するテンポ変更指示処理とを特徴とする。
【発明の効果】
【００１６】
本発明では、再生テンポを指定する第１のテンポコマンドおよびテンポ変更を指示する第２のテンポコマンドを演奏データに設けておき、テンポ調整値が設定された状態で自動演奏を開始させた場合にのみ、第２のテンポコマンドによるテンポ変更指示を無効にする一方、設定されたテンポ調整値に応じて第１のテンポコマンドで指定される再生テンポを変更するので、演奏上の揺れを表現する小さなテンポ変動を排除でき、しかも曲調の再現性を損ねることなく再生テンポを調整することができる。
【発明を実施するための最良の形態】
【００１７】
以下、図面を参照して本発明の実施の形態について説明する。
［第１実施形態］  
Ａ．構成  
図１は本発明の第１実施形態による自動演奏装置の構成を示すブロック図である。この図において、ＣＰＵ１は、操作部４（後述する）から供給されるスイッチイベントに応じて装置各部の動作を制御したり、ＲＡＭ３から読み出す演奏データ（ＭＩＤＩデータ）に基づき音源７を制御して自動演奏を実行する。本発明の要旨に係わるＣＰＵ１の特徴的な処理動作については追って詳述する。
【００１８】
ＲＯＭ２は、プログラムエリアおよびデータエリアを備える。ＲＯＭ２のプログラムエリアには、ＣＰＵ１により実行される各種プログラムが記憶される。各種プログラムとは、後述するメインルーチンおよび再生処理を含む。ＲＯＭ２のデータエリアには、各種曲の演奏データ（ＭＩＤＩデータ）が記憶される。ここで、図２を参照してＲＯＭ２のデータエリアに記憶されるＭＩＤＩデータの構成について説明する。この図に示すＭＩＤＩデータは、所謂マルチトラック対応のＳＭＦフォーマットと呼ばれ、１つのヘッダＨＤと複数の演奏トラック［１］〜［Ｎ］とから構成される。
【００１９】
ＭＩＤＩデータ中のヘッダＨＤ（ヘッダチャンク）は、当該ヘッダＨＤ以降のデータ属性（フォーマット種別、演奏トラックの数、時間単位）を表す。演奏トラック［１］〜［Ｎ］は、それぞれ曲の各演奏パートに対応する。１つの演奏トラックは、デルタタイムΔＴおよびイベントＥＶから構成されるＳＭＦコマンドが曲進行順にアドレッシングされる。デルタタイムΔＴは、前イベントからの経過時間（ｓｔｅｐ値）で次イベントタイミングを表す。イベントＥＶは、公知のＭＩＤＩイベント、システムエクスクルーシブイベントおよびメタイベントのいずかで形成される。
【００２０】
周知のように、自動演奏の再生テンポは、メタイベントで定義される。具体的には、メタイベントが［ＦＦｈ，５１ｈ，０３ｈ，ｔｅｍｐｏ（３バイト長）］のコマンド列から形成される場合にテンポ値ｔｅｍｐｏが設定される。なお、上記コマンド列において、「ＦＦｈ」（ｈは１６進表示を表す）がメタコマンドを表し、「５１ｈ」がテンポコマンドＭＥＴＡ＿ＴＥＭＰＯ（メタサブコマンド）を表す。「０３ｈ」がテンポ値ｔｅｍｐｏのデータサイズを表す。テンポ値ｔｅｍｐｏは、４分音符長をマイクロ秒で表現した値となる。
【００２１】
本実施の形態では、上記「５１ｈ」のテンポコマンドＭＥＴＡ＿ＴＥＭＰＯによって自動演奏時の基本的な再生テンポを設定し、演奏上の揺れを表現する小さなテンポ変動を設定するメタイベントとして、例えば「５３ｈ」などメタイベントで未使用な数値をメタサブコマンドに用いた「メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯ」を新たに設けたことを特徴としている。この「メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯ」が意図するところについては追って説明する。
【００２２】
次に、再び図１を参照して構成の説明を進める。ＲＡＭ３は、ワークエリアおよびデータエリアを備える。ＲＡＭ３のワークエリアには、ＣＰＵ１の処理に用いる各種レジスタ・フラグデータが一時記憶される。ＲＡＭ３のデータエリアには、ＲＯＭ２から読み出されるＭＩＤＩデータが格納される。すなわち、後述する曲選択スイッチＳＥＬの操作で選択される曲のＭＩＤＩデータがＣＰＵ１の制御の下にＲＯＭ２から読み出されてＲＡＭ３のデータエリアにストアされるようになっている。
【００２３】
操作部４は、図示されていないコンソールパネル上に配設される各種操作スイッチから構成され、各スイッチ操作に対応したスイッチイベントを発生する。このスイッチイベントはＣＰＵ１のキースキャンにより取込まれる。操作部４に配設されるスイッチ種類としては、パワーオンオフする電源スイッチの他、例えば図３に図示する一例のように、自動演奏する曲を選択する曲選択スイッチＳＥＬ、再生テンポを変更指示するＵＳＥＲテンポスイッチＴＭＰ、自動演奏の停止を指示するストップスイッチＳＴＯＰおよび自動演奏の開始を指示するスタートスイッチＳＴＡＲＴがある。
【００２４】
なお、ＵＳＥＲテンポスイッチＴＭＰは、再生テンポをアップ／ダウンさせるアップスイッチおよびダウンスイッチから構成され、これらスイッチの押下操作に応じて再生テンポを比率制御する。例えば、アップスイッチを押下操作する毎に現在の再生テンポを＋１０％上昇させたり、ダウンスイッチを押下操作する毎に現在の再生テンポを−１０％下降させる。
【００２５】
鍵盤５は、ユーザの押離鍵操作（演奏操作）に応じたキーオン／キーオフ信号および鍵番号、ベロシティ等からなる演奏情報を発生する。表示部６は、ＬＣＤパネル等から構成され、ＣＰＵ１から供給される表示制御信号に応じて設定状態などを表示する。具体的には、図４に図示する一例のように、表示部６には、上述した曲選択スイッチＳＥＬの操作で選択される曲名（ＳＯＮＧ  ＮＡＭＥ）を表示するエリアＥ１、ＵＳＥＲテンポスイッチＴＭＰの操作で設定されるＵＳＥＲテンポ設定値を表示するエリアＥ２、ストップスイッチＳＴＯＰのオン・オフ状態を表す表示マークＭＫ１およびスタートスイッチＳＴＡＲＴのオン・オフ状態を表す表示マークＭＫ２が設けられている。
【００２６】
音源７は、周知の波形メモリ読み出し方式で構成され、同時発音可能な複数の発音チャンネルを備える。音源７では、ＣＰＵ１の制御の下に、ＲＡＭ３のデータエリアから順次読み出されるＭＩＤＩデータに応じた楽音信号や、鍵盤５から出力される演奏情報に基づきＣＰＵ１が発生する楽音コマンドに応じた楽音信号を発生する。サウンドシステム８は、音源７から出力される楽音信号をＤ／Ａ変換した後に増幅してスピーカから発音する。
【００２７】
Ｂ．動作  
次に、図５〜図８を参照して第１実施形態の動作について説明する。以下では、最初に全体動作としてメインルーチンの動作を説明した後、本発明の要旨にかかわる再生処理の動作を説明する。
【００２８】
（１）メインルーチンの動作（全体動作）
上記構成による第１実施形態による自動演奏装置に電源が投入されると、ＣＰＵ１はＲＯＭ２から所定の制御プログラムをロードして図５に示すメインルーチンを実行し、ステップＳＡ１に処理を進め、ＲＡＭ３のワークエリアに格納される各種レジスタ／フラグ類をリセットしたり、初期値セットするイニシャライズを行う。次いで、ステップＳＡ２では、操作部４に配設される各種スイッチ操作に応じたスイッチ処理、例えば曲選択スイッチＳＥＬの操作で自動演奏する曲を選択する処理、スタートスイッチＳＴＡＲＴ又はストップスイッチＳＴＯＰの操作に応じて自動演奏の開始／停止を指示する処理、ＵＳＥＲテンポスイッチＴＭＰの操作に応じてＵＳＥＲテンポ調整値を発生する処理等を実行する。
【００２９】
そして、スイッチ処理が完了すると、ＣＰＵ１はステップＳＡ３に処理を進める。ステップＳＡ３では、上記ステップＳＡ２のスイッチ処理において、スタートスイッチＳＴＡＲＴの操作に応じて自動演奏の開始が指示された場合に、ＲＡＭ３のデータエリアに格納されるＭＩＤＩデータの内からデルタタイムΔＴおよびイベントＥＶから構成されるＳＭＦコマンドを順次読み出し、読み出したＳＭＦコマンドを解釈実行して音源７に自動演奏を指示する再生処理を実行する。
【００３０】
次いで、ステップＳＡ４では、鍵盤５から出力される演奏情報に基づき音源７に送出する楽音コマンドを発生する鍵盤処理や、上述したステップＳＡ２のスイッチ処理で実行された動作設定の状態を表示部６に画面表示する表示処理などの、その他の処理を実行する。そして以後、電源がオフ設定される迄、ステップＳＡ２〜ＳＡ４を繰り返す。
【００３１】
（２）再生処理の動作
次に、図６を参照して再生処理の動作について説明する。上述したメインルーチンのステップＳＡ３（図５参照）を介して本処理が実行されると、ＣＰＵ１はステップＳＢ１に進み、ＲＡＭ３のデータエリアに格納されたＭＩＤＩデータの内からデルタタイムΔＴおよびイベントＥＶから構成されるＳＭＦコマンドを読み出してレジスタＣＭＤにストアする。
【００３２】
ステップＳＢ２では、レジスタＣＭＤにストアしたＳＭＦコマンドの種別を識別する。そして、ＳＭＦコマンドに含まれるイベントＥＶが「ノートオン」又は「ノートオフ」であると、ステップＳＢ２に進み、デルタタイムΔＴで指定されるタイミングにおいてイベントＥＶで定義される音高の楽音の発音／消音を音源７に指示するノートオン／ノートオフ処理を実行した後、本処理を終える。
【００３３】
ＳＭＦコマンドに含まれるイベントＥＶが「プログラムチェンジ」であると、ステップＳＢ４に進み、デルタタイムΔＴで指定されるタイミングにおいてイベントＥＶで指定される音色に変更するよう音源７に指示する音色変更処理を実行した後、本処理を終える。
【００３４】
ＳＭＦコマンドに含まれるイベントＥＶが「コントロールチェンジ」ならば、ステップＳＢ５に進み、デルタタイムΔＴで指定されるタイミングにおいてイベントＥＶで定義されるコントローラ（ボリューム系操作子又はペダル系操作子）の設定を変更するコントロールチェンジ処理を実行した後、本処理を終える。
【００３５】
ＳＭＦコマンドに含まれるイベントＥＶが「ピッチベンド」ならば、ステップＳＢ６に進み、デルタタイムΔＴで指定されるタイミングにおいてピッチベンダのピッチシフト量およびベンドレンジを設定するピッチベンド処理を実行した後、本処理を終える。
【００３６】
ＳＭＦコマンドに含まれるイベントＥＶが「メタコマンド（メタイベント）」ならば、ステップＳＢ７を介してメタコマンド処理（後述する）を実行した後、本処理を終える。
【００３７】
（３）メタコマンド処理の動作
次に、図７を参照してメタコマンド処理の動作について説明する。上述した再生処理のステップＳＢ７（図６参照）を介して本処理が実行されると、ステップＳＣ１に進み、メタコマンド（メタイベント）中のメタサブコマンドを抽出してレジスタＳＵＢＣＭＤにストアする。なお、前述したように、メタコマンド（メタイベント）では、先頭のステータスバイト「ＦＦｈ」に続くコマンド列がメタサブコマンドとなる。
【００３８】
次いで、ステップＳＣ２では、レジスタＳＵＢＣＭＤにストアしたメタサブコマンドの種別を判別する。メタサブコマンドがトラック終了コマンドＭＥＴＡ＿ＥＯＴ（「２Ｆｈ」）ならば、ステップＳＣ３に進み、トラック終了処理を実行して本処理を終える。
【００３９】
メタサブコマンドがテンポコマンドＭＥＴＡ＿ＴＥＭＰＯ（「５１ｈ」）ならば、ステップＳＣ４に進み、当該テンポコマンドＭＥＴＡ＿ＴＥＭＰＯに含まれるテンポ値ｔｅｍｐｏをレジスタＤａｔａＴｅｍｐｏにストアする。そして、ステップＳＣ５では、ＵＳＥＲテンポスイッチＴＭＰの操作に応じて設定されたＵＳＥＲテンポ調整値に、レジスタＤａｔａＴｅｍｐｏに格納されるテンポ値ｔｅｍｐｏを乗算し、こうして更新された再生テンポをレジスタＳｙｓｔｅｍＴｅｍｐｏにストアして本処理を終える。なお、図示していないが、ＣＰＵ１では、このレジスタＳｙｓｔｅｍＴｅｍｐｏにストアされる再生テンポに従ってテンポクロックを発生することで当該再生テンポに同期して自動演奏を進行させるようになっている。
【００４０】
さて一方、メタサブコマンドがメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯ（「５３ｈ」）であると、ステップＳＣ６に進み、当該メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯに含まれるテンポ値ｔｅｍｐｏをレジスタＤａｔａＴｅｍｐｏにストアする。次いで、ステップＳＣ７では、自動演奏の開始前に予めＵＳＥＲテンポ調整値が設定された状態か否かを判断する。
【００４１】
自動演奏の開始前に予めＵＳＥＲテンポ調整値が設定された状態ならば、ここでの判断結果は「ＹＥＳ」となり、本処理を終える。つまり、演奏練習する目的でユーザが自動演奏の開始前に予めＵＳＥＲテンポ調整値を設定していれば、メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯによるテンポ変更指示が無効となり、演奏上の揺れを表現する小さなテンポ変動は設定されなくなる。
【００４２】
これに対し、自動演奏の開始前に予めＵＳＥＲテンポ調整値が設定された状態でなければ、上記ステップＳＣ７の判断結果は「ＮＯ」になり、ステップＳＣ８に進む。ステップＳＣ８では、レジスタＤａｔａＴｅｍｐｏに格納されるテンポ値ｔｅｍｐｏ、すなわちメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯで設定されるテンポ値ｔｅｍｐｏに、ＵＳＥＲテンポスイッチＴＭＰの操作に応じて設定されたＵＳＥＲテンポ調整値を乗算し、これにより得られる再生テンポをレジスタＳｙｓｔｅｍＴｅｍｐｏにストアして本処理を終える。
【００４３】
このように、メタコマンド処理では、メタコマンドに含まれるメタサブコマンドがテンポコマンドＭＥＴＡ＿ＴＥＭＰＯ（「５１ｈ」）ならば、そのテンポ値ｔｅｍｐｏを、ＵＳＥＲテンポスイッチＴＭＰの操作に応じて設定されたＵＳＥＲテンポ調整値に乗算して再生テンポを更新する。一方、メタサブコマンドがメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯ（「５３ｈ」）であると、自動演奏の開始前に予めＵＳＥＲテンポ調整値を設定した状態か否かを判断し、演奏練習する目的でユーザが自動演奏の開始前に予めＵＳＥＲテンポ調整値を設定していれば、当該メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯによる再生テンポの変更を無効とし、自動演奏の開始前に予めＵＳＥＲテンポ調整値が設定されていなければ、当該メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯのテンポ値ｔｅｍｐｏを、ＵＳＥＲテンポスイッチＴＭＰの操作に応じて設定されたＵＳＥＲテンポ調整値に乗算して再生テンポを更新する。
【００４４】
したがって、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯおよびメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯによって設定される再生テンポが、例えば図８中の破線Ａで図示される経時変化を辿る場合において、自動演奏の開始前に予めＵＳＥＲテンポ調整値（−５０％）を設定した状態で自動演奏を開始させると、メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯによる演奏上の揺れを表現する小さなテンポ変動が無効となり、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯのテンポ値ｔｅｍｐｏにＵＳＥＲテンポ調整値（−５０％）に乗算した再生テンポ、つまり図８中の実線Ｂで示される経時変化の再生テンポで自動演奏を進行させる。この結果、演奏上の揺れを表現する小さなテンポ変動を排除でき、しかも曲調の再現性を損ねることなく再生テンポを調整することが可能になる。
【００４５】
以上のように、第１実施形態では、曲の再生テンポを指定するテンポコマンドＭＥＴＡ＿ＴＥＭＰＯと、曲中で局所的な演奏上の揺れを表現する小さなテンポ変動を設定するメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯとをＭＩＤＩデータ中のメタイベントで定義しておき、自動演奏の開始前に予めＵＳＥＲテンポ調整値を設定した状態で自動演奏を開始させた場合にのみ、メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯを無効化する一方、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯで指定される再生テンポを、設定されたＵＳＥＲテンポ調整値に応じて更新するので、演奏上の揺れを表現する小さなテンポ変動を排除でき、しかも曲調の再現性を損ねることなく再生テンポを調整し得るようになっている。
【００４６】
なお、本実施形態では、ＵＳＥＲテンポ調整値を設定した状態で自動演奏を開始させた場合にメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯを無効化するようにしたが、これに限らず、例えばＵＳＥＲテンポスイッチＴＭＰのアップスイッチおよびダウンスイッチを同時押下した場合や、別途に設ける操作子の操作でメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯの無効化を指示する態様としても構わない。
【００４７】
［第２実施形態］  
次に、図９〜図１１を参照して第２実施形態について説明する。第２実施形態の構成は、上述した第１実施形態と同一なので、その説明は省略する。第２実施形態が上述した第１実施形態と相違する点は、１小節内に存在する各テンポ値毎の占有時間を検出し、この中で最大の占有時間を有するテンポ値を代表テンポに設定し、当該小節中で代表テンポに一致しないテンポ値を設定するテンポコマンドＭＥＴＡ＿ＴＥＭＰＯを、メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯに差し換えることにある。以下、こうした第２実施形態の動作を説明する。
【００４８】
図９は、第２実施形態によるメインルーチンの動作を示すフローチャートである。この図に示す第２実施形態の動作が、図５に図示した第１実施形態のメインルーチンと相違する点は、ステップＳＤ３の揺れテンポ検出差換処理を有することにある。揺れテンポ検出差換処理では、図１０に図示するｔｅｍｐｏ−ｓｔｅｐテーブルを用いる。ｔｅｍｐｏ−ｓｔｅｐテーブルは、ＲＡＭ３のワークエリアに設けられ、１小節内に存在する各テンポ値（ｎｏｗｔｅｍｐｏ）毎の占有時間（ｓｔｅｐ）が登録されるデータテーブルである。
【００４９】
なお、図１０に図示する一例は、１小節長が３８４ｓｔｅｐ（４分音符長「９６」×４）の場合に、テンポ値「１６０」の占有時間が３０６ｓｔｅｐ、テンポ値「１５８」、「１５９」、「１６１」、「１６２」の各占有時間がそれぞれ１８ｓｔｅｐであることを表している。こうしたｔｅｍｐｏ−ｓｔｅｐテーブルが意図するところについては追って述べる。
【００５０】
さて、ステップＳＤ３を介して揺れテンポ検出差換処理が実行されると、ＣＰＵ１は図１１に図示するステップＳＥ１に進み、ステップＳＥ１からステップＳＥ１３までのループ処理、すなわち演奏トラックのＭＩＤＩデータを全て読み出し終えるまでステップＳＥ２〜ＳＥ１２を繰り返し実行する。
【００５１】
先ずステップＳＥ２では、ＲＡＭ３のデータエリアから１コマンド分のＳＭＦコマンド（デルタタイムΔＴおよびイベントＥＶ）を読み出す。続いて、ステップＳＥ３では、読み出したＳＭＦコマンドが小節線を跨ぐか又は小節線に一致するタイミングを有しているかどうかを判断する。小節線を跨ぐか又は小節線に一致するタイミングを有していなければ、判断結果は「ＮＯ」になり、ステップＳＥ４に進む。
【００５２】
ステップＳＥ４では、前回コマンドからの経過時間に相当するｓｔｅｐ値、すなわち今回読み出したＳＭＦコマンドのデルタタイムΔＴをレジスタＳＴＥＰに加算した後、ステップＳＥ９に進む。ステップＳＥ９では、今回読み出したＳＭＦコマンドのイベントＥＶが、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯであるかどうかを判断する。以下、イベントＥＶがテンポコマンドＭＥＴＡ＿ＴＥＭＰＯであるＳＭＦコマンドを「ＴＥＭＰＯコマンド」と称す。今回読み出したＳＭＦコマンドがＴＥＭＰＯコマンドでなければ、判断結果は「ＮＯ」になり、ステップＳＥ１３に進む。そして、ループ処理が終了していなければ、上述のステップＳＥ２に処理を戻し、次のＳＭＦコマンドの読み出しを進める。
【００５３】
一方、今回読み出したＳＭＦコマンドがＴＥＭＰＯコマンドならば、上記ステップＳＥ９の判断結果は「ＹＥＳ」になり、ステップＳＥ１０に進む。ステップＳＥ１０では、現時点におけるレジスタＳＴＥＰの値を、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに対応する占有時間（ｓｔｅｐ）に加算する。次いで、ステップＳＥ１１では、レジスタＳＴＥＰをゼロクリアする。そして、ステップＳＥ１２に進み、今回のＴＥＭＰＯコマンドで新たに設定されるテンポ値に従い、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏを更新する。この後、ループ処理が終了していなければ、ステップＳＥ１３を介して上述のステップＳＥ２に処理を戻し、次のＳＭＦコマンドの読み出しを進める。
【００５４】
このように、読み出したＳＭＦコマンドが小節線を跨ぐか又は小節線に一致するタイミングを有していなければ、前回コマンドからの経過時間（ｓｔｅｐ値）をレジスタＳＴＥＰに加算する。そして、読み出したＳＭＦコマンドがＴＥＭＰＯコマンドであると、現時点で累算しているレジスタＳＴＥＰの値を、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに対応する占有時間（ｓｔｅｐ）に加算する。これにより、今回のＴＥＭＰＯコマンドで新たにテンポ変更される前の旧テンポ値の占有時間がｔｅｍｐｏ−ｓｔｅｐテーブルに登録される。そして、ｔｅｍｐｏ−ｓｔｅｐテーブルに旧テンポ値の占有時間が登録されると、レジスタＳＴＥＰをゼロクリアすると共に、今回のＴＥＭＰＯコマンドで新たに設定されるテンポ値が、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに更新される。
【００５５】
こうして、１小節内に存在する各テンポ値（ｎｏｗｔｅｍｐｏ）毎の占有時間（ｓｔｅｐ）をｔｅｍｐｏ−ｓｔｅｐテーブルに登録する過程で、読み出されたＳＭＦコマンドが小節線を跨ぐか又は小節線に一致するタイミングを有していると、上述したステップＳＥ３の判断結果が「ＹＥＳ」になり、ステップＳＥ５に進む。
【００５６】
ステップＳＥ５では、前回ＴＥＭＰＯコマンドから小節線までの経過時間を保持するレジスタＳＴＥＰの値を、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに対応する占有時間（ｓｔｅｐ）に加算する。次いで、ステップＳＥ６では、ｔｅｍｐｏ−ｓｔｅｐテーブルの内から最大占有時間を有するテンポ値を取得し、この取得したテンポ値を代表テンポに設定する。なお、ｔｅｍｐｏ−ｓｔｅｐテーブルに最大占有時間が同じテンポ値が複数存在する場合には、例えば前小節の代表テンポに近い値の方を現小節の代表テンポに選択する。
【００５７】
続いて、ステップＳＥ７では、ＲＡＭ３のデータエリアに格納されるＭＩＤＩデータの内、今回走査した小節の頭から１小節分のテンポ値を再度検出し、上記ステップＳＥ６で取得した代表テンポに一致しないテンポ値を設定するテンポコマンドＭＥＴＡ＿ＴＥＭＰＯを、メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯに差し換える。次いで、ステップＳＥ８では、ｔｅｍｐｏ−ｓｔｅｐテーブルの内容を全てゼロクリアすると共に、小節線から現在までのｓｔｅｐ値（経過時間）をレジスタＳＴＥＰにストアした後、前述したステップＳＥ９に進む。
【００５８】
以後、演奏トラックの終端に達するまで上述したステップＳＥ２〜ＳＥ１２の処理を繰り返すことによって、各小節毎の代表テンポが設定され、各小節中では代表テンポに一致しないテンポ値を設定するテンポコマンドＭＥＴＡ＿ＴＥＭＰＯが、曲中で局所的な演奏上の揺れを表現する小さなテンポ変動を設定するメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯに置換される。
【００５９】
そして、第２実施形態では、第１実施形態と同様に、自動演奏の開始前に予めＵＳＥＲテンポ調整値を設定した状態で自動演奏を開始させた場合にのみ、置換されたメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯを無効化する一方、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯで指定される再生テンポを、設定されたＵＳＥＲテンポ調整値に応じて更新するので、演奏上の揺れを表現する小さなテンポ変動を排除でき、しかも曲調の再現性を損ねることなく再生テンポを調整し得るようになる。
【００６０】
［変形例］  
次に、図１２を参照して第２実施形態の変形例について説明する。図１２は、第２実施形態の変形例による揺れテンポ検出差換処理の動作を示すフローチャートである。上述した第２実施形態と同様、ステップＳＤ３（図９参照）を介して本処理が実行されると、ＣＰＵ１は図１に図示するステップＳＦ１に進み、ステップＳＦ１からステップＳＦ１５までのループ処理、すなわち演奏トラックのＭＩＤＩデータを全て読み出し終えるまでステップＳＦ２〜ＳＦ１４を繰り返し実行する。
【００６１】
先ずステップＳＦ２では、ＲＡＭ３のデータエリアから１コマンド分のＳＭＦコマンド（デルタタイムΔＴおよびイベントＥＶ）を読み出す。続いて、ステップＳＦ３では、読み出したＳＭＦコマンドが小節線を跨ぐか又は小節線に一致するタイミングを有しているかどうかを判断する。小節線を跨ぐか又は小節線に一致するタイミングを有していなければ、判断結果は「ＮＯ」になり、ステップＳＦ４に進む。
【００６２】
ステップＳＦ４では、前回コマンドからの経過時間に相当するｓｔｅｐ値、すなわち今回読み出したＳＭＦコマンドのデルタタイムΔＴをレジスタＳＴＥＰに加算した後、ステップＳＦ１１に進む。ステップＳＦ１１では、今回読み出したＳＭＦコマンドのイベントＥＶが、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯであるかどうかを判断する。以下、イベントＥＶがテンポコマンドＭＥＴＡ＿ＴＥＭＰＯであるＳＭＦコマンドを「ＴＥＭＰＯコマンド」と称す。今回読み出したＳＭＦコマンドがＴＥＭＰＯコマンドでなければ、判断結果は「ＮＯ」になり、ステップＳＦ１５に進む。そして、ループ処理が終了していなければ、上述のステップＳＦ２に処理を戻し、次のＳＭＦコマンドの読み出しを進める。
【００６３】
一方、今回読み出したＳＭＦコマンドがＴＥＭＰＯコマンドならば、上記ステップＳＦ１１の判断結果は「ＹＥＳ」になり、ステップＳＦ１２に進む。ステップＳＦ１２では、現時点におけるレジスタＳＴＥＰの値を、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに対応する占有時間（ｓｔｅｐ）に加算する。次いで、ステップＳＦ１３では、レジスタＳＴＥＰをゼロクリアする。そして、ステップＳＦ１３に進み、今回のＴＥＭＰＯコマンドで新たに設定されるテンポ値に従い、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏを更新する。この後、ループ処理が終了していなければ、ステップＳＦ１５を介して上述のステップＳＦ２に処理を戻し、次のＳＭＦコマンドの読み出しを進める。
【００６４】
このように、読み出したＳＭＦコマンドが小節線を跨ぐか又は小節線に一致するタイミングを有していなければ、前回コマンドからの経過時間（ｓｔｅｐ値）をレジスタＳＴＥＰに加算する。そして、読み出したＳＭＦコマンドがＴＥＭＰＯコマンドであると、現時点で累算しているレジスタＳＴＥＰの値を、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに対応する占有時間（ｓｔｅｐ）に加算する。これにより、今回のＴＥＭＰＯコマンドで新たにテンポ変更される前の旧テンポ値の占有時間がｔｅｍｐｏ−ｓｔｅｐテーブルに登録される。そして、ｔｅｍｐｏ−ｓｔｅｐテーブルに旧テンポ値の占有時間が登録されると、レジスタＳＴＥＰをゼロクリアすると共に、今回のＴＥＭＰＯコマンドで新たに設定されるテンポ値が、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに更新される。
【００６５】
こうして、１小節内に存在する各テンポ値（ｎｏｗｔｅｍｐｏ）毎の占有時間（ｓｔｅｐ）をｔｅｍｐｏ−ｓｔｅｐテーブルに登録する過程で、読み出されたＳＭＦコマンドが小節線を跨ぐか又は小節線に一致するタイミングを有していると、上述したステップＳＦ３の判断結果が「ＹＥＳ」になり、ステップＳＦ５に進む。
【００６６】
ステップＳＦ５では、前回ＴＥＭＰＯコマンドから小節線までの経過時間を保持するレジスタＳＴＥＰの値を、ｔｅｍｐｏ−ｓｔｅｐテーブル中の現在テンポ値ｎｏｗｔｅｍｐｏに対応する占有時間（ｓｔｅｐ）に加算する。次いで、ステップＳＦ６では、ｔｅｍｐｏ−ｓｔｅｐテーブルの内から最大占有時間を有するテンポ値を取得し、この取得したテンポ値を代表テンポに設定する。なお、ｔｅｍｐｏ−ｓｔｅｐテーブルに最大占有時間が同じテンポ値が複数存在する場合には、例えば前小節の代表テンポに近い値の方を現小節の代表テンポに選択する。
【００６７】
続いて、ステップＳＦ７では、上記ステップＳＦ６にて設定した現在の代表テンポの値と、前小節の代表テンポの値との差分が所定値以内であるか否かを判断する。前小節の代表テンポの値との差分が所定値以内であれば、判断結果は「ＹＥＳ」になり、ステップＳＦ８に進み、現在の代表テンポを、前小節の代表テンポに置き換えた後、ステップＳＦ９に進む。
【００６８】
これに対し、現在の代表テンポの値と、前小節の代表テンポの値との差分が所定値を超えていると、上記ステップＳＦ７の判断結果が「ＮＯ」になり、ステップＳＦ９に進む。ステップＳＦ９では、ＲＡＭ３のデータエリアに格納されるＭＩＤＩデータの内、今回走査した小節の頭から１小節分のテンポ値を再度検出し、代表テンポに一致しないテンポ値を設定するテンポコマンドＭＥＴＡ＿ＴＥＭＰＯを、メタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯに差し換える。次いで、ステップＳＦ１０では、ｔｅｍｐｏ−ｓｔｅｐテーブルの内容を全てゼロクリアすると共に、小節線から現在までのｓｔｅｐ値（経過時間）をレジスタＳＴＥＰにストアした後、前述したステップＳＦ１１に進む。
【００６９】
以後、演奏トラックの終端に達するまで上述したステップＳＦ２〜ＳＦ１４の処理を繰り返すことによって、現小節の代表テンポの値と、前小節の代表テンポの値との差分が所定値以内ならば前小節の代表テンポを現小節の代表テンポに置換し、現小節の代表テンポの値と、前小節の代表テンポの値との差分が所定値を超えていれば現小節の代表テンポを使用するようにし、こうして各小節毎の代表テンポが設定されると、各小節中では代表テンポに一致しないテンポ値を設定するテンポコマンドＭＥＴＡ＿ＴＥＭＰＯが、曲中で局所的な演奏上の揺れを表現する小さなテンポ変動を設定するメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯに置換される。
【００７０】
したがって、この変形例では、第１実施形態と同様に、自動演奏の開始前に予めＵＳＥＲテンポ調整値を設定した状態で自動演奏を開始させた場合にのみ、置換されたメタグルーブテンポコマンドＭＥＴＡ＿ＧＲＯＯＶＥＴＥＭＰＯを無効化する一方、テンポコマンドＭＥＴＡ＿ＴＥＭＰＯで指定される再生テンポを、設定されたＵＳＥＲテンポ調整値に応じて更新するので、演奏上の揺れを表現する小さなテンポ変動を排除でき、しかも曲調の再現性を損ねることなく再生テンポを調整し得るようになる。
【００７１】
また、変形例では、現小節の代表テンポの値と、前小節の代表テンポの値との差分が所定値以内ならば前小節の代表テンポを現小節の代表テンポに置換するので、例えば曲調のテンポの変更ではなく、一時的に小節のテンポが変化するような曲であると、一定のテンポに維持でき、初心者ユーザ向けの演奏練習に好適となる効果が得られる。
【図面の簡単な説明】
【００７２】
【図１】本発明による第１実施形態の構成を示すブロック図である。
【図２】ＭＩＤＩデータの構成を示す図である。
【図３】操作部４に配設される操作スイッチの一例を示す図である。
【図４】表示部６の表示形態を示す図である。
【図５】メインルーチンの動作を示すフローチャートである。
【図６】再生処理の動作を示すフローチャートである。
【図７】メタコマンド処理の動作を示すフローチャートである。
【図８】メタコマンド処理の動作を説明するためのグラフである。
【図９】第２実施形態によるメインルーチンの動作を示すフローチャートである。
【図１０】ｔｅｍｐｏ−ｓｔｅｐテーブルの構成を示す図である。
【図１１】揺れテンポ検出差換処理の動作を示すフローチャートである。
【図１２】変形例による揺れテンポ検出差換処理の動作を示すフローチャートである。
【図１３】従来の再生テンポ調整に生じる課題を説明するためのグラフである。
【図１４】従来の再生テンポ調整に生じる課題を説明するためのグラフである。
【図１５】従来の再生テンポ調整に生じる課題を説明するためのグラフである。
【符号の説明】
【００７３】
１  ＣＰＵ
２  ＲＯＭ
３  ＲＡＭ
４  操作部
５  鍵盤
６  表示部
７  音源
８  サウンドシステム
【図１】
2008197407.tif 000003
【図２】
2008197407.tif 000004
【図３】
2008197407.tif 000005
【図４】
2008197407.tif 000006
【図５】
2008197407.tif 000007
【図６】
2008197407.tif 000008
【図７】
2008197407.tif 000009
【図８】
2008197407.tif 000010
【図９】
2008197407.tif 000011
【図１０】
2008197407.tif 000012
【図１１】
2008197407.tif 000013
【図１２】
2008197407.tif 000014
【図１３】
2008197407.tif 000015
【図１４】
2008197407.tif 000016
【図１５】
2008197407.tif 000017