以下、本発明に係る楽音生成装置、楽音生成方法、楽音生成プログラム及び電子楽器を実施するための形態について、図面を参照しながら詳しく説明する。
<電子楽器>
図1は、本発明に係る楽音生成装置を適用した電子楽器の一実施形態を示す外観図である。ここでは、本発明に係る電子楽器の一実施形態として、波形読み出し方式の電子鍵盤楽器を示して説明する。
本実施形態に係る電子鍵盤楽器100は、例えば図1に示すように、楽器本体の一面側に、演奏操作子としての複数の鍵からなる鍵盤(入力手段)102と、波形選択操作子としての音色選択を行うための音色選択ボタン(入力手段)104、及び、音色以外の各種機能選択を行うための機能選択ボタン106からなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション(演奏効果)を付加するためのベンダ/モジュレーション・ホイール108と、音色やその他の各種設定情報を表示するLCD(Liquid Crystal Display:液晶ディスプレイ)110等の表示部と、を備えている。また、電子鍵盤楽器100は、図示を省略したが、演奏により生成された楽音を出力するスピーカ(出力手段)を、例えば楽器本体の裏面部、側面部、又は背面部等に備えている。
このような電子鍵盤楽器100において、音色選択ボタン104は、例えば図1に示すように、ピアノ(図中「Piano」)、エレクトリックピアノ(図中「E.Piano」)、オルガン(図中「Organ」)、ギター(図中「Guitar」)、サクソフォン(図中「Saxophone」)、ストリング(図中「Strings」)、シンセ(図中「Synth1」、「Synth2」)、ドラム(図中「Drums1」、「Drums2」)等の各種の音色のカテゴリを選択するための波形選択操作子としてのボタンである。ここで、図1においては16種類の音色のカテゴリを示した。電子鍵盤楽器100の演奏者(ユーザ)は、任意の音色選択ボタン104を押下することにより、上記の16種類の音色の中から任意の音色のカテゴリを選択して演奏することができる。
図2は、本実施形態に係る電子鍵盤楽器のハードウェアの構成例を示すブロック図である。図3は、本実施形態に適用される音源LSIの内部構造の例を示すブロック図である。
電子鍵盤楽器100は、例えば図2に示すように、CPU(中央演算処理装置)202と、音源LSI(大規模集積回路)204と、DMA(Direct Memory Access)コントローラ214と、I/O(入出力)コントローラ216とが、それぞれシステムバス226に直接接続された構成を備えている。また、電子鍵盤楽器100は、アクセス速度が高速(第2の読み出し速度)で低容量(第2の記憶容量)のRAM(ランダムアクセスメモリ)208がメモリコントローラ206を介して、また、アクセス速度が低速(第1の読み出し速度)で大容量(第1の記憶容量)のフラッシュ(Flash)メモリ212がフラッシュメモリコントローラ210を介して、それぞれシステムバス226に接続された構成を備えている。また、電子鍵盤楽器100は、図1に示したLCD110がLCDコントローラ218を介して、また、図1に示した鍵盤102と、音色選択ボタン104及び機能選択ボタン106からなるスイッチ・パネルとがキー・スキャナ220を介して、さらに、図1に示したベンダ/モジュレーション・ホイール108がA/Dコンバータ(アナログ・デジタル変換回路)222を介して、それぞれI/Oコントローラ216に接続され、これらの構成がI/Oコントローラ216を介してシステムバス226に接続された構成を備えている。また、システムバス226はバスコントローラ224に接続され、システムバス226を介して上記の各構成間で送受信される信号やデータがバスコントローラ224により制御される。また、音源LSI204には、D/Aコンバータ(デジタル・アナログ変換回路)228及びアンプ230が接続され、音源LSI204から出力されるデジタル楽音波形データがD/Aコンバータ228によりアナログ楽音波形信号に変換され、さらにアンプ230で増幅された後に、出力端子又は図示を省略したスピーカから出力される。ここで、少なくともCPU(制御手段)202、音源LSI(発音手段)204、RAM(第2の記憶手段)208、大容量のフラッシュメモリ(第1の記憶手段)212は、本発明に係る楽音生成装置を構成する。
このように、電子鍵盤楽器100は、機器全体がバスコントローラ224によって制御されるシステムバス226を中心に構成されている。具体的には、バスコントローラ224はシステムバス226に接続された上記の各構成における信号やデータの送受信時の優先順位を制御する。例えば、電子鍵盤楽器100において、RAM208は、CPU202と音源LSI204によって共有された構成を有しているが、発音を行う音源LSI204は、データの欠落が許されないため、バスコントローラ224により、音源LSI204とRAM208との送受信時の優先度が最も高く設定されており、必要に応じてCPU202によるRAM208へのアクセスが制限される。
上記のような構成において、CPU202は、機器全体の処理を行うメインプロセッサであって、RAM208をワーク領域として使用しながら所定の制御プログラムを実行することにより、電子鍵盤楽器100の制御動作を実行する。
RAM208は、後述する大容量フラッシュメモリ212に比較して、一般にアクセス速度が高速で低容量、且つ、製品価格が高価なメモリデバイスであり、インターフェースであるメモリコントローラ206を介してシステムバス226に接続される。RAM208は、大容量フラッシュメモリ212から転送された波形データや制御プログラム、各種の固定データ等を配置する。特に、RAM208は、後述する音源LSI204において実行される楽音の生成処理に使用される波形データを展開する音源メモリ(又は、波形メモリ)としての機能を有し、発音される楽音の波形データは必ず、RAM208上に配置される。また、RAM208は、CPU202や音源LSI204に内蔵されるDSP(デジタル信号処理回路)306のワーク領域としても使用される。
ここで、RAM208の記憶容量は、大容量フラッシュメモリ212に比較して小さいため、RAM208の記憶内容が逐次入れ替えられるが、所定の条件を満たす(後述するしきい値を超過するデータサイズを有する)波形データについては、演奏中に波形データの転送による変更がなされることのない状態でRAM208に固定的に記憶される。また、他の所定の条件を満たす(後述するしきい値以下のデータサイズを有し、既にRAM208に転送済みの)波形データについては、RAM208内に保存されている波形データが流用される。このように、本実施形態は、RAM208の記憶内容のうち、波形データの管理方法に特徴を有している。
大容量フラッシュメモリ212は、一般にNAND型等のアクセス速度が低速で大容量、且つ、製品価格が安価なメモリデバイスであり、インターフェースであるフラッシュメモリコントローラ210を介してシステムバス226に接続される。大容量フラッシュメモリ212は、音源LSI204において実行される楽音の生成処理に使用される(又は、使用される可能性のある)全ての音色の波形データや、全ての音色のパラメータデータ、CPU202や音源LSI204のDSP306において実行される制御プログラムのプログラムデータ、音楽データや演奏者の設定データ等の各種の固定データを記憶している。ここで、大容量フラッシュメモリ212に記憶された全ての波形データは、圧縮されており、例えば1語長が8ビットに設定されている。大容量フラッシュメモリ212に記憶された波形データ等は、CPU202がシーケンシャルに順次アクセスすることにより読み出されてRAM208に転送される。
なお、本実施形態においては、大容量で安価なメモリデバイスとして、NAND型のフラッシュメモリ(実際には、フラッシュメモリを集積して構成されたSSD;Solid State Drive)を適用した構成を示したが、本発明はこれに限定されるものではない。例えば、大容量で安価なメモリデバイスとして、ハードディスク(HDD)を適用するものであってもよい。ここで、フラッシュメモリやハードディスクは、電子鍵盤楽器100に対して着脱可能(すなわち、差し替え可能)な構成を有しているものであってもよい。また、データの高速転送が可能である場合には、大容量で安価なメモリデバイスとして、特定のネットワーク上やインターネット上(すなわち、クラウド上)のハードディスクを適用するものであってもよい。
LCDコントローラ218は、LCD110の表示状態を制御するIC(集積回路)である。キー・スキャナ220は、鍵盤102や音色選択ボタン104及び機能選択ボタン106等のスイッチ・パネルの状態を走査して、CPU202に通知するICである。A/Dコンバータ222は、ベンダ/モジュレーション・ホイール108の操作位置を検出するICである。これらのLCDコントローラ218やキー・スキャナ220、A/Dコンバータ222は、インターフェースであるI/Oコントローラ216を介してシステムバス226との間でデータや信号の入出力を行う。
音源LSI204は、後述する楽音生成処理を実行する専用のICである。上記の大容量フラッシュメモリ212は、CPU202からはランダムアクセスが不可能であり、音源LSI204からもアクセスが不可能であるため、大容量フラッシュメモリ212に記憶されたデータ等は、ランダムアクセスが可能なRAM208に一旦転送される。音源LSI204は、CPU202からの命令に基づいて、RAM208に転送された波形データについて、対象となる音色の記憶領域から、演奏で指示された鍵の音高に対応する速度で波形データを読み出し、その読み出した波形データに対して演奏で指示されたベロシティの振幅エンベロープを付加し、その結果として得られる波形データを出力楽音波形データとして出力する。
音源LSI204は、例えば図3に示すように、256組の波形読み出し装置(発音手段)304を有する波形発生器302と、DSP306と、ミキサ308と、バスインターフェース310と、を備え、波形発生器302、DSP306及びミキサ308は、バスインターフェース310を介してシステムバス226に接続されて、RAM208へのアクセスや、CPU202との通信が行われる。波形発生器302の各波形読み出し装置304は、RAM208から波形データを読み出して音色の波形を発生させる発振器(オシレータ)であり、DSP306は、音声信号に音響効果をもたらす信号処理回路である。ミキサ308は、波形発生器302からの信号を混合したり、DSP306との間で信号を送受信したりすることにより全体の音声信号の流れを制御して、外部に出力する。すなわち、ミキサ308は、演奏に応じて波形発生器302の各波形読み出し装置304によりRAM208から読み出された波形データに対して、DSP306によりCPU202から供給される楽音パラメータに応じたエンベロープを付加して、出力楽音波形データとして出力する。ミキサ308の出力信号は、図2に示したように、D/Aコンバータ228及びアンプ230を介して所定の信号レベルのアナログ信号として、図示を省略したスピーカやヘッドホン等に出力される。
(波形データの管理手法)
ここで、上述したRAM及び大容量フラッシュメモリに格納される波形データについて詳しく説明する。
図4は、本実施形態に適用される波形データの管理手法を説明する図である。図4(a)は、音色波形スプリットの説明図であり、図4(b)は、音色波形ディレクトリの説明図である。
本実施形態においては、演奏者が電子鍵盤楽器100に備えられた音色選択ボタン104を押下することにより、16種類のうちの任意の音色が選択されて演奏が行われる。これにより、鍵域やベロシティによって音量や音高のみならず音色が変化するのを再現するために、大容量フラッシュメモリ212からRAM208に、音高又は音量ごとの音色の波形データが読み込まれる。ここで、各音色は、それぞれ1音色当たり例えば最大32種類の波形から構成され、その波形データは大容量フラッシュメモリ212に記憶されている。一つの音色に対して、音高又は音量ごとに波形データを管理する手法としては、図4(a)に示すように、鍵盤102上で演奏者が演奏する鍵域(図中、横軸の「Key」)ごとにそれぞれ波形データを割り当て、また、同じ鍵域であっても押鍵時の速さ(演奏の強さ)を示すベロシティ(図中、縦軸の「Velocity」)ごとにそれぞれ波形データを割り当てる音色波形スプリット構造による管理手法が適用される。すなわち、音色波形スプリット構造を用いた波形データの管理手法においては、1音色の音域とベロシティ域を2次元的に分割し、それぞれのスプリット(分割)エリアに最大32個の波形が割り当てられている。この管理手法によれば、押鍵時の速さ(ベロシティ)と鍵番号(鍵域)の2つのファクターから読み出すべき波形が1つだけ決定される。
そして、RAM208や大容量フラッシュメモリ212に記憶される波形データは、テーブル形式を有する音色波形ディレクトリ情報に基づいて管理される。音色波形ディレクトリ情報は、大容量フラッシュメモリ212に記憶され、例えば電子鍵盤楽器100の起動時に、CPU202により大容量フラッシュメモリ212から読み出されてRAM208に転送される。或る音色の楽音を演奏する際には、CPU202がRAM208からその音色に対応する音色波形ディレクトリ情報のデータを読み出して参照する。
ここで、音色波形ディレクトリ情報のテーブルには、例えば図4(b)に示すように、1つの「音色番号」の音色に含まれる各波形データごとに、その波形データの「波形番号」と、その波形データが発音されるべき鍵域及びベロシティの範囲を示す「最小ベロシティ」、「最大ベロシティ」、「最低キー番号」及び「最高キー番号」と、RAM208に転送された当該音色の記憶領域(波形領域)の先頭からのアドレスを示す「波形領域先頭からのアドレス」と、その波形データのデータサイズを示す「波形サイズ」との各項目値が登録されている。すなわち、音色波形ディレクトリ情報においては、各音色の各波形データについて、上記の音色波形スプリット構造においてどのような条件で分割されているかという鍵域及びベロシティ域情報と、実際に大容量フラッシュメモリ212の中でどのアドレスに配置されていて、波形サイズはどれだけかという情報とが、テーブル形式で規定されている。
(RAM及び大容量フラッシュメモリ上の情報)
次に、本実施形態に係る電子鍵盤楽器に適用されるRAM及び大容量フラッシュメモリ上の情報とその転送処理について、図面を参照して説明する。
図5は、本実施形態に適用されるRAM及び大容量フラッシュメモリ上の情報とその転送処理の概要を説明する図である。図6は、本実施形態に適用されるRAMのスタティック波形領域及びダイナミック波形領域を説明する図である。図6(a)は、スタティック波形領域(第1の記憶領域)のディレクトリの内容を示す図であり、図6(b)は、ダイナミック波形領域である波形読み出し装置バッファ領域(第2の記憶領域)のディレクトリの内容を示す図である。
RAM208上には、図5左方の「RAM上の情報」に示すように、音色波形ディレクトリ、音色パラメータ、CPUプログラム、CPUデータ、CPUワーク、DSPプログラム、DSPデータ、DSPワークの各種データが展開される。また、大容量フラッシュメモリ212上には、図5右方の「大容量フラッシュメモリ上の情報」に示すように、音色波形ディレクトリ、音色パラメータ領域、CPUプログラム、CPUデータ、DSPプログラム、DSPデータの各種データが展開される。
ここで、電子鍵盤楽器100の演奏に伴って、音源LSI204が波形読み出し動作を実行する際には、読み出す波形データがRAM208上に配置されている必要があるため、例えば電子鍵盤楽器100の起動時に、大容量フラッシュメモリ212からRAM208に、図4(b)に示した音色波形ディレクトリ情報、音色パラメータ、CPUプログラム、CPUデータ、DSPプログラム、DSPデータが転送される。
また、電子鍵盤楽器100の演奏時には、音源LSI204による波形読み出し動作の対象となる波形データもRAM208に転送されている必要があるが、RAM208は、大容量フラッシュメモリ212に比較して記憶容量が小さいため、大容量フラッシュメモリ212に記憶されている全ての音色の波形データをRAM208上に配置することができない。
本実施形態においては、基本的には演奏により発音する際に大容量フラッシュメモリ212から必要な波形データの読み出しを行い、RAM208上の波形読み出し装置304ごとに割り当てられた波形バッファに転送して一時保存し、音源LSI204により読み出し再生を行う。ここで、データサイズが大きい波形データの場合には、大容量フラッシュメモリ212からRAM208への転送に時間がかかって発音の反応が遅延してしまい、演奏に支障を来す場合がある。そこで、本実施形態においては、大容量フラッシュメモリ212に記憶されている波形データのうち、所定のしきい値を超過するデータサイズを有する波形データについては電子鍵盤楽器100の演奏の開始に先立つ任意のタイミング、例えば起動時(電源投入時)に予め全てRAM208に転送しておく。本実施形態においては、波形データの転送処理の判断基準となるデータサイズを規定するしきい値として例えば64Kバイトに設定する。このようなしきい値の設定によれば、例えばピアノやシンバル等の楽器の音色波形は、データサイズがしきい値よりも大きいため、起動時にRAM208に転送される。
一方、例えばギター等の楽器の音色波形のように、データサイズがしきい値(64Kバイト)以下の低容量の波形データの場合には、演奏に伴う押鍵時にその都度大容量フラッシュメモリ212からRAM208に転送を行う。ここで、演奏時に大容量フラッシュメモリ212から転送される波形データは、複数の波形読み出し装置304に対応して設定されたRAM208上の複数の波形バッファのうち、いずれの波形読み出し装置304からも使用されていない波形バッファが選択されて上書き保存される。或いは、波形読み出し装置304により使用されている数や使用頻度が低い波形バッファから優先的に選択されて、転送される波形データが上書き保存される。このような大容量フラッシュメモリ212から波形バッファへの波形データの転送時の管理は、RAM208の各波形バッファに保存されている波形データが、いずれの波形読み出し装置304による発音のために使用中であるか否かを、逐次更新しながら(リアルタイムに)管理する管理情報に基づいて実行される。
上記の波形データの転送処理に適用されるしきい値は、例えば演奏時のCPU202の処理負担や遅延時間等に基づいて設定される。具体的には、電子鍵盤楽器100の演奏においては、一般に押鍵時から楽音の発音までの合計遅延時間が概ね10msecを超過すると、演奏者は押鍵に対する発音までの反応が遅いと認識する傾向が高いため、CPU202の処理性能や周辺回路における信号遅延等を加味して、各音色波形データの転送処理に許容される遅延時間を算出する。そして、この一定の許容遅延時間内に転送処理が完了するとともに、RAM208の記憶容量を極力小さくすることができる音色波形のデータサイズをしきい値として設定する。このような条件に基づいて、発明者らが算出したしきい値の一例が、64Kバイトである。
なお、本実施形態においては、音色波形のデータサイズについて、しきい値を設定した場合について説明したが、本発明はこれに限定されるものではなく、例えば、音色波形を規定する音高やベロシティについて、上記と同様の概念に基づいて、しきい値を設定するものであってもよい。
また、本実施形態においては、演奏時のCPU202の処理負担を軽減し、処理時間を削減するために、上記のデータサイズがしきい値以下の波形データの転送処理に先立って、演奏で指示された楽音の波形データが予めRAM208上に転送されて存在しているか否かを調査(検索)する。該当する波形データが既にRAM208上に存在する場合には、CPU202は大容量フラッシュメモリ212からの波形データの転送を行わず、RAM208内で当該波形データを流用する。この波形データの流用方法については、詳しく後述する。
本実施形態においては、これらの処理により、上記のしきい値を超過する全ての波形データを記憶できる容量に、しきい値以下の波形データを一時保存する波形バッファの記憶容量を加算した程度の記憶容量を有するRAM208を適用すればよいことになる。なお、本願発明者らの検証によれば、本実施形態を適用することにより、RAMに使用される記憶容量を、従前の1/4〜1/5程度に圧縮することができる可能性があることを確認した。
図6(a)に示す「スタティック波形ディレクトリ」は、図5に示した「RAM上の情報」において、上記の波形データの転送処理に適用されるしきい値(64Kバイト)を超過する波形データが格納されるRAM208のスタティック波形領域のディレクトリの内容を示すものである。このスタティック波形ディレクトリは、図5に示すように、電子鍵盤楽器100の起動時に大容量フラッシュメモリ212の音色波形ディレクトリからしきい値(64Kバイト)を超過する全ての波形データがスタティック波形領域の各領域(記憶領域)に転送され、その際にCPU202のワーク領域(CPUワーク)内に作成される。スタティック波形ディレクトリの内容は、電子鍵盤楽器100の起動後、固定的に記憶されて変更されることはない。
スタティック波形ディレクトリの内容は、図6(a)に示すように、大容量フラッシュメモリ212から転送された波形データ(スタティック波形1、2、・・・N)ごとに、当該波形の属する音色番号、音色内波形番号、当該波形が配置されたスタティック波形領域からの先頭アドレス、波形サイズが格納されている。ここで、大容量フラッシュメモリ212から転送されるスタティック波形の数や、波形データ全体の容量は、上記のしきい値に基づいて予め決定されているので、それに対応させてRAM208上のスタティック波形領域と、スタティック波形ディレクトリの各領域が固定的に割り当てられている。
図6(b)に示す「波形読み出し装置バッファディレクトリ」は、図5に示した「RAM上の情報」において、上記の波形データの転送処理に適用されるしきい値(64Kバイト)以下の波形データが格納されるRAM208のダイナミック波形領域のディレクトリの内容を示すものである。この波形読み出し装置バッファディレクトリは、図5に示すように、電子鍵盤楽器100の演奏時に大容量フラッシュメモリ212の音色波形ディレクトリからしきい値(64Kバイト)以下の波形データが波形読み出し装置バッファ領域の各領域(記憶領域)に転送され、CPU202のワーク領域(CPUワーク)内に確保される。波形読み出し装置バッファディレクトリの内容は、演奏に伴って可変的に記憶され、楽音の発音時や消音時に更新される。
波形読み出し装置バッファディレクトリは、波形読み出し装置304ごとに固定長64Kバイトの容量が割り当てられ、256組の波形読み出し装置304に1対1の関係で対応するように波形バッファ1〜256が設定されている。これにより、本実施形態の電子鍵盤楽器100においては、256の同時発音が可能な構成を有している。
波形読み出し装置バッファディレクトリには、図6(b)に示すように、各波形読み出し装置304に対応する波形バッファごとに、当該バッファ番号、リンクフラグ、リンクバッファ番号、転送済みフラグ、アクセス中カウント、音色番号、音色内波形番号、波形サイズが格納されている。リンクフラグは、後述する波形データの流用処理において、自身の波形読み出し装置304に対応する波形バッファが、他の波形読み出し装置304に対応する波形バッファに保存されている波形データを流用しているか否かを示すフラグであり、流用している場合には「1」が設定され、流用していない場合には「0」が設定される。リンクバッファ番号は、自身の波形バッファに流用されている波形データが存在する波形バッファの番号を格納する。ここで、自身の波形バッファを対象にして、波形データを流用するリンクを設定することはできないので、当該波形データが割り当てられた(自身の)波形読み出し装置304に対応する波形バッファに残っている場合にはリンクを設定せずに、当該波形バッファを波形データの読み出し動作にそのまま使用する。
また、転送済みフラグは、流用される波形バッファから実際に波形データの転送が完了しているか否かを示すフラグであり、転送済みであれば「1」が設定される。アクセス中カウントは、波形データが流用される波形バッファにおいて、どれだけの数の波形読み出し装置304からアクセスされているかを示すものであり、発音時にはこのカウントをインクリメントし、読み出しの完了時にデクリメントすることにより、「0」の時に当該波形バッファが未使用であることを示す。音色番号、音色内波形番号、波形サイズは、波形バッファに読み込まれている波形データに固有の情報である。具体的には、例えば図6(b)に示すバッファ番号「2」の波形バッファにおいては、リンクフラグが「1」であり、リンクバッファ番号が「4」であることから、バッファ番号が「4」の波形バッファに保存されている波形データを流用しており、また、転送済みフラグが「1」、アクセス中カウントが「2」であることから、波形バッファ「4」の波形データが実際に読み込まれている状態にあり、当該波形バッファ「4」に対して2個の波形読み出し装置304に対応する波形バッファが現在アクセス中で読み出しを行っている状態であることが示されている。
波形読み出し装置バッファディレクトリに格納されるこれらの情報は、RAM208内の各波形バッファにおける波形データの保存状態や、その波形データの流用状態(すなわち、波形バッファのリンク先設定や使用状態等)を示す情報であって、上述した管理情報に含まれ、逐次更新しながら(リアルタイムに)管理される。
<電子楽器の制御方法>
次に、本実施形態に係る電子鍵盤楽器の制御方法(楽音生成方法)について、図面を参照して詳しく説明する。ここでは、本発明の特徴である楽音生成方法を含む、電子鍵盤楽器の制御方法全体について説明する。また、以下に示す一連の制御処理は、CPU202及び音源LSI204において、RAM208に記憶された所定の制御プログラムを実行することにより実現されるものである。
(RAM上の波形データの流用方法)
まず最初に、本実施形態に係る電子鍵盤楽器100に適用されるRAM208上の波形データの流用方法について説明する。 本実施形態に係る電子鍵盤楽器100において、演奏者による押鍵時には、CPU202は、同時発音数が多い(すなわち、発音チャンネルが多数ある)ため、まず、キーアサイナによって押鍵を割り当てる音源LSI204の波形読み出し装置304を決定する。ここで、キーアサインは発音が停止している波形読み出し装置304から優先的に割り当てられるが、その波形読み出し装置304自体が読み出しを停止している場合であっても、波形読み出し装置304の波形バッファが他の波形読み出し装置304により使用されているような場合には、当該波形読み出し装置304に割り当てを行わず、極力現在の状態を維持する判断を行う。
より具体的には、CPU202は、例えば各波形読み出し装置304をどのような順序で、どのような波形データの読み出しに使用したかを示す履歴情報を逐次更新しながら(リアルタイムに)管理して、当該履歴情報に基づいて、どの波形読み出し装置304からも波形データの読み出し動作に使用されていない波形バッファに対応付けられた波形読み出し装置304や、使用頻度が低い波形読み出し装置304、時間的に古い波形読み出し装置304、或いは、読み出した波形データのデータサイズが小さい波形読み出し装置304から、優先的に割り当てて波形読み出し動作を実行させる。
次いで、CPU202は、押鍵時のベロシティと鍵域に基づいて、図4(a)に示した音色波形のスプリット情報から演奏で指示された楽音の波形番号を特定し、該当する波形データが図5に示したRAM208上の音色波形ディレクトリに存在しているか否かを調査する。ここで、CPU202は、まず、RAM208上の音色波形ディレクトリのスタティック波形領域に、該当する波形データが存在しているか否かを調査し、スタティック波形領域に存在しない場合には、ダイナミック波形領域である波形読み出し装置バッファ領域に存在しているか否かをさらに調査する。
該当する波形データがRAM208上のスタティック波形領域に存在している場合には、CPU202は、当該波形データを後述する発音のための読み出し動作の対象とする。また、該当する波形データがスタティック波形領域に存在せず、波形読み出し装置バッファ領域に存在している場合には、CPU202は、当該波形データを大容量フラッシュメモリ212から読み込まずに、同一のRAM208内で当該バッファ領域をリンク先に設定することにより当該波形データを流用する。
これにより、大容量フラッシュメモリ212からRAM208への転送処理に比較して非常に短い時間で波形データをRAM208上に配置することができる。なお、割り当てられた波形読み出し装置304に対応する波形バッファに既に当該波形データが存在している場合には、波形データを転送する必要はなく、当該波形データが発音のための読み出し動作に使用される。一方、該当する波形データがスタティック波形領域、及び、波形読み出し装置バッファ領域のいずれにも存在していない場合には、CPU202は、大容量フラッシュメモリ212に記憶された該当する波形データをRAM208へ転送する。
そして、指示された楽音の波形データがRAM208上に存在し、割り当てられた波形読み出し装置304に対応する波形バッファの位置が確定した時点で、CPU202は、音源LSI204において発音のための読み出し動作を開始する。
以下、上記の波形データの流用方法を適用した電子鍵盤楽器の制御方法について詳しく説明する。
(メインルーチン)
図7は、本実施形態に係る電子鍵盤楽器の制御方法のメインルーチンを示すフローチャートである。
本実施形態に係る電子鍵盤楽器の制御方法においては、概略、以下のような処理動作が実行される。まず、演奏者により電子鍵盤楽器100の装置電源がパワーオンされると、CPU202は図7に示すメインルーチンを起動し、装置各部を初期化する初期化処理を実行する(ステップS702)。
次いで、初期化処理が完了すると、CPU202は演奏者が音色選択ボタン104等を操作した際のスイッチ処理(ステップS704〜S708)、鍵盤102を弾いた際の押鍵イベントや離鍵イベントを処理する鍵盤処理(ステップS710〜S718)、電子鍵盤楽器100の外部から受信したMIDI(Musical Instrument Digital Interface)メッセージのノートオンイベントやノートオフイベントを処理するMIDI受信処理(ステップS720〜S728)、音源における一定時間ごとの処理を行う音源定期処理(ステップS730)の一連の処理動作を繰り返し実行する。
なお、図7に示したフローチャートにおいては図示を省略したが、CPU202は上述した各処理動作(ステップS702〜S730)の実行中に、演奏モードが終了や中断したり装置電源をパワーオフしたりする状態の変化を検出した場合には、メインルーチンを強制的に終了する。
以下、上述した各処理動作について、具体的に説明する。
(初期化処理)
図8は、本実施形態に係る電子鍵盤楽器の制御方法に適用される初期化処理を示すフローチャートである。
本実施形態に係る電子鍵盤楽器の制御方法に適用される初期化処理においては、図8に示すフローチャートのように、まず、CPU202は、大容量フラッシュメモリ212からCPUプログラム、CPUデータ、DSPプログラム、DSPデータをRAM208に転送した後(ステップS802、S804)、引き続き、大容量フラッシュメモリ212から音色波形ディレクトリ部分をRAM208上の指定したアドレスに転送する(ステップS806)。ここで、音色波形ディレクトリ部分は、図4(b)に示したように、各音色の各波形について、分割条件となる鍵域及びベロシティ域情報と、大容量フラッシュメモリ212内での配置アドレス、波長サイズに関する情報がまとめられたテーブル形式を有している。
次いで、CPU202は、この音色波形ディレクトリから電子鍵盤楽器100の起動時にRAM208に転送すべき、スタティック波形領域部分と図6(a)に示したスタティック波形ディレクトリをRAM208上に構築するスタティック波形領域読み出し処理を実行する(ステップS808)。
次いで、CPU202は、音源LSI204の波形読み出し装置304が波形データの読み出し動作に使用する、図6(b)に示した波形読み出し装置バッファディレクトリ部分をRAM208上に構築するために、各波形読み出し装置304に対応する波形バッファを初期化する波形読み出し装置バッファ初期化処理を実行する(ステップS810)。
次いで、CPU202は、大容量フラッシュメモリ212からピッチやフィルター、音量の設定など発音に必要な音色パラメータをRAM208上に転送する(ステップS812)。
(スタティック波形領域読み出し処理)
図9は、本実施形態に係る電子鍵盤楽器の制御方法の初期化処理に適用されるスタティック波形領域読み出し処理を示すフローチャートである。
上述した初期化処理に適用されるスタティック波形領域読み出し処理においては、図9に示すフローチャートのように、まず、CPU202は、スタティック波形の数を管理するためのカウンタ(B)を「0」に初期化する(ステップS902)。次いで、CPU202は、スタティック波形をRAM208上に転送する際のアドレス情報として、スタティック波形を配置すべき先頭アドレスを設定して初期化する(ステップS904)。
次いで、CPU202は、音色波形ディレクトリテーブルの先頭から順に、波形サイズを確認し、予め設定されたしきい値(64Kバイト)を超過する波形サイズを有するスタティック波形か否かの判断を行う(ステップS908)。波形サイズがしきい値(64Kバイト)を超過する場合には、CPU202は、当該波形をスタティック波形であると判断し、大容量フラッシュメモリ212から先のアドレス情報のRAM208上のアドレスに対して、当該波形データを上記サイズ分転送する(ステップS910)。このとき、CPU202は、スタティック波形ディレクトリ情報として、転送した波形の音色番号、音色内波形番号、配置先頭アドレス、波形サイズをCPUワークに設定する(ステップS912)。
次いで、CPU202は、アドレス情報のアドレスに対して、転送した波形の波形サイズを加算し、RAM208上に配置される波形のアドレス情報を更新するとともに(ステップS914)、スタティック波形の数を管理するカウンタ(B)をインクリメントする(ステップS916)。一方、波形サイズがしきい値(64Kバイト)以下である場合には、CPU202は、スタティック波形の転送を行わず、現在の設定を維持する。CPU202は、上記の一連の処理動作(ステップS908〜S916)を音色波形ディレクトリテーブルの要素数分(すなわち、テーブル情報の最後の要素まで)繰り返すループ処理(ステップS906、S918)を実行する。当該ループ処理が終了した後、CPU202は、スタティック波形の数をCPUワークに保存する(ステップS920)。
(波形読み出し装置バッファ初期化処理)
図10は、本実施形態に係る電子鍵盤楽器の制御方法の初期化処理に適用される波形読み出し装置バッファ初期化処理を示すフローチャートである。
上述した初期化処理に適用される波形読み出し装置バッファ初期化処理においては、図10に示すフローチャートのように、まず、CPU202は、RAM208上に配置される波形バッファの番号を管理するカウンタ(C)を「1」に設定して初期化する(ステップS1002)。次いで、CPU202は、バッファ番号の「1」の波形バッファから順に、波形読み出し装置バッファディレクトリに格納されているリンクフラグ、転送済みフラグ、アクセス中カウント、音色番号、音色内波形番号、波形サイズを「0」に設定し(ステップS1006)、リンクバッファ番号を自身の波形バッファ番号(=カウンタ値)に設定する(ステップS1008)。これにより、波形バッファ番号とリンクバッファ番号が同じ場合には、他の波形バッファに対して読み出し動作を行っておらず、自身の波形バッファに対して読み出し動作を行っている状態に設定される。
次いで、CPU202は、RAM208上に配置される波形バッファ番号を管理するカウンタ(C)をインクリメントする(ステップS1010)。CPU202は、上記の一連の処理動作(ステップS1006〜S1010)を、256組の波形読み出し装置に1対1の関係で対応する256個の各波形バッファに対して繰り返すループ処理(ステップS1004、S1012)を実行して、各波形バッファを初期化する。
(スイッチ処理)
図11は、本実施形態に係る電子鍵盤楽器の制御方法のスイッチ処理に適用される音色選択処理を示すフローチャートである。
演奏者が電子鍵盤楽器100に備えられたボタンやスイッチ類を操作した際に実行されるスイッチ処理(ステップS704)においては、CPU202は、当該スイッチ操作により音色選択イベントが発生したか否かを判断し(ステップS706)、音色選択イベントが発生したと判断した場合には、音色選択処理を実行する(ステップS708)。
音色選択処理においては、図11に示すフローチャートのように、CPU202は、演奏者が音色選択ボタン104を操作することにより指定された音色番号を、後述する押鍵処理などで使用するために、RAM208上のCPUワークに保存する(ステップS1102)。一方、音色選択イベントが発生していないと判断した場合、或いは、上記の音色選択処理が終了した場合には、CPU202は、後述する鍵盤処理を実行する(ステップS710)。
(鍵盤処理)
図12は、本実施形態に係る電子鍵盤楽器の制御方法の鍵盤処理に適用される押鍵処理及び離鍵処理を示すフローチャートである。図13は、本実施形態に係る電子鍵盤楽器の制御方法の鍵盤処理に適用されるノートオン処理及びノートオフ処理を示すフローチャートである。
上記のスイッチ処理(ステップS704)の後に実行される鍵盤処理(ステップS710)においては、CPU202は、演奏者が電子鍵盤楽器100に備えられた鍵盤102を操作することにより押鍵イベントや離鍵イベントが発生したか否かをそれぞれ判断する(ステップS712、S716)。CPU202は、押鍵イベントが発生したと判断した場合には、後述する押鍵処理を実行し(ステップS714)、離鍵イベントが発生したと判断した場合には、後述する離鍵処理を実行する(ステップS718)。
押鍵処理においては、図12(a)に示すフローチャートのように、CPU202は、演奏者が鍵盤102を弾いた際の押鍵操作による演奏情報に含まれる鍵盤位置及び押された強さを、それぞれキー番号(ノートナンバー)及びベロシティに変換してノートオン情報として保持し(ステップS1202)、ノートオンイベントとして処理を実行する(ステップS1204)。
ノートオン処理においては、図13(a)に示すフローチャートのように、CPU202は、まず、押鍵処理において演奏情報から変換されたノートオン情報から波形情報を取得する処理を実行し(ステップS1302)、次いで、音源LSI204の波形読み出し装置304における読み出し開始処理を実行する(ステップS1304)。
また、離鍵処理においては、図12(b)に示すフローチャートのように、CPU202は、演奏者が鍵盤102を弾いた際の離鍵による演奏情報に含まれる鍵盤位置を、キー番号(ノートナンバー)に変換してノートオフ情報として保持し(ステップS1222)、ノートオフイベントとして処理を実行する(ステップS1224)。
ノートオフ処理においては、図13(b)に示すフローチャートのように、CPU202は、まず、押鍵処理において演奏情報から変換されたノートオフ情報からキー番号(ノートナンバー)を取得する(ステップS1322)。次いで、CPU202は、波形読み出し装置304の番号「1」から順に、波形読み出し装置304の状態を確認し、波形を読み出し中の各波形読み出し装置304に対して、RAM208上のCPUワークから波形読み出し装置304に対応するキー番号を取得して、ノートオフ情報から取得したキー番号と一致するか否かの比較を行う(ステップS1326)。キー番号が一致した場合には、CPU202は、波形読み出し装置304に接続されている音量制御(アンプエンベロープ)に対して、リリースレベルを「0」に設定して、RAM208上の音色パラメータから得られるリリースレイトを設定する(ステップS1328)。一方、キー番号が一致しない場合には、CPU202は、現在のアンプエンベロープの設定を維持する。CPU202は、上記の一連の処理動作(ステップS1326〜S1328)を、波形を読み出し中の波形読み出し装置304の数分繰り返すループ処理(ステップS1324、S1330)を実行する。
ここで、上記の押鍵処理において実行されるノートオン処理に適用される各処理動作について詳しく説明する。
(波形情報取得処理)
図14は、本実施形態に係る電子鍵盤楽器の制御方法のノートオン処理に適用される波形情報取得処理を示すフローチャートである。
ノートオン処理において実行される波形情報取得処理においては、図14に示すフローチャートのように、CPU202は、まず、押鍵処理において取得したノートオン情報からキー番号(ノートナンバー)及びベロシティを取得するとともに(ステップS1402)、RAM208上のCPUワークから音色選択処理において保存された音色番号を取得する(ステップS1404)。
次いで、CPU202は、音色波形ディレクトリテーブルの先頭から順に、取得したキー番号、ベロシティ及び音色番号について、テーブル情報と一致するか否かの比較を行う(ステップS1406)。CPU202は、この比較処理において、音色番号が一致し、キー番号が最高キー番号以下且つ最低キー番号以上であり、さらにベロシティが最大ベロシティ以下且つ最小ベロシティ以上に該当するテーブル情報を抽出して(ステップS1410〜S1418)、当該テーブルの波形番号と波形サイズ、波形領域先頭からのアドレスを取得する(ステップS1420〜S1424)。一方、上記の比較処理において、音色番号が一致しない、又は、キー番号が最高キー番号より大きい、又は、最低キー番号より小さい、又は、ベロシティが最大ベロシティより大きい、又は、最小ベロシティより小さい、のうちのいずれかの条件に該当する場合には、CPU202は、波形番号等の波形情報の取得を行わない。CPU202は、上記の一連の処理動作(ステップS1410〜S1418)を音色波形ディレクトリテーブルの要素数分(すなわち、テーブル情報の最後の要素まで)繰り返すループ処理(ステップS1408、S1426)を実行する。
(波形読み出し開始処理)
図15は、本実施形態に係る電子鍵盤楽器の制御方法のノートオン処理に適用される波形読み出し装置の波形読み出し開始処理を示すフローチャートである。
ノートオン処理において実行される波形読み出し装置の波形読み出し開始処理においては、図15に示すフローチャートのように、CPU202は、まず、波形情報取得処理において取得した波形サイズが、予め設定されたしきい値(64Kバイト)を超過するか否かの判断を行う(ステップS1502)。波形サイズがしきい値(64Kバイト)を超過する場合には、後述するスタティック波形の読み出し開始処理を実行し(ステップS1504)、一方、波形サイズがしきい値(64Kバイト)以下である場合には、後述する波形読み出し装置バッファの割り当て処理を実行する(ステップS1506)。
(スタティック波形の読み出し開始処理)
図16は、本実施形態に係る電子鍵盤楽器の制御方法のノートオン処理に適用されるスタティック波形の読み出し開始処理を示すフローチャートである。
ノートオン処理において取得した波形サイズがしきい値(64Kバイト)を超過する場合に実行されるスタティック波形の読み出し開始処理においては、図16に示すフローチャートのように、CPU202は、まず、音源LSI204の波形発生器302において、どの波形読み出し装置304を使用するかを決定する割り当て処理を実行する(ステップS1602)。波形読み出し装置304の割り当て処理については後述する。次いで、CPU202は、割り当てられた波形読み出し装置304の情報として、押鍵処理において取得したキー番号を離鍵処理(ノートオフ処理)などで使用するために、RAM208上のCPUワークに保存する(ステップS1604)。
次いで、CPU202は、スタティック波形ディレクトリの先頭から順に、上記の音色選択処理及び波形情報取得処理により取得した音色番号及び波形番号について、ディレクトリ情報と一致するか否かの比較を行う(ステップS1608、S1610)。音色番号及び波形番号が共に一致する場合には、CPU202は、スタティック波形番号に基づいて当該波形がRAM208上に配置されている先頭アドレスを取得し(ステップS1612)、割り当てられた波形読み出し装置304により、取得した先頭アドレスから波形読み出し動作を開始する(ステップS1616)。一方、上記の比較処理において、音色番号又は波形番号のうちのいずれかが不一致の場合には、CPU202は、先頭アドレスの取得を行わない。CPU202は、上記の一連の処理動作(ステップS1608〜S1610)をCPUワークに保存されているスタティック波形数分繰り返すループ処理(ステップS1606、S1614)を実行する。
(波形読み出し装置の割り当て処理)
図17は、本実施形態に係る電子鍵盤楽器の制御方法のノートオン処理に適用される波形読み出し装置の割り当て処理を示すフローチャートである。
上記のスタティック波形の読み出し開始処理において実行される波形読み出し装置の割り当て処理においては、図17に示すフローチャートのように、CPU202は、まず、波形読み出し装置304を割り当てる候補の番号として「1」を仮設定して初期化する(ステップS1702)。
次いで、CPU202は、波形読み出し装置304の番号「1」から順に、波形読み出し装置304の状態を確認し、波形データの読み出し中か否かの判断を行う(ステップS1706)。現在の波形読み出し装置304が波形データを読み出し中の場合には、CPU202は、割り当て候補となる波形読み出し装置304の番号(候補番号)に基づいて、当該候補番号の波形読み出し装置304の状態を確認する(ステップS1708)。候補番号の波形読み出し装置304が波形データを読み出し中の場合には、CPU202は、現在の波形読み出し装置304の番号のアクセス中カウントの値と、割り当てる波形読み出し装置の候補番号のアクセス中カウントの値との比較を行う(ステップS1710)。割り当てる波形読み出し装置304の候補番号のアクセス中カウントの値が大きい場合(すなわち、現在の波形読み出し装置304の番号のアクセス中カウントの値が割り当てる波形読み出し装置の候補番号のアクセス中カウントの値より小さい場合)には、CPU202は、割り当てる波形読み出し装置304の候補番号を現在の波形読み出し装置304の番号に更新設定する(ステップS1718)。
一方、ステップS1708において、候補番号の波形読み出し装置304が波形データを読み出していない場合には、CPU202は、当該波形読み出し装置304が停止しているものと判断して、波形読み出し装置304の番号の更新を行わず、現在の設定を維持する。また、ステップS1710において、割り当てる波形読み出し装置304の候補番号のアクセス中カウントの値が小さい場合(すなわち、現在の波形読み出し装置304の番号のアクセス中カウントの値が割り当てる波形読み出し装置の候補番号のアクセス中カウントの値以上の場合)には、CPU202は、波形読み出し装置304の番号の更新を行わず、現在の設定を維持する。
一方、ステップS1706において、現在の波形読み出し装置304が波形データを読み出していない(停止)場合には、CPU202は、現在の波形読み出し装置304の番号に対応する波形バッファのアクセス中カウントの値が「0」になっているか否かを判断する(ステップS1712)。アクセス中カウントの値が「0」の場合は、CPU202は、他の波形読み出し装置304からの波形バッファへのアクセスがなく、且つ、波形読み出し動作も停止していると判断して、現在の波形読み出し装置304を割り当てる(ステップS1722)。
一方、ステップS1712において、アクセス中カウントの値が「0」以外の場合は、CPU202は、他の波形読み出し装置304からの波形バッファへのアクセスがあると判断して、割り当て候補番号の波形読み出し装置304の状態を確認する(ステップS1714)。候補番号の波形読み出し装置304が波形データを読み出し中の場合には、CPU202は、割り当てる波形読み出し装置304の候補番号を現在の波形読み出し装置304の番号に更新設定する(ステップS1718)。
一方、ステップS1714おいて、候補番号の波形読み出し装置304が波形データを読み出していない場合には、CPU202は、当該波形読み出し装置304が停止しているものと判断して、現在の波形読み出し装置304の番号のアクセス中カウントの値と、割り当てる波形読み出し装置の候補番号のアクセス中カウントの値との比較を行う(ステップS1716)。割り当てる波形読み出し装置304の候補番号のアクセス中カウントの値が大きい場合(すなわち、現在の波形読み出し装置304の番号のアクセス中カウントの値が割り当てる波形読み出し装置の候補番号のアクセス中カウントの値より小さい場合)には、CPU202は、割り当てる波形読み出し装置304の候補番号を現在の波形読み出し装置304の番号に更新設定する(ステップS1718)。
一方、ステップS1716において、割り当てる波形読み出し装置304の候補番号のアクセス中カウントの値が小さい場合(すなわち、現在の波形読み出し装置304の番号のアクセス中カウントの値が割り当てる波形読み出し装置の候補番号のアクセス中カウントの値以上の場合)は、波形読み出し装置304の番号の更新を行わず、現在の設定を維持する。CPU202は、上記の一連の処理動作(ステップS1706〜S1718)を波形読み出し装置304の数分繰り返すループ処理(ステップS1704、S1720)を実行する。
当該ループ処理が終了した後、CPU202は、波形読み出し装置の数分の状態の確認が終了した時点で、割り当てる波形読み出し装置304の番号が確定していない場合には、候補番号の波形読み出し装置をスタティック波形用に割り当てる(ステップS1724)。このとき、CPU202は、割り当てられた波形読み出し装置304が波形データの読み出し中か否かの判断を行い(ステップS1726)、波形読み出し中の場合には、ハイリリース処理(波形読み出し装置304に接続されている音量制御において、音量レベルを急速に「0」にする処理)を実行した後(ステップS1728)、割り当てられた波形読み出し装置304の波形読み出し動作を停止する。一方、波形データを読み出していない場合には、CPU202は、当該波形読み出し装置304が停止しているものと判断して、現在の設定を維持する。
(波形読み出し装置バッファの割り当て処理)
図18、図19は、本実施形態に係る電子鍵盤楽器の制御方法のノートオン処理に適用される波形読み出し装置バッファの割り当て処理を示すフローチャートである。
ノートオン処理において取得した波形サイズがしきい値(64Kバイト)以下である場合に実行される波形読み出し装置バッファの割り当て処理においては、図18、図19に示すフローチャートのように、CPU202は、まず、音源LSI204の波形発生器302において、どの波形読み出し装置304を使用するかを決定する割り当て処理を実行する(ステップS1802)。ここでは、図16、図17のフローチャートに示した、波形読み出し装置304の割り当て処理(ステップS1602)と同等の処理が適用される。
次いで、CPU202は、割り当てられた波形読み出し装置304の情報として、このときのキー番号をCPUワークに保存する(ステップS1804)。次いで、CPU202は、上記の音色選択処理及び波形情報取得処理により取得した音色番号及び波形番号について、割り当てられた波形読み出し装置304に対応する波形バッファの情報と一致するか否かの比較を行う(ステップS1806〜S1810)。音色番号及び波形番号が共に一致する場合には、CPU202は、既に波形データが転送済みであると判断して(ステップS1812)、自身の波形バッファの先頭から波形読み出し動作を開始する(ステップS1838)。一方、上記の比較処理において、音色番号又は波形番号のうちのいずれかが不一致の場合には、CPU202は、他の波形バッファに既に波形データが転送されていないかを確認する。
まず、CPU202は、波形バッファカウンタ(C)を「1」に初期化し(ステップS1814)、バッファ番号の「1」の波形バッファから順に、上記の音色選択処理及び波形情報取得処理により取得した音色番号及び波形番号について、各波形バッファに保存されている波形データの情報と一致するか否かの比較を行う(ステップS1818、S1820)。音色番号及び波形番号が共に一致する場合には、CPU202は、上記の比較処理を停止し、図19に示すフローチャートのように、一致した波形バッファのカウンタの値とリンクバッファ番号が一致するか否かの比較を行う(ステップS1902)。リンクバッファ番号が波形バッファカウンタの値と一致する場合には、CPU202は、この波形バッファの番号を自身の波形バッファのリンクバッファ番号に設定する(ステップS1904)。一方、リンクバッファ番号が波形バッファカウンタと一致しない場合には、CPU202は、この波形バッファのリンクバッファ番号を自身の波形バッファのリンクバッファ番号に設定する(ステップS1906)。
次いで、CPU202は、自身の波形バッファのリンクフラグを「1」に設定し(ステップS1908)、自身の波形バッファのリンクバッファ番号に対応する波形バッファのアクセス中カウントの値をインクリメントし(ステップS1910)、自身の波形バッファのリンクバッファ番号に対応する波形バッファの先頭アドレスから波形読み出し動作を開始する(ステップS1912)。すなわち、RAM208に既に転送済みの波形データについては、新たに大容量フラッシュメモリ212から転送する動作を行わない。CPU202は、上記の一連の処理動作(ステップS1818〜S1820)を、256個の各波形バッファに対して繰り返すループ処理(ステップS1816、S1822)を実行する。
上記の一連の処理動作(ステップS1818〜S1820)において、音色番号又は波形番号のうちのいずれかが不一致で、音色番号及び波形番号が共に一致するものがなかった場合には、CPU202は、自身の波形バッファに波形情報取得処理で取得した波形番号、波形サイズ、波形領域先頭からのアドレス情報に基づいて、大容量フラッシュメモリ212からRAM208に波形データの転送を行う(ステップS1824)。CPU202は、この転送動作と同時に、自身の波形バッファのリンクフラグを「0」に設定し(ステップS1826)、割り当てられた波形読み出し装置304のリンクバッファ番号を自身の波形バッファ番号に設定する(ステップS1828)。さらに、CPU202は、アクセス中カウントの値を「1」に設定し(ステップS1830)、RAM208上への波形データの転送に伴って、音色波形ディレクトリに音色番号、音色内波形番号、波形サイズを設定する(ステップS1832)。
次いで、CPU202は、波形データの転送状態を確認し、波形データの転送が終了したか否かの判断を行う(ステップS1834)。波形データを転送中である場合には、CPU202は、当該状態を維持し、波形データの転送が終了した場合には、転送済みフラグに「1」を設定し(ステップS1836)、自身の波形バッファの先頭から波形読み出し動作を開始する(ステップS1834)。
(MIDI受信処理)
図7に示すメインルーチンに戻って、上記の鍵盤処理(ステップS710)の後に実行されるMIDI受信処理(ステップS720)においては、CPU202は、受信したMIDIメッセージにノートオンイベントやノートオフイベントが含まれているか否かをそれぞれ判断し(ステップS722、S726)、ノートオンイベントがあると判断した場合には、ノートオン処理を実行し(ステップS724)、ノートオフイベントがあると判断した場合には、ノートオフ処理を実行する(ステップS728)。ここでは、図12、図13のフローチャートに示した、ノートオン処理(ステップS1204)、又は、ノートオフ処理(ステップS1224)と同等の処理が適用される。
(音源定期処理)
図20は、本実施形態に係る電子鍵盤楽器の制御方法に適用される音源定期処理を示すフローチャートである。
上記のMIDI受信処理(ステップS720)の後に実行される音源定期処理(ステップS730)においては、CPU202は、或る一定時間ごとに、図20に示すフローチャートのように、音源処理を実行する。CPU202は、波形読み出し装置304の番号「1」から順に、波形読み出し装置304の状態を確認し、波形を読み出し中の各波形読み出し装置304に対して、音量制御(アンプエンベロープ)のレベルが「0」になっているか否かを判断する(ステップS2004)。音量制御のレベルが「0」になっている場合には、CPU202は、波形読み出し装置304の波形読み出し動作を停止する波形読み出し停止処理を実行する(ステップS2006)。一方、音量制御のレベルが「0」になっていない場合には、CPU202は、波形読み出し装置304の波形読み出し動作を停止せず、現在の状態を維持する。CPU202は、上記の一連の処理動作(ステップS2004〜S2006)を、波形データを読み出し中の波形読み出し装置304の数分繰り返すループ処理(ステップS2002、S2008)を実行する。
(波形読み出し停止処理)
図21は、本実施形態に係る電子鍵盤楽器の制御方法の音源定期処理に適用される波形読み出し装置の波形読み出し停止処理を示すフローチャートである。
音源定期処理において実行される波形読み出し装置の波形読み出し停止処理においては、図21に示すフローチャートのように、CPU202は、まず、波形読み出し装置304に対応する波形バッファのリングフラグの値が「1」になっているか否かを判断する(ステップS2102)。リングフラグの値が「1」になっている場合には、CPU202は、リンクバッファ番号に対応する波形バッファのアクセス中カウントの値をデクリメントした後(ステップS2104)、リンクバッファ番号を自身の波形バッファ番号に設定するとともに(ステップS1006)、リンクフラグを「0」に設定する(ステップS1008)。その後、CPU202は、波形読み出し装置304の波形読み出し動作を停止させる(ステップS1010)。一方、ステップS2102において、リングフラグの値が「0」になっている場合には、CPU202は、自身の波形バッファ番号の更新を行わず、現在の設定を維持した状態で、波形読み出し装置304の波形読み出し動作を停止させる(ステップS1010)。
このように、本実施形態においては、音源LSI204が楽音発生時に使用するRAM208からなる音源メモリと、音色に使用する全ての波形データを保存するNAND型等の大容量フラッシュメモリ212からなる大容量記憶デバイスとを備え、大容量記憶デバイスから音源メモリへの転送に時間がかかるデータサイズが大きい波形データを常時音源メモリに配置し、比較的データサイズが小さい波形データを、発音時に大容量記憶デバイスから発音ジェネレータ(波形読み出し装置304)ごとに用意された音源メモリの各波形バッファに転送してから発音する。ここで、発音のための読み出し動作の対象となる波形データのうち、比較的データサイズが小さい波形データを大容量記憶デバイスから音源メモリの各波形バッファに転送する処理に先立って、当該波形データが音源メモリ内のいずれかの波形バッファに既に存在する場合には、波形バッファの使用状態等を管理する管理情報に基づいて、当該波形データを保存する波形バッファをリンク先に設定してその波形データを音源メモリ内で流用して音源メモリから直接読み出すことにより発音する。
また、大容量記憶デバイスから音源メモリへの波形データの転送に際しては、上記の波形バッファの使用状態等を管理する管理情報に基づいて、発音ジェネレータにより使用されていない、或いは、使用頻度が低い波形バッファが優先的に選択されて波形データが上書き保存される。さらに、演奏による押鍵時に発音ジェネレータを割り当てる際には、発音ジェネレータの使用履歴を管理する履歴情報に基づいて、発音が停止し且つ使用頻度が低い等の、所定の使用状態の発音ジェネレータから優先的に割り当てて波形読み出し動作が実行される。
これにより、データサイズの大きい波形データを、アクセス速度が高速な音源メモリから直接読み出し、データサイズの小さい波形データを、音源メモリ内で流用して直接読み出し、又は、安価な大容量記憶デバイスから読み出して、楽音の生成処理に使用することができる。また、複数の楽音を複数の発音ジェネレータを用いて同時に発音させる場合であっても、高速低容量の音源メモリに記憶する複数の波形データの管理や、各波形データを発音させる発音ジェネレータの管理を効率的に行うことができる。したがって、製品コストを抑制した構成で、複数の波形データを用いた楽音の生成処理に要する時間をより効果的に短縮して、楽音の発生に遅延や途切れのない良好な演奏を実現することができる。これは換言すると、楽音の生成処理に要する所定の時間内に、より多数の音色波形データを読み出して同時に発音させることができることを意味しており、これにより、管楽器や弦楽器等の原音の特徴により近い楽音を再現することができる電子楽器を実現することができる。
<変形例>
次に、本実施形態に係る電子鍵盤楽器の制御方法の変形例について説明する。
図22は、本実施形態に係る電子鍵盤楽器の制御方法の変形例に適用される波形読み出し装置バッファの割り当て処理を示すフローチャートである。ここで、上述した実施形態(図18、図19)と同等の処理動作については、同等の符号を付してその説明を省略する。
上述した実施形態においては、RAM208上の波形データの流用方法として、データサイズがしきい値以下の波形データについて、大容量フラッシュメモリ212からRAM208に転送する処理に先立って、発音のための読み出し動作の対象となる波形データが、RAM208の他の波形バッファに既に存在するか否かを調査し、存在する場合には、複数の波形バッファを管理する管理情報に基づいて、その波形バッファをリンク先に設定し、保存されている波形データをRAM208内で流用して、波形読み出し装置304により当該リンク先の波形バッファの波形データを直接読み出す場合について説明した。
本変形例においては、上述したRAM上の波形データの流用方法として、管理情報に基づいて、既に波形データを保存している波形バッファから、波形読み出し動作のために割り当てられた波形バッファに、当該波形データをコピー転送した後、読み出す手法を有している。ここで、本変形例においては、管理情報として、上述した実施形態に示した波形バッファのリンク先設定や使用状態に関する情報に替えて、流用の対象となる波形データを保存する波形バッファと波形読み出し動作のために割り当てられた波形バッファとの間の、RAM208内での波形データのコピー転送に関する情報を有している。この場合の管理情報においても、各波形バッファにおける波形データの保存状態やコピー転送状態に応じて逐次更新される。
本変形例に係る電子鍵盤楽器の制御方法においては、上述した実施形態に示した一連の処理動作のうち、特に、波形読み出し装置バッファの割り当て処理(図18、図19)において、次のような処理が実行される。すなわち、図22に示すフローチャートのように、CPU202は、演奏で指示された楽音の音色番号及び波形番号について、RAM208の各波形バッファに保存されている波形データの情報と一致するか否かの比較を行い(ステップS1818、S1820)、音色番号及び波形番号が共に一致する場合には、一致した波形バッファの波形データを、波形読み出し動作のために割り当てられた自身の波形バッファへコピー転送する(ステップS1840)。次いで、CPU202は、この波形データのコピー転送に伴って、音色波形ディレクトリに音色番号、音色内波形番号、波形サイズを設定するとともに(ステップS1832)、波形データの転送状態を確認して(ステップS1834)、波形データの転送が終了した場合には、転送済みフラグに「1」を設定する(ステップS1836)。その後、CPU202は、波形読み出し動作のために割り当てられた波形バッファの先頭から波形読み出しを開始する(ステップS1838)。
このような変形例においても、データサイズの大きい波形データを、アクセス速度が高速な音源メモリから直接読み出し、データサイズの小さい波形データを、音源メモリ内でコピー転送して読み出し、又は、安価な大容量記憶デバイスから読み出して、楽音の生成処理に使用することができる。したがって、上述した実施形態と同様に、製品コストを抑制した構成で、複数の波形データを用いた楽音の生成処理に要する時間をより効果的に短縮して、楽音の発生に遅延や途切れのない良好な演奏を実現することができる。
以上、本発明のいくつかの実施形態について説明したが、本発明は、上述した実施形態に限定されるものではなく、特許請求の範囲に記載された発明とその均等の範囲とを含むものである。
以下に、本願出願の当初の特許請求の範囲に記載された発明を付記する。
(付記)
[1]
波形データを読み込んで記憶する複数の記憶領域を有する第1の記憶手段と、
前記第1の記憶手段の選択された記憶領域からそれぞれ波形データを読み込むことにより発音させることが可能な複数の発音制御手段と、
前記発音が指示されたときに、前記発音制御手段の各々による前記記憶領域の各々からの前記波形データの読み込み状況に基づいて、前記指示された発音に用いる前記発音制御手段と前記記憶領域との組合せを決定する制御手段と、
を備えたことを特徴とする楽音生成装置。
[2]
前記制御手段は、
前記発音が指示されたときに、前記記憶領域の各々に記憶された前記波形データを読み込んでいる前記発音制御手段の数に基づいて、前記指示された発音に用いる前記記憶領域を選択する、
ことを特徴とする[1]に記載の楽音生成装置。
[3]
前記制御手段は、
前記発音が指示されたときに、前記記憶領域の各々に記憶された前記波形データを読み込んでいる前記発音制御手段の数が他の前記記憶領域よりも少ない前記記憶領域を、前記指示された発音に用いる前記記憶領域として選択する、
ことを特徴とする[2]に記載の楽音生成装置。
[4]
前記制御手段は、
前記複数の記憶領域と前記複数の発音制御手段とを、1対1の関係で対応付けて管理し、
前記発音が指示されたときに、前記記憶領域の各々に記憶された前記波形データを読み込んでいる前記発音制御手段の数が他の前記記憶領域よりも少ない前記記憶領域に対応する前記発音制御手段を、前記指示された発音に用いる前記発音制御手段として選択する、
ことを特徴とする[2]又は[3]に記載の楽音生成装置。
[5]
前記制御手段は、
前記発音が指示されたときに、前記複数の発音制御手段の中から発音中ではない前記発音制御手段を、前記指示された発音に用いる前記発音制御手段として選択する、
ことを特徴とする[2]乃至[4]のいずれかに記載の楽音生成装置。
[6]
前記第1の記憶手段に転送される複数の前記波形データを記憶している第2の記憶手段を更に備え、
前記制御手段は、
前記発音が指示されたときに、前記指示された発音に用いる前記波形データが前記第1の記憶手段に記憶されている場合は、前記第1の記憶手段に記憶されている前記波形データを前記選択された発音制御手段により読み込ませ、前記発音が指示された波形データが前記第1の記憶手段に記憶されていない場合は、前記指示された発音に用いる前記波形データを、前記第2の記憶手段から前記第1の記憶手段の前記決定した記憶領域に転送した後、前記転送して記憶された前記波形データを前記決定した発音制御手段により読み込ませる、
ことを特徴とする[1]乃至[5]のいずれかに記載の楽音生成装置。
[7]
前記制御手段は、前記指示された発音に用いる前記波形データが前記選択された発音制御手段に対応付けられた前記第1の記憶手段の前記記憶領域に記憶されておらず、前記選択された発音制御手段以外の他の前記発音制御手段に対応付けられた前記記憶領域に記憶されている場合には、前記他の発音制御手段に対応付けられた前記記憶領域を、前記選択された発音制御手段のリンク先に設定して、前記他の発音制御手段に対応付けられた前記記憶領域に記憶されている前記波形データを前記選択された発音制御手段により直接読み出して発音させることを特徴とする[6]に記載の楽音生成装置。
[8]
前記制御手段は、前記指示された発音に用いる前記波形データが前記選択された発音制御手段に対応付けられた前記第1の記憶手段の前記記憶領域に記憶されておらず、前記選択された発音制御手段以外の他の前記発音制御手段に対応付けられた前記記憶領域に記憶されている場合には、前記他の発音制御手段に対応付けられた前記記憶領域に記憶されている前記波形データを、前記選択された発音制御手段に対応付けられた前記記憶領域にコピー転送して、前記コピー転送された波形データを前記選択された発音制御手段により読み出して発音させることを特徴とする[6]に記載の楽音生成装置。
[9]
前記制御手段は、前記発音が指示された波形データを、前記第2の記憶手段から前記第1の記憶手段に転送する際に、前記第1の記憶手段の前記複数の記憶領域のうちの、いずれの前記発音制御手段からも記憶されている前記波形データを使用されていない前記記憶領域、又は、前記波形データを使用している前記発音制御手段の数が少ない前記記憶領域を選択して、前記転送される波形データを記憶させることを特徴とする[6]に記載の楽音生成装置。
[10]
前記第1の記憶手段は、前記発音を伴う演奏の開始に先立って、所定の条件を満たす前記波形データを固定的に記憶しておく第1の記憶領域と、前記演奏中に指定されて、前記第2の記憶手段から転送された前記波形データを可変的に記憶しておく第2の記憶領域と、を有することを特徴とする[1]乃至[9]のいずれかに記載の楽音生成装置。
[11]
前記第1の記憶手段は、第1の読み出し速度を有するとともに、第1の記憶容量を有する記憶装置であり、
前記第2の記憶手段は、前記第1の読み出し速度よりも遅い第2の読み出し速度を有するとともに、前記第1の記憶容量よりも大きい第2の記憶容量を有する記憶装置であることを特徴とする[1]乃至[10]のいずれかに記載の楽音生成装置。
[12]
波形データを読み込んで記憶する複数の記憶領域を有する第1の記憶手段と、前記第1の記憶手段の選択された記憶領域からそれぞれ波形データを読み込むことにより発音させることが可能な複数の発音制御手段と、を備える楽音生成装置に適用される楽音生成方法であって、
前記発音が指示されたときに、前記発音制御手段の各々による前記記憶領域の各々からの前記波形データの読み込み状況に基づいて、前記指示された発音に用いる前記発音制御手段と前記記憶領域との組合せを決定する、
ことを特徴とする楽音生成方法。
[13]
コンピュータを、請求項[1]乃至[11]のいずれかに記載の楽音生成装置として機能させるための、あるいは、コンピュータに、[12]に記載の楽音生成方法を実行させるための楽音生成プログラム。
[14]
前記[1]乃至[12]のいずれかに記載の楽音生成装置と、
前記発音を伴う演奏により前記波形データを指定するための入力手段と、
前記発音された楽音を出力するための出力手段と、
を備えることを特徴とする電子楽器。