図1は、本発明の実施例による電子鍵盤楽器1の基本構成を表すブロック図である。
バス6には、RAM7、ROM8、CPU9、検出回路11、表示回路13、外部記憶装置15、音源回路18、効果回路19、通信インターフェイス(I/F)21、鍵駆動回路23が接続される。
RAM7は、再生バッファ等のバッファ領域、フラグ、レジスタ、各種パラメータ等を記憶するCPU9のワーキングエリアを有する。
ROM8には、各種パラメータ及び制御プログラム、又は本実施例を実現するためのプログラム等を記憶することができる。この場合、プログラム等を重ねて、外部記憶装置15に記憶する必要は無い。
CPU9は、ROM8又は、外部記憶装置15に記憶されている制御プログラム又は本実施例を実現するためのプログラム等に従い、演算又は電子鍵盤楽器1の制御を行う。タイマ10は、CPU9に接続されており、基本クロック信号、割り込み処理タイミング等をCPU9に供給する。
ユーザは、検出回路11に接続される設定操作子12を用いて、各種入力及び設定、選択をすることができる。設定操作子12は、例えば、文字入力用キーボード、マウス、スイッチ、パッド、フェーダ、スライダ、ロータリーエンコーダ、ジョイスティック、ジョグシャトル等、ユーザの入力に応じた信号を出力できるものならどのようなものでもよい。また、設定操作子12は、マウス等の他の操作子を用いて操作するディスプレイ14上に表示されるソフトスイッチ等でもよい。
表示回路13は、ディスプレイ14に接続され、各種情報をディスプレイ14に表示することができる。ユーザは、このディスプレイ14に表示される情報を参照して、各種入力及び設定を行う。また、ディスプレイ14は、外部の表示装置を接続することにより構成してもよい。
外部記憶装置15は、ハードディスク、FD(フレキシブルディスク又はフロッピーディスク(登録商標))、CD(コンパクトディスク)、DVD(デジタル多目的ディスク)、フラッシュメモリ等の半導体メモリ等の記憶媒体とその駆動装置の組み合わせの少なくとも1つで構成される。記憶媒体は、着脱可能であってもよいし、電子鍵盤楽器1に内蔵されていてもよい。
外部記憶装置15には、本発明の各実施例で用いられる自動演奏データPD(図4)、駆動用データMD(図4)等を複数記憶可能であるとともに、本発明の各実施例を実現するためのプログラムや、その他の電子鍵盤装置1を制御するためのプログラムを記憶することができる。なお、本発明の各実施例を実現するためのプログラムや、その他の電子鍵盤装置1を制御するためのプログラムを外部記憶装置15に記憶する場合は、これらをROM8に合わせて記憶する必要はない。また、一部のプログラムのみを外部記憶装置15に記憶し、その他のプログラムをROM8に記憶するようにしてもよい。
音源回路18は、外部記憶装置15、ROM8又はRAM7等に記録された演奏データPD若しくは鍵盤22又は通信インターフェイス21に接続された外部機器等から供給される演奏信号、MIDI信号等に応じて楽音信号を生成し、効果回路19を介して、サウンドシステム20に供給する。
効果回路19は、音源回路18から供給される楽音信号に対して、各種音楽的効果を付与する。サウンドシステム20は、D/A変換器及びスピーカを含み、供給されるデジタル形式の楽音信号をアナログ形式に変換し、発音する。
鍵盤22は、ユーザの演奏を入力するための複数の鍵220、各鍵に対応する鍵駆動機構225(図2)等を含む操作子であり、ユーザが操作した鍵に対応する音高で、該ユーザの鍵に対する操作開始タイミング及び終了タイミングをそれぞれキーオン及びキーオフ信号として入力する。また、鍵盤22の各鍵220は、各鍵に設けられた鍵駆動機構225により、電子鍵盤楽器1において再生される自動演奏データPD(図4)に合わせて(具体的には駆動用データMD(図4)に従い)、駆動される。なお、鍵盤22の構成については、図2を参照して後述する。
鍵駆動回路23は、後述する駆動用データMD(図4)に含まれるタイミングデータTDで指定されるタイミングに、鍵駆動イベントMVで指定される音高に対応する各鍵220の鍵駆動機構225の駆動を制御する。
通信インターフェイス21は、MIDIなどの音楽専用有線I/F、USBやIEEE1394等の汎用近距離有線I/F、Ethernet(登録商標)等の汎用ネットワークI/F、無線LANやBluetooth(登録商標)等の汎用近距離無線I/F等の通信インターフェイスのうち少なくとも1つで構成される。
通信I/F21は、LAN(ローカルエリアネットワーク)及びインターネット等の通信ネットワーク3に接続可能であり、該通信ネットワーク3を介して、サーバ2及び他の電子楽器と相互に接続可能である。
図2は、本発明の実施例による鍵盤22の構成を表す概略図である。なお、図に示すものは、複数ある鍵220のうちの1つの白鍵220及びそれに対応する周辺機構の構成であり、白鍵と黒鍵の形状の違いを除き、全ての鍵220について図に示すものとほぼ同様の構成を有する。。図2(A)は、未操作(又は離鍵)状態の鍵220及びその周辺機構の状態を表し、図2(B)は、被操作(押鍵)状態の鍵220及びその周辺機構の状態を表す。なお、図中A〜Cの矢印及び白抜きの矢印は、それぞれの構成部分の動きの方向を表す。
各鍵220は、それぞれ周辺機構として鍵支点221、ハンマー222、鍵・ハンマー係合部223、ハンマー支点224、鍵駆動機構225を含む。なお、図示しないが、各鍵のオン・オフ(押鍵・離鍵)、押鍵速度等を検出するためのスイッチを含む。
ユーザが、鍵220を操作(押鍵)すると、鍵220の鍵自由端(先端)220mは、鍵支点221を回動中心として、C方向に回動する。すると、鍵自由端220m付近で係合部223により鍵220に係合されているハンマー222のハンマー系合端222fは、B方向にハンマー支点224を回動中心として回動するとともに、ハンマー自由端222mは、A方向に回動する。この時、図2(B)に示す状態となり、図示しない押鍵速度等を検出するためのスイッチにハンマー系合端222fが接触することにより、キーオン信号を発生させる。その後、ユーザが鍵220から指を離す(離鍵する)ことにより、ハンマー222の重みにより、自然に、鍵自由端220m、ハンマー系合端222f及びハンマー自由端222mが先ほどとは逆方向に回動して、図2(A)に示す元の状態に復帰する。
鍵駆動機構225は、例えば、プッシュ型又はプッシュプル型のソレノイドで構成され、図1の鍵駆動回路23からの制御信号により駆動される。なお、本明細書では、図中白抜きの矢印方向への駆動(図2(B)に示す状態)を「順方向への駆動」と呼び、元の状態(図2(A)に示す状態)に復帰させる方向への駆動を「逆方向への駆動」と呼ぶ。また、単に「駆動」とした場合は、順方向及び逆方向のいずれかの駆動をさす。すなわち、駆動用データMDの駆動イベント(キーオンイベント)MVが再生されると、鍵駆動回路23から駆動用制御信号が入力され(ソレノイドのコイルへの通電)、該制御信号に基づき図中の白抜きの矢印方向に駆動部225mを順方向へ駆動する。この駆動部225mにハンマー自由端222m付近が押し上げられることにより、ハンマー自由端222mは、A方向に回動するとともに、鍵自由端220m付近で係合部223により鍵220に係合されているハンマー222のハンマー系合端222fは、B方向にハンマー支点224を回動中心として回動する。すると、鍵自由端220m付近で係合部223によりハンマー系合端222fは、鍵220に係合されているので、鍵220の鍵自由端(先端)220mは、鍵支点221を回動中心として、C方向に回動する。このようにして、鍵駆動機構225を順方向へ駆動することにより、上述したユーザの押鍵動作によるものと同様に鍵220を回動させることができ、ユーザの押鍵動作なしで、あたかもユーザが押鍵したかのように鍵220を駆動することができる。
また、駆動用データMDの駆動イベント(キーオフイベント)MV、又はオールノートオフ、オールサウンドオフ等が再生されると、鍵駆動回路23から駆動解除用制御信号が入力され(ソレノイドのコイルへの通電状態を変化させるか又は復帰用電流に切り替える)、該制御信号に基づき図中の白抜きの矢印とは逆方向に駆動部225mを逆方向に駆動する。
なお、上記の例では、鍵220は、ハンマー222を有するものとしたが、鍵220は、ハンマー222を有するものに限らない。この場合、プル型のソレノイド等で鍵駆動機構225を構成し、ハンマー222を介さないで直接鍵220を駆動するようにしてもよい。また、ハンマー222を有する場合であっても、直接鍵220を駆動するようにしてもよい。さらに、鍵駆動機構225として、ソレノイドを用いたが、鍵駆動回路23からの制御信号に高速に反応してハンマー222を押し上げる又は鍵220を引き下げることができるものであれば、どのような駆動機構を用いてもよい。
また、鍵駆動機構225は、電流の通電及び遮断によるオン・オフに限らず、例えば、ベロシティ等のパラメータに基づき、鍵220の回動角度や速度を制御するようにしてもよい。
図3は、本発明の実施例による演奏データPD及び演奏データPDに基づき作成される駆動用データMDの構成を表す概念図である。
演奏データPDは、MIDIデータ等の自動演奏用のデータであり、テンポトラックTTD(例えば、テンポトラック0)及び複数の演奏用トラックPTD(例えば、演奏用トラック1〜16)を含んで構成される。なお演奏データPDは、例えば、図1の外部記憶装置15若しくはROM8等に記憶されている。また、演奏データPDは、電子鍵盤楽器1内に記憶されているものに限らず、通信ネットワーク3を介して、取得されるものであってもよい。例えば、インターネット等のネットワークにおける演奏データ配信サービスから擬似ストリーミング(MIDIデータ等を一度にダウンロードして再生終了後自動的に消去するダウンロード手法)等によって、ダウンロードしてもよい。また、演奏データPDは、図1の外部記憶装置15に記憶されるとともに、再生時には、RAM7等の再生バッファに記憶される。擬似ストリーミング等により一時的にダウンロードされた演奏データPDは、RAM7等の再生バッファに記憶され、再生終了後に、消去される。
演奏用トラックPTDは、タイミングデータTDと、該タイミングデータで示されるタイミングに再生される各種イベントEVを含んで構成される。
タイミングデータTDは、所定音符長を所定数(分解能)で割ったTick(Clockともいう)で表されるデータであり、一例として、四分音符を1920で割ったものとする。なお、この場合は、「分解能=1920」といい、1920Tickで四分音符1つ分の長さに相当する。なお、Tickは、四分音符を分解能で割ったものなので、Tickの時間的長さは、テンポによって変化する。タイミングデータTDは、曲(演奏データPD)の先頭等の所定位置からの絶対タイミング(Tick数)で表してもよいし、1つ前のイベント(タイミングデータTD)からの相対タイミング(Tick数)で表してもよい。なお、本実施例では、タイミングデータTDは、演奏データPDの先頭からの絶対タイミングで表すものとする。
イベントEVは、タイミングデータTDで示されるタイミングにおいて、再生(図1の音源回路18又は効果回路19などに出力)すべきデータであり、例えば、演奏用トラックPTDには、ノートイベント、プログラムチェンジ、コントロールチェンジ(オールノートオフ、オールサウンドオフ等)、システムエクスクルーシブなどのイベントが含まれる。なお、ノートイベントは、ノートオン及びノートオフが別のものでもよいし、ノートオンとゲートタイムの組み合わせでもよい。本実施例では、ノートオンとゲートタイムの組み合わせでノートイベントが記録されているものとする。
テンポトラックTTDは、タイミングデータTD及び該タイミングデータで示されるタイミングに再生されるテンポチェンジイベントTPで構成される。テンポチェンジイベントTPは、演奏データPDの再生テンポを設定するためのイベントである。
駆動用データMDは、後述する図5の駆動用データ作成処理において、演奏データPDに基づき作成される鍵駆動用のデータである。駆動用データMDは、元となる演奏データPDと同数の鍵駆動用トラックMTD(例えば、鍵駆動用トラック1〜16)を有する。なお、鍵駆動用トラック1〜16は、それぞれ演奏用トラック1〜16に対応する。各鍵駆動用トラックMTDは、タイミングデータTDと該タイミングデータで示されるタイミングに再生される鍵駆動イベントMV、及びタイミング差dTを含んで構成される。鍵駆動イベントMVは、基本的には、元の演奏データPDに記憶されているノートイベントであり、タイミングデータTDで示されるタイミングにおいて、再生(図1の鍵駆動回路23に出力)すべきデータである。なお、必要に応じて、一部のコントロールチェンジイベント(オールノートオフ、オールサウンドオフ)も鍵駆動用イベントMVとして記憶するようにしてもよい。なお、ノートオンイベントには、音高及びゲートタイムが含まれるが、鍵駆動の速度や、鍵220の回動距離(角度)を制御するために、ベロシティ等のその他のパラメータを含むようにしてもよい。
鍵駆動用トラックMTDの鍵駆動用イベントMVは、対応する演奏用トラックPTDのイベントに基づいて作成される。これらのイベントの内容は同一であり、そのイベントの再生タイミングが異なる。鍵駆動は、鍵駆動機構225(図2)を駆動し始めてから(例えば、ソレノイドに電流を流し始めてから)、実際に鍵220が駆動されて押下された状態となるまでに所定時間(例えば、50msec程度)かかる。鍵駆動用トラックMTDのイベントMVは、この所定時間に対応するタイミングだけ、演奏用トラックPTDの対応するイベントEVに対して先行したタイミングに再生される。
タイミング差dTは、上記所定時間に対応するタイミングに対応するデータであり、Tickで表される。所定時間(例えば、50msec)に対応するTick数は、演奏のテンポによって変動する。このためタイミング差dTは、テンポによって異なる値をとる。
例えば、演奏用トラック1のイベントEV1がノートイベントである場合、対応する鍵駆動用トラック1のイベントMV1は、同一内容のノートイベントであり、そのタイミングは、演奏用トラック1のタイミングBからタイミング差dTを減算したものとなる(タイミングB−dT)。
なお、本実施例では、鍵駆動用トラックMTDは、元となる演奏用トラックPTDの全てについて作成されるが、実際に鍵駆動に用いられるトラックは、1ないし複数のトラックである。鍵駆動に用いるトラックは、ユーザが任意に選択するようにしてもよいし、所定の規則に従って自動的に選択されるようにしてもよい。典型的には、ピアノなどの鍵盤演奏パートの右手と左手のパートに対応したトラックが選択される。しかし、それ以外のパートもユーザによる任意の選択により、駆動対象となりうる。
図4は、本発明の実施例による自動演奏処理を表すフローチャートである。この処理は、例えば、電子鍵盤楽器1において演奏データPDの自動演奏モードが選択された場合に、起動され、図1のCPU9により実行される処理である。
ステップSA1で、自動演奏処理を開始し、ステップSA2では、再生モードの設定を行う。再生モードの設定は、例えば、通常スタート又はクイックスタートの設定(スタートモード)、鍵駆動のオン又はオフ(鍵駆動モード)等であり、ここでの設定は、図1のRAM7等にフラグとして記憶される。
ステップSA3では、この自動演奏処理において再生する演奏データPDの選択(選曲)及び、駆動対象(鍵駆動回路23にデータが送出される駆動用トラックMTDに対応する演奏用トラックPTD)の設定を行う。選曲は、電子鍵盤楽器1に内に記憶されている演奏データPDに限らず、上述したようなインターネット等による配信サービスで配信される演奏データPDの中から行うようにしてもよい。また、駆動対象トラックの設定は、ユーザが操作子12(図1)の操作により1ないし複数のトラックを選択してもよいし、予め決めた所定のルールに沿って、自動的に設定するようにしてもよい。例えば、トラック1及びトラック2をピアノの右手パートと左手パートとみなして、駆動対象として設定する。
ステップSA4では、後述する図5に示す駆動用データ作成処理を実行する。ここでは、ステップSA3で選択された演奏データPDに基づいて、駆動用データMDを作成する。
ステップSA5では、ユーザが操作子12を操作することによる再生開始指示があったか否かを判断する。再生開始指示があった場合は、YESの矢印で示すステップSA6に進み、再生開始指示がない場合は、NOの矢印で示すように、ステップSA5の処理を繰り返して、再生開始指示の入力があるまで待機する。
ステップSA6では、後述する図8の再生開始処理を実行する。再生開始処理では、ステップSA2で設定した再生モードのうち、通常スタート又はクイックスタートの設定に従い、ステップSA3で選択された演奏データPDの再生を開始する。その後、ステップSA7に進む。
ステップSA7では、ユーザが操作子12を操作することによる再生の一時停止指示があったか否かを判断する。一時停止指示があった場合は、YESの矢印で示すステップSA8に進み、一時停止指示がない場合は、NOの矢印で示すステップSA12に進む。
ステップSA8では、演奏データPD及び駆動データMDの再生を一時停止し、鍵駆動回路23及び音源回路18にオールノートオフを供給する。これにより、音源回路18による演奏データPDに基づく楽音生成は停止され、鍵駆動機構225は、図2(A)に示す元の状態(離鍵状態)に復帰する。
ステップSA9では、ユーザが操作子12を操作することによる再生再開指示があったか否かを判断する。再生再開指示があった場合は、YESの矢印で示すステップSA10に進み、再開指示がない場合は、NOの矢印で示すように、ステップSA9の処理を繰り返して、再開指示の入力があるまで待機する。
ステップSA10では、後述する図10の一時停止直前の鍵駆動イベント処理を実行する。この処理は、ステップSA8で一時停止した位置よりも後ろに演奏用イベントEVがあり、該一時停止位置よりも前に該演奏用イベントEVに対応する鍵駆動用イベントMVがある場合等に鍵駆動用イベントMVが確実に再生されるようにするための処理である。その後、ステップSA11に進み、再生を再開する。ここでの再生の再開とは、ステップSA8での一時停止状態を解除することである。その後、ステップSA14に進む。
ステップSA12では、再生処理を行う。この再生処理では、鍵駆動用トラックMTDと演奏用トラックPTDを並列に再生する。なお、複数の鍵駆動用トラックMTD及び複数の演奏用トラックPTDが選択されている場合には、すべてのトラックを並列に再生する。なお、ここでの再生は、駆動対象となっている鍵駆動用トラックMTDからノートイベントMV(及び必要に応じてその他のイベント)を読み出し、鍵駆動回路23へと供給することにより鍵駆動機構225を駆動して鍵220を駆動することである。また、演奏用トラックPTDからは、ノートイベントやその他のイベントを、音源回路18や効果回路19に供給してサウンドシステム20等から演奏データPDに対応する楽音を発音させることである。
なお、ステップSA12の再生処理においては、従来技術のように、鍵駆動用のノートイベントと演奏用のノートイベントとの間でタイミング調整をする必要はなく、単に、両データを並列して各データのタイミングにおいて再生するのみであり、非常にシンプルに再生処理を行うことができる。
ステップSA13では、その他の処理を行う。ここでは、ユーザの操作子12の操作による自動演奏にかかわる様々な設定の変更等の指示を検出して、該検出した設定変更等の指示に基づく処理を行う。具体的には、駆動対象トラックの変更や、鍵駆動のオン・オフの切り替え等である。駆動対象トラックが変更された場合は、次回以降のステップSA12で再生される駆動対象トラックが変更される。鍵駆動のオンからオフに変更された場合は、次回以降のステップSA12での駆動用トラックの再生を中止し、鍵駆動のオフからオンに変更された場合は、次回以降のステップSA12での駆動用トラックの再生を開始する。その他には、テンポの設定変更をすることができる。テンポの設定が変更された場合は、ステップSA4の駆動用データ作成処理を再度行う。なお、テンポが変更された場合にはステップSA4の駆動用データ作成処理を再度実行する代わりに、テンポの変更割合で駆動用データMD内のタイミング差dTを変更して、該変更したタイミング差dTに基づき、駆動用データMD内の各駆動用イベントMVのタイミングを変更するようにしてもよい。その後、ステップSA14に進む。
ステップSA14では、ユーザが操作子12を操作することによる再生終了指示があったか否か、若しくは、演奏データPDを最後まで再生することにより再生が終了したか否かを判断する。再生を終了する場合、すなわち、再生指示の検出若しくは演奏データPDの再生終了の場合は、YESの矢印で示すステップSA15に進み、自動演奏処理を終了する。再生を終了しない場合は、NOの矢印で示すステップSA7に戻り以降の処理を繰り返す。
図5は、図4のステップSA4で実行する駆動用データ作成処理を表すフローチャートである。この処理では、図4のステップSA3で選択された演奏データPDの再生開始前に、該演奏データPDに基づいて、予め駆動用データMDを作成する。
ステップSB1で、駆動用データ作成処理を開始し、ステップSB2では、図4のステップSA3で選択された演奏データPDに含まれるテンポトラックTTD及び全ての演奏用トラックPTD(この駆動用データ作成処理では、以下、全トラックを総称して処理対象トラックと呼ぶ)のポインタを各トラックの先頭にセットする。
ステップSB3では、処理対象トラックの先頭データ(先頭タイミングデータTD)を読み出し、該読み出した各タイミングデータを対応する(トラック番号nが同一の)トラックタイミングレジスタn(n=0〜16)に設定する。
ステップSB4では、各処理対象トラックのポインタを1つ進める。ステップSB5では、現在タイミングレジスタcTに「0」を設定して初期化する。ステップSB6では、トラック番号レジスタnに「0」を設定する。
ステップSB7では、現在タイミングレジスタcTに設定されているタイミング値(Tick)とトラックタイミングレジスタnに設定されているタイミング値(Tick)とを比較する。現在タイミングレジスタcTに設定されているタイミング値(Tick)とトラックタイミングレジスタnに設定されているタイミング値(Tick)とが等しい場合は、YESの矢印で示すステップSB13に進み、等しくない場合は、NOの矢印で示すステップSB8に進む。
ステップSB8では、トラック番号レジスタnに設定されている値が「16」より下か否かを判断する。なお、本実施例では、1トラックのテンポトラック0と16トラックの演奏用トラック1〜16を有することを前提としており、現在設定されているトラック番号レジスタnの値が「16」以上であれば、現在タイミングcTにおける全トラックについての処理が終了したと考えられるので、トラック番号レジスタnに設定されている値が「16」より下か否かを判断している。なお、この値は、演奏データPDに含まれる全トラック数と同一に設定するものであり、例えば、演奏データPDに含まれるトラック数が「9」であれば、ここでの値も「8」となる。「16」より下である場合は、YESの矢印で示すステップSB9に進み、「16」以上である場合は、NOの矢印で示すステップSB10に進む。
ステップSB9では、トラック番号レジスタnの値に「1」を加算して、その後、ステップSB7に進む。これにより、次回のステップSB7以降の処理での処理対象が、次のトラック番号のトラックとなる。
ステップSB10では、処理対象トラックの末尾に達したか否かを判断する。末尾に達した場合は、YESの矢印で示すステップSB11に進み、図4のステップSA5に進む。末尾に達していない場合は、NOの矢印で示すステップSB12に進み、現在タイミングレジスタcTの値に「1」を加算して(現在タイミングcTを1Tick進めて)、ステップSB6に進む。
ステップSB13では、トラック番号がnのトラック(トラックn)のポインタ位置のデータを読み出し、ステップSB14で、該読み出したデータがタイミングデータTDであるか否かを判断する。タイミングデータTDである場合は、YESの矢印で示すステップSB15に進み、それ以外のデータ(イベントデータ)である場合は、NOの矢印で示すステップSB16に進む。
ステップSB15では、トラックタイミングレジスタnにステップSB13で読み出したタイミングデータTDの値(Tick)を設定する。その後、ステップSB24に進む。
ステップSB16では、ステップSB13で読み出したデータが、ノートイベントEV又はその他の鍵駆動用トラックに必要なイベントEV(オールノートオフ、オールサウンドオフ等)か否かを判断する。ノートイベント又はその他の鍵駆動用トラックに必要なイベントEVである場合は、YESの矢印で示すステップSB17に進み、それ以外の場合は、NOの矢印で示すステップSB20に進む。
ステップSB17では、後述する図6のタイミング差dT算出処理を行う。タイミング差dTは、上述したように、鍵駆動用イベントMVを対応する演奏用イベント(ノートイベント)EVの再生よりも所定時間(50msec)程度先行して再生するためのタイミング差であり、現在設定されているテンポ及びテンポチェンジのタイミング等により異なるので、この処理で算出する。その後、ステップSB18に進む。
ステップSB18では、現在タイミングレジスタcTの値から、ステップSB17で算出したタイミング差dTの値を減算することにより、ステップSB13で読み出されたノートイベントEV等に対応する鍵駆動用イベントMVの再生タイミングである駆動タイミングmTを算出する。
ステップSB19では、ステップSB18で算出した駆動タイミングmTをタイミングデータTDとし、ステップSB13で読み込んだイベントデータEVを駆動用イベントMVとし、ステップSB17で算出したタイミング差dTとともに、駆動用トラックnに書き込む。その後、ステップSB24に進む。なお、ステップSB13で読み込んだイベントデータEVは、同一内容を保持したまま駆動用イベントMVとしてもよい、音高、ゲートタイム等の必要なパラメータだけを用いて、駆動用イベントMVとしてもよい。
ステップSB20では、ステップSB13で読み出したイベントデータが、テンポイベントTPであるか否かを判断する。テンポイベントTPである場合には、YESの矢印で示すステップSB21に進む。それ以外のイベント(例えば、システムエクスクルーシブや、プログラムチェンジ等)である場合には、駆動用データには関係しないので、NOの矢印で示すステップSB24に進む。
ステップSB21では、前回テンポレジスタに、現在設定されている(現在テンポレジスタに設定されている)テンポを設定する。なお、現在テンポレジスタには、この鍵駆動用データ作成処理が起動される前にユーザにより設定されたテンポまたは、電子鍵盤装置1における初期設定値が設定されているものとする。
ステップSB22では、現在タイミングレジスタcTの値を、前回テンポチェンジタイミングレジスタに設定し、ステップSB23では、ステップSB13で読み出したテンポイベントTPの値を現在テンポレジスタに設定する。その後、ステップSB24に進む。
ステップSB24では、トラックnのポインタを1つ進める。その後、ステップSB7に戻り以降の処理を繰り返す。
以上のように、本実施例では、図4のステップSA4で、ステップSA6以降に実行される演奏データPDの再生処理に先立ち、当該演奏データPDから、事前にタイミング調整された鍵駆動用データMDを作成する。従って、ステップSA6以降の再生処理では、特に演奏用イベントと鍵駆動用イベントの間でタイミング調整をする必要がない。よって、再生処理が複雑となることを回避することが可能であり、既存の電子楽器で採用されている再生処理にあまり手を入れずに、鍵駆動装置付の電子鍵盤楽器を開発・製造することができる。
図6は、図5のステップSB17で実行するタイミング差dT算出処理を表すフローチャートである。図7は、図6に示すタイミング差dT算出処理を説明するための概念図である。
タイミング差dTは、上述したように、鍵駆動機構225(図2)を駆動し始めてから、実際に鍵220が駆動されて押下された状態となるまでの所定時間(本実施例では、50msec)をタイミング値(Tick数)に換算した値である。所定時間(50msec)分のTick数は、演奏テンポに応じて変化する。
ステップSB171では、タイミング差dT算出処理を開始し、ステップSB172では、「60×1000/現在設定されている分解能」の値をレジスタtmpに設定する。なお、本実施例では、分解能を「1920」としているので、この値は、「31.25」となる。
ステップSB173では、「所定時間(本実施例では、50msec)×現在テンポレジスタの値/レジスタtpmの値」をタイミング差dTとする。これにより、単一テンポにおける所定時間分のTick数を算出することができる。例えば、分解能を「1920」、所定時間を「50msec」、現在テンポを「120」とした場合、「50×120/31.25」となり、タイミング差dTは、「192Tick」となる。
ステップSB174では、図5のステップSB22で設定した前回テンポチェンジレジスタの値が、現在タイミングレジスタcTの値からステップSB173で算出したタイミング差dTを減算したもの(cT−dT)以上か否かを判断する。
ステップSB174において、前回テンポチェンジレジスタの値が、「cT−dT」より下である場合は、例えば、図7に示す演奏用イベントEV1に対応する鍵駆動用イベントMV1が、前回のテンポチェンジイベントTP1よりも後にあるということなので、演奏用イベントEV1と鍵駆動用イベントMV1との間にはテンポチェンジがなかったことがわかる。よって、この場合は、NOの矢印で示すステップSB177に進み、ステップSB173で算出したタイミング差dTをそのまま使用する。その後、図5のステップSB18に戻る。
ステップSB174において、前回テンポチェンジレジスタの値が、「cT−dT」以上である場合は、例えば、図7に示す演奏用イベントEV2とそれに対応する鍵駆動用イベントMV2との間に、前回のテンポチェンジイベントTP2があるということなので、イベントMV2及びイベントEV2間の所定時間(50msec)に対応するタイミング(Tick数)を再計算する必要がある。よって、この場合は、YESの矢印で示すステップSB175に進み、タイミング差dTを変更前後の二つのテンポ値に基づいて再計算する。
ステップSB175では、レジスタXmsecに現在タイミングレジスタcTの値から、図5のステップSB22で設定した前回テンポチェンジレジスタの値を減算したものを設定する。これにより、図7に示すXmsecのタイミング(Tick数)を算出する。
ステップSB176では、「Xmsec+(50−Xmsec・tpm/現在テンポレジスタの値)×前回テンポレジスタの値/tpm」の値をタイミング差dtの値とする。具体的には、例えば、分解能を「1920」、所定時間を「50msec」、前回テンポ(TP1)を「120」、現在テンポ(TP2)を「100」とした場合に、図7のイベントTP2とイベントEV2のタイミング差Xmsecが「100Tick」とすると、「100+(50−100×31.25/100)×120/31.25」となり、タイミング差dTは、「172Tick」となる。その後、ステップSB177に進み、図5のステップSB18に戻る。
このようにして、タイミング差dTを求めることにより、つねに、設定されているテンポに即したタイミング差dTを設定することができる。また、駆動用イベントMV及び演奏用イベントEV間の所定時間(50msec)内にテンポチェンジがあったとしても、駆動用イベントMV及び演奏用イベントEV間に所定時間分のTick数のタイミング差dTを設定することができる。
図8は、図4のステップSA6で実行する再生開始処理を表すフローチャートである。再生開始処理では、図4のステップSA2で設定した再生モードのうち、通常スタート又はクイックスタートの設定に従い、ステップSA3で選択された演奏データPDの再生を開始する。
ステップSC1で、再生開始処理を開始し、ステップSC2では、再生モード(スタートモード)がクイックスタートか否かを判断する。これは、図4のステップSA2で設定した再生モード(スタートモード)のフラグを参照することにより判断する。再生モード(スタートモード)がクイックスタートである場合は、YESの矢印で示すステップSC3に進む。再生モードが、通常スタートである場合は、NOの矢印で示すステップSC7に進み、通常速度で再生を開始する。
ステップSC3では、鍵駆動がオンであるかどうかを判断する。これは、図4のステップSA2で設定した再生モード(鍵駆動モード)のフラグを参照することにより判断する。再生モード(鍵駆動モード)が鍵駆動オンである場合は、YESの矢印で示すステップSC4に進む。再生モードが、鍵駆動オフである場合は、NOの矢印で示すステップSC6に進む。
ステップSC4では、図4のステップSA3で選択された演奏データPDの全演奏用トラックPTDと鍵駆動用データMDのうち駆動対象として選択された演奏用トラックPTDに対応する駆動用トラックMTDとの中でデータ先頭から最も先に現れるノートイベント(演奏用イベントEV又は駆動用イベントMV)を検出する。その後、ステップSC5に進む。
ステップSC5では、図4のステップSA3で選択された演奏データPDの全演奏用トラックPTDと鍵駆動用データMDのうち駆動対象として選択された演奏用トラックPTDに対応する駆動用トラックMTDをデータの先頭からステップSC4で検出したノートイベントまで高速再生する。その後、ステップSC8に進む。
なお、通常の演奏データPDでは、データの先頭から1又は2小節分程度に初期設定を行うためのイベント等が記録されている。本実施例における高速再生とは、その1又は2小節分程度のデータを設定テンポや、各イベントの再生タイミングに関係なく、イベントをできるだけ高速に再生することである。
例えば、電子鍵盤楽器1では、少なくとも、1タイミング(1Tick)間に、テンポトラックを含めて17トラック分のイベントを読み出して再生することができ、また、1タイミングで1トラック内に複数のイベントを再生することが可能である。そこから単純計算しても、この高速再生では、分解能が1920の場合は、4分音符の1920分の1の時間に1ないし複数のイベントを高速再生することができる。いいかえると、四分音符1つ分の時間で1920以上のイベントを高速再生することができる。
ステップSC6では、図4のステップSA3で選択された演奏データPDの全演奏用トラックPTDの中でデータ先頭から最も先に現れるノートイベント(演奏用イベントEV)を検出する。このステップSC5では、鍵駆動がオフになっているので、鍵駆動用データMD内を検索する必要はない。その後、ステップSC7に進む。
ステップSC7では、図4のステップSA3で選択された演奏データPDの全演奏用トラックPTDをデータの先頭からステップSC6で検出したノートイベントまで高速再生する。その後、ステップSC8に進む。
ステップSC8では、通常速度での再生を開始する。通常速度での再生とは、設定テンポに従った再生である。その後、ステップSC9に進み、再生開始処理を終了する。
図9は、図8に示す再生開始処理を説明するための概念図である。図9を参照して、再生開始処理を具体的に説明する。
例えば、図9(A)に示すように、ある演奏データPD中の演奏用トラック1〜4が再生対象として選択されており、演奏用トラック1及び2が鍵駆動対象として選択されていて、それらの駆動対象トラックに対応する駆動用トラック1及び2が再生されるとする。その場合に、鍵駆動がオンであるときは、演奏用トラック1〜4及び駆動用トラック1〜2の中での最先ノートイベントが検出されるので、駆動用イベントMV1が、ステップSC4で検出されることとなる。そして、駆動用イベントMV1までが、ステップSC5で高速再生され、それ以降のイベントについては、ステップSC8で通常速度での再生が開始される。また、鍵駆動がオフである場合は、演奏用トラック1〜4のみが、最先ノートイベントの検出対象となるので、演奏イベントEV1がステップSC6で検出され、当該イベントEV1までが、ステップSC7で高速再生される。それ以降のイベントについては、ステップSC8で通常速度での再生が開始される。
また、例えば、図9(B)に示すように、ある演奏データPD中の演奏用トラック1〜4が再生対象として選択されており、演奏用トラック1及び2が鍵駆動対象として選択されていて、それらの駆動対象トラックに対応する駆動用トラック1及び2が再生されるとする。図9(B)に示す演奏データPDでは、演奏用イベントEV4が全演奏用トラック及び駆動用トラックを通しての最先ノートイベントであるので、鍵駆動のオン・オフにかかわりなく常に、演奏用イベントEV4までが高速再生される。なお、演奏用トラック4が駆動対象トラックとして選択された場合は、演奏用イベントEV4に対応する駆動用イベントが再生ノートイベントとなるので、当該駆動用イベントまでが高速再生されることとなる。
以上のように、本発明の実施例では、図4のステップSA4で、ステップSA6以降に実行される演奏データPDの再生処理に先立ち、当該演奏データPDから、事前にタイミング調整された鍵駆動用データMDを作成する。従って、ステップSA6以降の再生処理では、特に演奏用イベントと鍵駆動用イベントの間でタイミング調整をする必要がない。よって、鍵駆動オンでクイックスタートを行う場合でも、鍵駆動用データMDと演奏データPDの双方を検索して、一番先頭にあるノートイベントを検出し、該検出したノートイベントまでを高速再生するだけなので、非常に簡単にクイックスタートの処理を行うことができる。
なお、従来の方式の鍵駆動では、鍵駆動用データMDが予め作成されていないので、演奏データの最先ノートイベントを検出した後に、タイミング調整を行って、検出した演奏用ノートイベントに対応する鍵駆動用ノートイベントの再生タイミングを算出し、該算出した再生タイミングまでを高速再生する必要があり、クイックスタート時に処理が複雑となる。
また、このように構成することにより、本実施例によれば、クイックスタートを行う場合でも、最初の演奏イベントから確実に鍵を駆動することができる。また、最初の演奏イベントが鍵駆動に使われない場合であっても、すばやく再生を開始することができる。
図10は、図4のステップSA10で実行する一時停止直前の鍵駆動イベント処理を表すフローチャートである。この処理は、図4のステップSA8で一時停止した位置よりも後ろに演奏用イベントEVがあり、該一時停止位置よりも前に該演奏用イベントEVに対応する鍵駆動用イベントMVがある場合等に鍵駆動用イベントMVが確実に再生されるようにするための処理である。
ステップSD1で、一時停止直前の鍵駆動イベント処理を開始し、ステップSD2では、図4のステップSA3で選択された演奏データPDのうち駆動対象として選択された演奏用トラックPTDに対応する駆動用トラックMTD(以下、単に駆動対象駆動用トラックMTDと呼ぶ)のポインタ位置の1つ前の駆動用イベントMVを読み出す。なお、駆動対象駆動用トラックMTDが複数ある場合は、ステップSD2〜SD6の処理において、各駆動対象駆動用トラックについて処理を行う。
ステップSD3では、ステップSD2又はステップSD5で読み出したイベントMVのタイミングにタイミング差dTを加算したものが現在のタイミングcT以上か否かを判断する。ステップSD2又はステップSD5で読み出したイベントMVのタイミングにタイミング差dTを加算したものが現在のタイミング以上である場合は、ステップSD2又はステップSD5で読み出したイベントMVに対応する演奏イベントEVが現在タイミングcT以降に存在するので、そのまま現在タイミングcTから再生を再開すると、該読み出したイベントMVに対応する演奏イベントEVについては、鍵駆動イベントMVが再生されず、鍵駆動がされなくなってしまう。そこで、この場合は、再生を再開するタイミングを変更するために、YESの矢印で示すステップSD4に進み、戻しタイミングレジスタにステップSD2又はステップSD5で読み出したイベントMVのタイミングを設定し、その後、ステップSD5に進む。なお、ステップSD5で読み出したイベントMVを戻しタイミングレジスタに設定する場合は、以前に設定した戻しタイミングレジスタの値に上書きする。
ステップSD3において、ステップSD2又はステップSD5で読み出したイベントMVのタイミングにタイミング差dTを加算したものが現在のタイミングcT以上ではない場合は、当該読み出したイベントMVに対応する演奏イベントEVについては、そのまま再生を再開しても問題はないので、NOの矢印で示すステップSD6に進む。
ステップSD5では、ステップSD2で読み出したイベントMVよりもさらに1つ前のイベントMVを読み出す。これは、現在タイミングcT以降に再生される演奏イベントEVに対応する駆動用イベントMVがステップSD2で読み出したイベントMVの1つだけとは限らないので、読み出したイベントMVのタイミングにタイミング差dTを加算したものが現在のタイミング未満となるまで、繰り返し確認するための処理である。よって、イベントMVの読み出し後、ステップSD3に戻り、ステップSD5で読み出したイベントMVのタイミングにタイミング差dTを加算したものが現在のタイミングcT以上か否かを判断する。
ステップSD6では、戻し再生の必要があるか否かを判断する。ここでは、ステップSD4で設定した戻しタイミングレジスタに戻しタイミング(ステップSD2又はステップSD5で読み出されたイベントMVのタイミング)が設定されているか否かで判断する。戻しタイミングが設定されている場合は、戻し再生の必要があるので、YESの矢印で示すステップSD7に進み、戻しタイミングが設定されていない場合は、戻し再生の必要がないので、NOの矢印で示すステップSD8に進み、図4のステップSA11に戻る。
ステップSD7では、戻しタイミングレジスタに設定されたタイミングから現在タイミングctまでの間の駆動用トラックのみを再生する。その後、ステップSD8に進み、図4のステップSA11に戻る。このように、駆動用トラックのみを再生することにより、図4のステップSA11で再生される現在タイミングcT以降の演奏イベントEVに対応する駆動用イベントMVであって現在タイミングcTよりも前のものを、選択的に再生することができる。したがって、現在タイミングcT以降に再生される演奏イベントEVに対応する駆動用イベントMVが現在タイミングcTよりも前にある場合でも、当該演奏イベントEVについて確実に鍵駆動を行うことができる。
以上の、本実施例の一時停止直前の鍵駆動イベント処理によれば、再生の一時停止位置の後ろで再生される演奏用イベントEVに対応する鍵駆動用イベントMVが、該一時停止位置より前に存在するか否かを判定し、対応する鍵駆動用イベントMVが存在する場合には、該鍵駆動用イベントMVに基づいて鍵を駆動するようにしたので、一時停止後の再生再開時にも、最初の演奏イベントから鍵を確実に駆動することができる。また、対応する鍵駆動用イベントMVが存在しない場合には、直ちに一時停止位置から再生を再開するので、無駄な時間の遅れを防止することができる。
図11は、図10に示す一時停止直前の鍵駆動イベント処理を説明するための概念図である。
図11(A)は、戻し再生ありの場合を表す。この演奏データPDの再生は、現在タイミングcT1で一時停止されている状態であり、駆動用トラックのポインタP1は、駆動用イベントMV3に位置している。なお、図中駆動用イベントMV1〜MV3は、それぞれ演奏用イベントEV1〜EV3に対応する。
この状態で、図10に示す一時停止直前の鍵駆動イベント処理が実行されると、ステップSD2において、現在ポインタP1のあるイベントMV3の1つ前のイベントMV2が読み出される。このイベントMV2にタイミング差dTを加算した値(Tick数)は、イベントEV2の位置となるが、これは、現在タイミングcT1の位置よりも後に来る(現在タイミングcT1よりも該加算した値のTick数のほうが大きい)、すなわち、現在タイミングcT1とイベントMV2のタイミングの間隔(図中の期間RT1)がタイミング差dTよりも短いので、ステップSD4に進み、イベントMV2のタイミングが戻しタイミングレジスタに設定される。その後、ステップSD5においてさらに1つ前のイベントMV1が読み出されるが、現在タイミングcT1とイベントMV1のタイミングの間隔(図中の期間RT2)がタイミング差dTよりも長いので、この後は、ステップSD6に進む。その後、ステップSD7で、イベントMV2から駆動用トラックの再生が行われ、図4のステップSA11で現在タイミングcT1以降の再生が再開される。
図11(B)は、図11(A)に示したものと同様の演奏データPDを用いて、戻し再生なしの場合を表す。この演奏データPDの再生は、現在タイミングcT2で一時停止されている状態であり、駆動用トラックのポインタP1は、駆動用イベントMV3に位置している。なお、図中駆動用イベントMV1〜MV3は、それぞれ演奏用イベントEV1〜EV3に対応する。
この状態で、図10に示す一時停止直前の鍵駆動イベント処理が実行されると、ステップSD2において、現在ポインタP1のあるイベントMV3の1つ前のイベントMV2が読み出される。このイベントMV2にタイミング差dTを加算した値(Tick数)は、イベントEV2の位置となるが、これは、現在タイミングcT1の位置よりも前に来る(現在タイミングcT1よりも該加算した値のTick数のほうが小さい)、すなわち、現在タイミングcT2とイベントMV2のタイミングの間隔(図中の期間RT1)がタイミング差dTよりも長いので、戻しタイミングレジスタの設定は行わずに、ステップSD6に進む。戻しタイミングレジスタの設定が行われなかったので、ステップSD8で処理を終了して、図4のステップSA11で現在タイミングcT2以降の再生が再開される。なお、この場合は、駆動イベントMV1は読み出されない。
なお、上述の実施例では、演奏データPDに基づいて作成した駆動用トラックMTDをまとめて駆動用データTDとして記録したが、作成した駆動用トラックMTDを演奏データPDのトラックとして演奏用トラックPTDと合わせて記録するようにしてもよい。
以上実施例に沿って本発明を説明したが、本発明はこれらに制限されるものではない。例えば、種々の変更、改良、組み合わせ等が可能なことは当業者に自明であろう。
1…電子鍵盤楽器、2…サーバ、3…通信ネットワーク、6…バス、7…RAM、8…ROM、9…CPU、10…タイマ、11…検出回路、12…設定操作子、13…表示回路、14…ディスプレイ、15…外部記憶装置、18…音源回路、19…効果回路、20…サウンドシステム、21…通信I/F、22…鍵盤、23…鍵駆動回路、220…鍵、221…鍵支点、222…ハンマー、223…係合部、224…ハンマー支点、225…鍵駆動機構