(57)【特許請求の範囲】
【請求項１】
楽音の音色夫々に対応した音色波形データのいずれかを指定するための音色選択情報の入力順序に基づいて、入力された複数の前記音色選択情報それぞれに優先値を付与するとともに、各音色選択情報に付与された優先値を、各音色選択情報で指定される音色波形データの音色毎に累計して音色毎の優先度を決定する優先度決定処理と、
入力された音色選択情報に対応する音色波形データが、第１の記憶装置内に設けられ音色波形データ夫々が記憶可能な複数の波形エリアのいずれにも記憶されていない場合に、前記複数の波形エリア夫々に記憶されている音色波形データの音色に対応して前記優先度決定処理により決定された優先度に基づき、前記複数の波形エリアからひとつの波形エリアを選択する選択処理と、
前記入力された音色選択情報に対応する音色波形データを第２の記憶装置から読み出すとともに、前記読み出された音色波形データを、前記選択された波形エリアに書き込む波形書き込み処理と、
を実行する処理部を備えた波形書き込み装置。
【請求項２】
前記処理部は、前記選択処理において、前記優先度決定処理により決定された優先度が最小の音色に対応する音色波形データが記憶されている波形エリアを選択する、請求項１に記載の波形書き込み装置。
【請求項３】
前記第１の記憶装置は、ランダムアクセスメモリを備え、前記第２の記憶装置は、前記第１の記憶装置より容量の大きいフラッシュメモリを備えた、請求項１又は２記載の波形書き込み装置。
【請求項４】
前記処理部は、前記優先度決定処理において、前記入力順序が新しい音色選択情報順に、大きな優先値を付与する、請求項１乃至３のいずれかに記載の波形書き込み装置。
【請求項５】
前記処理部は、前記波形書き込み処理として、
前記音色波形データの前記波形エリアへの読込みが完了前に、前記音色波形データに対応する音色選択情報とは異なる新たな音色選択情報が入力された場合は、前記波形エリアへの前記音色波形データの読込み処理を中止するとともに、前記波形エリアに、前記新たな音色選択情報に対応する音色波形データを前記第２の記憶装置から読み込ませる、請求項１乃至４のいずれかに記載の波形書き込み装置。
【請求項６】
処理部を有する波形書き込み装置に用いられる波形書き込み方法であって、前記処理部が、
楽音の音色夫々に対応した音色波形データのいずれかを指定するための音色選択情報の入力順序に基づいて、入力された複数の前記音色選択情報それぞれに優先値を付与するとともに、各音色選択情報に付与された優先値を、各音色選択情報で指定される音色波形データの音色毎に累計して音色毎の優先度を決定する優先度決定処理と、
入力された音色選択情報に対応する音色波形データが、第１の記憶装置内に設けられ音色波形データ夫々が記憶可能な複数の波形エリアのいずれにも記憶されていない場合に、前記複数の波形エリア夫々に記憶されている音色波形データの音色に対応して前記優先度決定処理により決定された優先度に基づき、前記複数の波形エリアからひとつの波形エリアを選択する選択処理と、
前記入力された音色選択情報に対応する音色波形データを第２の記憶装置から読み出すとともに、前記読み出された音色波形データを、前記選択された波形エリアに書き込む波形書き込み処理と、
を実行する波形書き込み方法。
【請求項７】
波形書き込み装置に用いられるコンピュータに、
楽音の音色夫々に対応した音色波形データのいずれかを指定するための音色選択情報の入力順序に基づいて、入力された複数の前記音色選択情報それぞれに優先値を付与するとともに、各音色選択情報に付与された優先値を、各音色選択情報で指定される音色波形データの音色毎に累計して音色毎の優先度を決定する優先度決定処理と、
前記入力された音色選択情報に対応する音色波形データが、第１の記憶装置内に設けられ音色波形データ夫々が記憶可能な複数の波形エリアのいずれにも記憶されていない場合に、前記複数の波形エリア夫々に記憶されている音色波形データの音色に対応して前記優先度決定処理により決定された優先度に基づき、前記複数の波形エリアからひとつの波形エリアを選択する選択ステップと、
前記入力された音色選択情報に対応する音色波形データを第２の記憶装置から読み出すとともに、前記読み出された音色波形データを、前記選択された波形エリアに書き込む書き込みステップと、
を実行させるプログラム。
【請求項８】
請求項１乃至５に記載の波形書き込み装置と、
演奏情報を入力する演奏操作子と、
音色選択情報を入力する音色選択操作子と、
複数種の音色波形データが記憶された第１の記憶装置と、
第２の記憶装置と、
前記演奏操作子による演奏情報の入力に応答して、前記第２の記憶装置から読み出された波形データに対応する楽音を生成する音源と、
を備えた電子楽器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、波形書き込み装置、方法、プログラム、及びその装置を用いた電子楽器に関する。
【背景技術】
【０００２】
波形読込み方式により楽音波形を発生する音源装置では、より多数の、より長時間の波形データを利用できるようにするために、使用しない波形データはフラッシュメモリやハードディスク等の大容量の補助記憶装置(２次記憶装置)に保存しておき、使用する波形データのみを音源装置が直接アクセスできる波形メモリ(１次記憶装置)に転送して発音させるというシステムを採用するものがある。
つまり、高価な波形メモリ(１次記憶装置)が有する記憶容量以上の記憶容量の波形データを安価な補助記憶装置(２次記憶装置)に保持しておき、必要な場合のみ移動して発音に使用するというコスト的には効率的な方法であると言える。
【０００３】
一従来技術として、次のような技術が知られている（例えば特許文献１に記載の技術）。この技術において、ＲＯＭには、音色毎に１つ以上の波形データが格納されている。音源ＬＳＩ（大規模集積回路）は、指定された曲の曲データを参照して、それらの波形データのなかで楽音の発音に必要なものを特定し、必要と特定した波形データはそのなかで必要な部分を更に特定する。それにより、楽音の発音に必要な波形データはその必要な部分のみをＲＯＭから読み出してＲＡＭに転送し格納させる。これにより、発音させるべき楽音の波高値生成用に波形データをワークメモリに格納する場合に、そのデータ量をより抑えることが可能な楽音発生装置を提供するものである。
【０００４】
他の従来技術として、次のような技術が知られている（例えば特許文献２に記載の技術）。この技術は、第１の記憶手段に記憶された各種データのなかで楽音発生装置の起動時に転送すべきデータ群を第２の記憶手段に転送する場合に、そのデータ群を構成する波形データのなかで予め定めた音色の波形データを優先して転送し、その転送状況に応じて、楽音発生装置の動作を制限する。例えば、同時発音可能な楽音数をより少なくする動作制御をかける。その動作制限により、そのときの転送状況で可能な動作に限定して楽音発生装置を使用させることができるようにし、転送の完了を待つ場合よりも転送開始（起動）からより短時間で演奏可能とさせるものである。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００７−２７１８２７号公報
【特許文献２】特許第４４７５３２３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術では依然として、補助記憶装置から波形メモリ等への波形データの移動に時間がかかるため、演奏に支障を来す場合がある。具体的には、演奏者が多数の音色の中から好みの音色を選ぶような際には、音色の切り替えの度に一定時間待たされて発音されない時間が存在するため、演奏者はストレスを感じるといった課題があった。また、予め演奏する楽曲で使用する複数の音色波形をメモリ上に読み込んでおく方法も考えられるが、どの音色をメモリ上に配置しておくかを演奏者が管理しなければならない。また、音色を比較して選択するようなケースでは音色を切り替える度にメモリ読み込みが発生するか、予め比較したい音色をメモリ上に並べておくなど面倒な作業が必要である。いずれのケースでもユーザーに負担をかけることになる。
【０００７】
そこで、本発明は、音色切り替えの際に、波形メモリに所望の音色の波形が存在しないために発音できないという演奏者のストレスを軽減、あるいは全く感じさせないレベルに抑制することを目的とする。
【課題を解決するための手段】
【０００８】
態様の一例では、楽音の音色夫々に対応した音色波形データのいずれかを指定するための音色選択情報の入力順序に基づいて、入力された複数の前記音色選択情報それぞれに優先値を付与するとともに、各音色選択情報に付与された優先値を、各音色選択情報で指定される音色波形データの音色毎に累計して音色毎の優先度を決定する優先度決定処理と、入力された音色選択情報に対応する音色波形データが、第１の記憶装置内に設けられ音色波形データ夫々が記憶可能な複数の波形エリアのいずれにも記憶されていない場合に、前記複数の波形エリア夫々に記憶されている音色波形データの音色に対応して前記優先度決定処理により決定された優先度に基づき、前記複数の波形エリアからひとつの波形エリアを選択する選択処理と、前記入力された音色選択情報に対応する音色波形データを第２の記憶装置から読み出すとともに、前記読み出された音色波形データを、前記選択された波形エリアに書き込む波形書き込み処理と、を実行する処理部を備える。
【発明の効果】
【０００９】
本発明によれば、音色切り替えの際に、現実的な再読み込みの可能性を予測して使用可能性の低いと思われる波形から書き換えを行うようにしたので、波形読み込みの発生する可能性を低く抑えることができ、波形無音時間の期待値を短縮することが可能となる。これにより演奏者のストレスを軽減、あるいは全く感じさせないレベルに抑制することが出来る。
【図面の簡単な説明】
【００１０】
【図１】本発明による電子鍵盤楽器の実施形態の外観図である。
【図２】電子鍵盤楽器の実施形態のハードウェア構成例を示す図である。
【図３】波形データ読込み動作の説明図である。
【図４】フラッシュメモリ音色情報テーブルと音色選択優先度テーブルのデータ構成例を示す図である。
【図５】音色選択履歴管理テーブルと音色波形エリア情報テーブルのデータ構成例を示す図である。
【図６】主要変数の一覧を示す図である。
【図７】制御処理の全体処理の例を示すメインルーチンのフローチャートである。
【図８】初期化処理の詳細例を示すフローチャートである。
【図９】音色切替え処理の詳細例を示すフローチャートである。
【図１０】音色エリア検索サブルーチンの詳細処理例を示すフローチャートである。
【図１１】優先順位判断サブルーチンの詳細処理例を示すフローチャートである。
【図１２】音色選択履歴更新サブルーチンの詳細処理例を示すフローチャートである。
【図１３】優先度計算サブルーチンの詳細処理例を示すフローチャートである。
【図１４】音源発音処理の詳細例を示すフローチャートである。
【図１５】波形読込み処理の詳細例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態（以下「本実施形態」と記載する）について図面を参照しながら詳細に説明する。本実施形態は、例えば電子鍵盤楽器に適用される、音高（鍵域）や音量（ベロシティ：打鍵の速さ）などの演奏情報によって音色が変化するのを再現するために、大容量の２次記憶装置（例えばフラッシュメモリ）から１次記憶装置（例えばＲＡＭによる波形メモリ）に、音高又は音量毎の波形データ（以下これを「スプリット波形」と呼ぶ）を読み込む楽音発生装置を対象とする。本実施形態は、このような楽音発生装置において、演奏者は１つの楽曲の中で同じ音色を繰り返し選択すること、選択された時刻が新しい音色ほど再度選択する可能性が高いことに着目し、音色選択の履歴情報を保持して、より新しく選択されてた音色の波形ほど優先順位を高く設定し、複数音色分の波形データを読み込むことができる一次記憶装置の波形メモリに新たな波形を読み込む際には、優先順位の低い音色が使用している波形メモリエリアから先にオーバーライトすることにより、音色の切替えに伴って所望の音色の波形が存在しない為に演奏できないという状態を最小限に留めることができる電子鍵盤楽器を実現するものである。すなわち、演奏者が今後どの波形が再利用する可能性が高く、どの波形が再利用する可能性が低いかを考慮して波形エリアの管理する必要から開放し、波形読込みの発生を最小限に食い止めることができる電子楽器を実現するものである。
【００１２】
図１は、本発明による電子鍵盤楽器の実施形態の外観図である。本実施形態は、電子鍵盤楽器１００として実施される。電子鍵盤楽器１００は、演奏操作子としての複数の鍵からなる鍵盤１０１と、音色選択操作子としての音色選択を行うための音色選択ボタン１０２及び音色以外の各種機能選択を行う機能選択ボタン１０３からなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション（演奏効果）を付加するベンダ／モジュレーション・ホイール１０４、音色や音色以外の各種設定情報を表示するＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶ディスプレイ）１０５等を備える。また、電子鍵盤楽器１００は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。
【００１３】
音色選択ボタン１０２は、図１に示されるように、ピアノ（図中「Ｐｉａｎｏ」）、エレクトリックピアノ（図中「Ｅ．ｐｉａｎｏ」）、オルガン（図中「Ｏｒｇａｎ」）、ギター（図中「Ｇｕｉｔａｒ）等の各種音色のカテゴリを選択するためのボタン群である。演奏者は、この音色選択ボタン１０２を押下することにより、例えば１６音色のうちの何れかを選択することができる。
【００１４】
図２は、図１の電子鍵盤楽器１００の実施形態のハードウェア構成例を示す図である。図２において、電子鍵盤楽器１００は、ＣＰＵ（中央演算処理装置）２０１、ＲＯＭ（リードオンリーメモリ）２０２、ＲＡＭ（ランダムアクセスメモリ）２０３、大容量フラッシュ（Ｆｌａｓｈ）メモリ２０４、波形メモリ２０６が接続される音源ＬＳＩ（大規模集積回路）２０５、図１の鍵盤１０５と図１の音色選択ボタン１０２及び機能選択ボタン１０３からなるスイッチ・パネルとが接続されるキー・スキャナ２０７、図１のベンダ／モジュレーション・ホイール１０４が接続されるＡ／Ｄコンバータ２０８、図１のＬＣＤ１０５が接続されるＬＣＤコントローラ２０９、及びＭＩＤＩ（Ｍｕｓｉｃａｌ  Ｉｎｓｔｒｕｍｅｎｔ  Ｄｉｇｉｔａｌ  Ｉｎｔｅｒｆａｃｅ）入力を受け付けるＭＩＤＩ  Ｉ／Ｆ（インタフェース）２１３が、それぞれシステムバス２１４に接続される構成を備える。また、音源ＬＳＩ２０５から出力されるデジタル楽音波形データは、Ｄ／Ａコンバータ２０８によりアナログ楽音波形信号に変換され、アンプ２１１で増幅された後に、特には図示しないスピーカ又は出力端子から出力される。
【００１５】
ＣＰＵ２０１は、ＲＡＭ２０３をワークメモリとして使用しながらＲＯＭ２０２に記憶された制御プログラムを実行することにより、図１の電子鍵盤楽器１００の制御動作を実行する。また、ＲＯＭ２０２は、上記制御プログラム及び各種固定データを記憶する。
【００１６】
大容量フラッシュメモリ２０４は、波形データ等の大容量データの格納領域であり、シーケンシャルアクセスにより順次アクセスされる。一方、音源ＬＳＩ２０５には、波形データを展開するＲＡＭで構成される波形メモリ２０６が接続され、発音される楽音の波形データは必ず、この波形メモリ２０６上に配置されている必要がある。ＣＰＵ２０１は、大容量フラッシュメモリ２０４から波形データをシーケンシャルに読みだし、それを音源ＬＳＩ２０５経由で波形メモリ２０６に転送することで、音色データを入れ替えることができる。
【００１７】
ＬＣＤコントローラ２０９は、ＬＣＤ１０５を制御するＩＣ（集積回路）である。キー・スキャナ２０７は、鍵盤１０５や音色選択ボタン１０２又は機能選択ボタン１０３等のスイッチ・パネルの状態を走査して、ＣＰＵ２０１に通知するＩＣである。Ａ／Ｄコンバータ２０８は、ベンダ／モジュレーション・ホイール１０４の操作位置を検出するＩＣである。１６ｂｉｔフリーランニング・タイマカウンタ２１２は、イベントの時刻検出のための計時を行う。
【００１８】
図３は、波形データ読込み動作の説明図である。本実施形態では、音源ＬＳＩ２０５が波形データの発音読出しに使用するための波形エリアとしては、音源ＬＳＩ２０５内の波形メモリ２０６上に、波形エリア０〜４の４エリアが確保されている。
【００１９】
大容量フラッシュメモリ２０４上には全１６音色分の波形データが記録されており、その中から選択された音色の波形データを音源ＬＳＩ２０５の波形メモリ２０６の１つの波形エリアに読み込むことで、発音が可能となる。この音色情報は、ＲＯＭ２０２に記憶されるフラッシュメモリ音色情報テーブルによって管理される。図４（ａ）は、フラッシュメモリ音色情報テーブルのデータ構成例を示す図である。このフラッシュメモリ音色情報テーブルは、図２のＲＯＭ２０２に記憶されている。図４（ａ）に例示されるように、フラッシュメモリ音色情報テーブルの各音色毎のエントリには、音色番号を示す「番号」項目値と、「音色名」項目値と、大容量フラッシュメモリ２０４の波形記憶領域の先頭からの記憶アドレスのオフセット（１６進数）を示す「波形アドレスオフセット」項目値と、その音色に含まれる波形データ群の全体の波形サイズ（１６進数）を示す「波形サイズ」項目値が記憶されている。図４（ａ）に示されるように、大容量フラッシュメモリ２０４上での各音色の波形データのサイズは様々であるが、全て１０００００Ｈ（「Ｈ」は１６進数を示す）バイト以下になっている。１音色で用いる波形データは１つのみとする。波形メモリ２０６上の各波形エリアのサイズも、この最大サイズと等しい。従って、任意の音色の波形データを任意の波形エリアに読み込むことが可能である。
【００２０】
図３に示したように、波形メモリ２０６上の波形エリアは４組が用意されている。ユーザの音色選択操作によって選択された音色が、すでに波形メモリ２０６上の４つの波形エリアの何れかに存在すれば、その音色波形のアドレス情報を更新するだけなので瞬時に音色切り替えが完了する。もし、選択された音色がどの波形エリアにも存在しなければ、大容量フラッシュメモリ２０４から波形メモリ２０６上の何れかの波形エリアに波形データを読み込む処理を行うことになるが、この時点で使用される可能性が最も低いと思われる音色を履歴から判断して、そのエリアに読み込むことになる。これを具体的に説明すると以下のようになる。
【００２１】
図４（ｂ）は、ＲＯＭ２０２に記憶される音色選択優先度テーブルのデータ構成例を示す図である。図４（ｂ）に示されるように、まず優先度は、音色選択の発生順序が新しいほど大きな重みづけポイント（以下これを「優先度ポイント」と呼ぶ）が付与される。これは固定的係数なので変化はない。図５（ａ）は、図２のＲＡＭ２０３上に記憶される音色選択履歴管理テーブルのデータ構成例を示す図である。ユーザによる実際の音色選択操作によって、図５（ａ）に示されるように、例えば過去８回の音色選択履歴には、各発生順序及び各選択音色番号（音色名）ごとに、その発生順序に従ってＲＯＭ２０２に記憶されている図４（ｂ）の音色選択優先度テーブルが参照されることにより、それぞれ優先度ポイントが付加される。音色選択履歴管理テーブルに残っていない音色名の優先度ポイントはゼロポイントである。図５（ｂ）は、ＲＡＭ２０３に記憶される音色波形エリア情報テーブルのデータ構成例を示す図である。図５（ｂ）に示されるように、波形メモリ２０６上の４つの波形エリアのそれぞれについて、当該波形エリアに読み込まれている波形データの音色番号（音色名）が図５（ａ）の音色選択履歴管理テーブルの選択音色番号（音色名）から検索され、マッチしたエントリの優先度ポイントの合計値が、当該波形エリアの優先度ポイントとして集計される。例えば、エリア番号１の波形エリアの音色名「０３（Ｇｕｉｔａｒ）」は、音色選択履歴管理テーブル上の発生順序１番（最古）、３番、及び６番に記録されており、音色選択優先度テーブルよりそれぞれ優先度ポイント１、４、１６が付与されている。従って、エリア番号１の波形エリアの音色名「０３（Ｇｕｉｔａｒ）」の優先度ポイントは１＋４＋１６＝２１点となる。同様に、エリア番号２の波形エリアの音色名「０１（Ｐｉａｎｏ）」は、音色選択履歴管理テーブル上の発生順序８番（最新として選択中）に記録されており、音色選択優先度テーブルより優先度ポイント２９が付与されている。従って、エリア番号２の波形エリアの音色名「０１（Ｐｉａｎｏ）」の優先度ポイントは２９点となる。同様に、エリア番号３の波形エリアの音色名「０６（Ｓｙｎｔｈ１）」は、音色選択履歴管理テーブル上の発生順序４番及び７番に記録されており、音色選択優先度テーブルよりそれぞれ優先度ポイント７及び２２が付与されている。従って、エリア番号３の波形エリアの音色名「０６（Ｓｙｎｔｈ１）」の優先度ポイントは７＋２２＝２９点となる。更に、エリア番号４の波形エリアの音色名「０２（Ｏｒｇａｎ）」は、音色選択履歴管理テーブル上の発生順序５番に記録されており、音色選択優先度テーブルより優先度ポイント１１が付与されている。従って、エリア番号４の波形エリアの音色名「０６（Ｏｒｇａｎ）」の優先度ポイントは１１点となる。
【００２２】
次に、波形エリアに存在しない音色への切替えが発生した際には、音色波形エリア情報テーブル上で優先度ポイントが最も低い音色番号（音色波形）に割り当てられているエリア番号の波形エリアが、新しく選択された音色波形のためにオーバーライトされる。
【００２３】
本実施形態では、波形読込みの指示が発生すると、上述の制御に基づいて決定された波形エリアに、大容量フラッシュメモリ２０４から波形データの読込みが行われるが、操作子や鍵盤の読込みを滞らせないようにするために、波形読込み処理はバックグラウンド処理として実行される。もし、演奏発音時に波形読み込みが完了していない波形データについては、演奏情報は捨てられ発音は行わない。
【００２４】
図６は、図２のＣＰＵ２０１が実行する制御処理において使用する主要な変数の一覧を示す図である。各変数については、後述する制御処理の詳細説明において詳述する。
【００２５】
以下に、上述の動作を実現するためにＣＰＵ２０１が実行する制御処理の詳細例について説明する。
【００２６】
図７は、ＣＰＵ２０１が実行する制御処理の全体処理の例を示すメインルーチンのフローチャートである。この処理例は、ＣＰＵ２０１がＲＯＭ２０２に記憶された制御プログラムを実行する処理例である。
【００２７】
ＣＰＵ２０１は、まずＲＡＭ２０３の内容を初期化した後（ステップＳ７０１）、ステップＳ７０２からＳ７１１の一連の処理で示される定常ループ処理に入る。
【００２８】
定常ループ処理では、ＣＰＵ２０１はまず、ユーザインタフェース処理（図中「ユーザＩ／Ｆ」と表示）を実行する（ステップＳ７０２）。ここでは、ＣＰＵ２０１は、図２のキー・スキャナ２０７を介して図１の音色選択ボタン１０２の状態を取得する。
【００２９】
次に、ＣＰＵ２０１は、ステップＳ７０２の処理の結果、演奏者が音色選択ボタン１０２を操作することにより音色選択イベントが発生したか否かを判定する（ステップＳ７０３）。
【００３０】
そして、ＣＰＵ２０１は、音色切り替えが発生した場合（ステップＳ７０３の判定がＹｅｓの場合）は、音色切替え処理を実行する（ステップＳ７０４）。ステップＳ７０３の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ７０４の処理はスキップする。
【００３１】
次に、ＣＰＵ２０１は、鍵盤処理を実行する（ステップＳ７０５）。ここでは、ＣＰＵ２０１は、図２のキー・スキャナ２０７を介して図１の鍵盤１０５の押鍵状態を取得する。
【００３２】
次に、ＣＰＵ２０１は、ステップＳ７０５の処理の結果、演奏者が鍵盤１０５上の何れかの鍵を押鍵することにより押鍵イベントが発生したか否かを判定する（ステップＳ７０６）。
【００３３】
そして、ＣＰＵ２０１は、押鍵イベントが発生した場合（ステップＳ７０６の判定がＹｅｓの場合）は、音源発音処理を実行する（ステップＳ７０７）。ステップＳ７０６の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ７０７の処理はスキップする。
【００３４】
続いて、ＣＰＵ２０１は、ステップＳ７０５の処理の結果、演奏者が鍵盤１０５上の何れかの押鍵中の鍵を離鍵することにより離鍵イベントが発生したか否かを判定する（ステップＳ７０８）。
【００３５】
そして、ＣＰＵ２０１は、離鍵イベントが発生した場合（ステップＳ７０８の判定がＹｅｓの場合）は、音源リリース処理を実行する（ステップＳ７０９）。ステップＳ７０８の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ７０９の処理はスキップする。
【００３６】
その後、ＣＰＵ２０１は、音源定常サービス処理を実行する（ステップＳ７１０）。ここでは、例えば図１の機能選択ボタン１０３が押された場合に対応する処理や、図１のベンダ／モジュレーション・ホイール１０４が操作された場合に対応する処理等の、電子鍵盤楽器１００に対する一般的な処理が実行される。
【００３７】
最後に、ＣＰＵ２０１は、波形読込み処理を実行する（ステップＳ７１１）。
【００３８】
その後、ＣＰＵ２０１は、ステップＳ７０２の定常ループ処理の先頭に戻る。
【００３９】
図８は、図７のステップＳ７０１の初期化処理の詳細例を示すフローチャートである。
【００４０】
まず、ＣＰＵ２０１は、ＲＡＭ２０３上の図６に示される変数の値を、全て「０」にする（ステップＳ８０１）。
【００４１】
次に、ＣＰＵ２０１は、ＲＡＭ２０３上の変数ｉについて、ステップＳ８０２において値「０」に初期設定した後、ステップＳ８０５で＋１ずつインクリメントしながら、ステップＳ８０４で値「７」に達したと判定するまで、ＲＡＭ２０３上の図６に示される音色番号履歴変数ＴＳ＿ＨＩＳ［ｉ］に音色未選択を示す無効値「−１」を格納する処理（ステップＳ８０３）を、繰り返し実行する。この音色番号履歴変数ＴＳ＿ＨＩＳ［ｉ］（０≦ｉ≦７）は、図５（ａ）の音色選択履歴管理テーブルの「発生順序」項目値が１から８の各エントリの「選択音色番号（音色名）」項目値を保持する。
【００４２】
続いて、ＣＰＵ２０１は、変数ｉについて、ステップＳ８０６において値「０」に初期設定した後、ステップＳ８０９で＋１ずつインクリメントしながら、ステップＳ８０８で値「３」に達したと判定するまで、ＲＡＭ２０３上の図６に示される波形エリア音色番号変数ＷＭ＿ＳＴ［ｉ］．ＴＯＮＥに無効値「−１」を格納する処理と、同じくＲＡＭ２０３上の図６に示される波形エリアアドレスオフセット変数ＷＭ＿ＳＴ［ｉ］．ＲＡＭ＿ＯＦＦＳＥＴにオフセット値「ｉ×１０００００Ｈ」を格納する処理（ステップＳ８０７）を、繰り返し実行する。波形エリア音色番号変数ＷＭ＿ＳＴ［ｉ］．ＴＯＮＥ（０≦ｉ≦３）は、図５（ｂ）の音色波形エリア情報テーブルの「エリア番号」項目値が１から４の各エントリの「音色番号（音色名）」項目値を保持する。また、図３の説明で前述したように、波形メモリ２０６上の各波形エリアはそれぞれ１０００００Ｈの固定サイズを有するため、波形エリアアドレスオフセット変数ＷＭ＿ＳＴ［ｉ］．ＲＡＭ＿ＯＦＦＳＥＴ（０≦ｉ≦３）が示す、図５（ｂ）の音色波形エリア情報テーブルの「エリア番号」項目値が１から４の各エントリに対応する各波形エリアの波形メモリ２０６の先頭アドレスからのアドレスオフセットは、ステップＳ８０７の繰返し処理により、固定的にｉ×１０００００Ｈ（０≦ｉ≦３）として算出される。すなわち、「エリア番号」項目値＝「１」「２」「３」「４」の各波形エリアのアドレスオフセットはそれぞれ、「０」、「１０００００Ｈ」、「２０００００Ｈ」、及び「３０００００Ｈ」として算出される。
【００４３】
その後、ＣＰＵ２０１は、現在読込み中の波形の番号を示す変数ＲＥＡＤＩＮＧ＿ＷＡＶＥ（図６参照）に、無効値「−１」を格納する。また、ＣＰＵ２０１は、図５（ａ）の音色毎履歴管理テーブルに対応するＲＡＭ２０３上の音色番号履歴変数ＴＳ＿ＨＩＳ［ｉ］（０≦ｉ≦７）の８エントリのうち、最新の履歴が格納されるべき要素値を格納するＲＡＭ２０３上のポインタ変数ＴＳ＿ＨＩＳ＿ＷＰ（図６参照）に、先頭位置を示す初期値「０」を格納する（以上、ステップＳ８１０）。
【００４４】
最後に、ＣＰＵ２０１は、音色番号の初期値「０」（Ｐｉａｎｏ）を格納したＲＡＭ２０３上の音色番号変数Ｔを引数として、音色切替えサブルーチンを実行する（ステップＳ８１１）。その後、ＣＰＵ２０１は、図８のフローチャートで示される図７のステップＳ７０１の初期化処理を終了する。
【００４５】
図９は、上述の図７のステップＳ７０１の初期化処理内の図８のステップＳ８１１の音色切替え処理、又は図７の音色選択イベント発生時（ステップＳ７０３の判定がＹｅｓのとき）のステップＳ７０４の音色切替え処理の、詳細例を示すフローチャートである。この処理の実行時には、ＲＡＭ２０３上の音色番号変数Ｔの値が引き渡される。音色番号変数Ｔには、ステップＳ８１１の実行時には前述したように初期値「０」が格納され、ステップＳ７０４の実行時には、ユーザによる図１の音色選択ボタン１０２の操作に基づいて図７のステップＳ７０２のユーザインタフェース処理で取り込まれたユーザが選択した音色の音色番号が格納される。
【００４６】
図９の音色切替え処理のフローチャートにおいて、ＣＰＵ２０１はまず、音色エリア検索サブルーチンを実行する（ステップＳ９０１）。この処理では、音色番号変数Ｔに得られている選択された音色番号が、波形メモリ２０６上の図３の４つの波形エリアのうちのどの波形エリアに存在するかが検索される。この処理の詳細については、図１０のフローチャートを用いて後述する。この処理の結果、ＲＡＭ２０３上の変数Ａに、波形エリアの番号（０≦Ａ≦３）が得られる。
【００４７】
次に、ＣＰＵ２０１は、変数Ａに得られた波形エリアの番号が無効値「−１」であるか否か、即ち、音色番号変数Ｔの選択音色番号が未だ波形メモリ２０６のどの波形エリアにもロードされていないか否かを判定する（ステップＳ９０２）。
【００４８】
音色番号変数Ｔの選択音色番号が既に波形メモリ２０６上の何れかの波形エリアにロードされている（ステップＳ９０２の判定がＮｏである）場合には、ＣＰＵ２０１は、変数Ａの値をＲＡＭ２０３上の変数Ｃ＿ＡＲＥＡにコピーする。変数Ｃ＿ＡＲＥＡは、現在選択されている波形データが読込み済みもしくは読込み中となっている、その波形データの格納先の波形エリアのエリア番号を示している（図６参照）。次に、ＣＰＵ２０１は、現在発音中の音色の音色番号を格納する変数Ｃ＿ＴＯＮＥ（図６参照）に、変数Ｔの値をコピーする（ステップＳ９１０）。その後、ＣＰＵ２０１は、図９のフローチャートで示される音色切替え処理を終了する。
【００４９】
音色番号変数Ｔの選択音色番号が未だ波形メモリ２０６上のどの波形エリアにもロードされていない（ステップＳ９０２の判定がＮｏである）場合には、ＣＰＵ２０１はまず、現在読込み中の波形の番号を示す変数ＲＥＡＤＩＮＧ＿ＷＡＶＥの値が無効値「−１」であるか否か、即ち、現在別の音色の波形データの読込み処理が実行中でないか否かを判定する（ステップＳ９０３）。
【００５０】
現在別の音色の波形データの読込み処理が実行中でない（ステップＳ９０３の判定がＹｅｓ）の場合には、ＣＰＵ２０１は、優先順位判断サブルーチンを実行する（ステップＳ９０４）。この処理では、図６（ｂ）に例示される音色波形エリア情報テーブル上の４つのエリアのエントリのうち、「優先度ポイント」項目値が最も小さい即ち優先順位が最も低いエントリのエリア番号が判断され、そのエリア番号が変数Ａにセットされる。新たに選択された音色の波形データは、大容量フラッシュメモリ２０４からこのエリア番号Ａの波形エリアにロードされる。この処理の詳細については、図１１のフローチャートを用いて後述する。
【００５１】
次に、ＣＰＵ２０１は、ＲＡＭ２０３上の現在選択されている波形データが読込み済みもしくは読込み中となっている、その波形データの格納先の波形エリアのエリア番号を示す変数Ｃ＿ＡＲＥＡ（図６参照）に、ステップＳ９０４で変数Ａにセットされたエリア番号の値をコピーする（ステップＳ９０５）。
【００５２】
一方、現在別の音色の波形データの読込み処理が実行中である場合には、上述のステップＳ９０４とＳ９０５の処理はスキップされる。このとき、変数Ｃ＿ＡＲＥＡには、その読込み処理が実行中の波形エリアのエリア番号がセットされている。従って、この場合には、次のステップＳ９０６の処理によって、その読込み処理が中止されて、その読込み処理中であった波形エリアに、新たに選択された音色の波形データが大容量フラッシュメモリ２０４からロードされることになる。
【００５３】
その後、ＣＰＵ２０１はまず、ＲＯＭ２０２に記憶されている図４（ａ）に例示されるフラッシュメモリ音色情報テーブルの、「音色名」項目の値が変数Ｔに得られている新たに選択された音色名に対応するエントリから「波形アドレスオフセット」項目値と「波形サイズ」項目値を抽出し、それらをそれぞれ、変数Ｃ＿ＡＲＥＡのエリア番号によって指定される読込み処理が開始される波形エリアに関するＲＡＭ２０３上の波形オフセット構造体要素ＷＭ＿ＳＴ［Ｃ＿ＡＲＥＡ］．ＦＬＡＳＨ＿ＯＦＦＳＥＴ及び波形サイズ構造体要素ＷＭ＿ＳＴ［Ｃ＿ＡＲＥＡ］．ＷＡＶＥ＿ＳＩＺＥ（共に図６参照）にコピーする。また、上記波形エリア上の波形データの有無を保持するＲＡＭ２０３上の構造体要素ＷＭ＿ＳＴ［Ｃ＿ＡＲＥＡ］．ＷＡＶＥに、まだ波形データが存在していないことを示す値「０」を初期設定する。更に、上記波形エリアへの前回までに転送済みの波形データのサイズを示す構造体要素ＷＭ＿ＳＴ［Ｗ］．ＲＥＡＤ＿ＳＩＺＥ（図６参照）に、未転送を示す値「０」を格納する。加えて、現在読込み中の波形の番号を示すＲＡＭ２０３上の変数ＲＥＡＤＩＮＧ＿ＷＡＶＥ（図６参照）に、新規であることを示す無効値「−１」を格納する。（以上、図９のステップＳ９０６）。
【００５４】
その後、ＣＰＵ２０１は、音色選択履歴更新サブルーチンを実行する（ステップＳ９０７）。この処理では、変数Ｔに保持されている新たに選択された音色の音色番号が、ＲＡＭ２０３内の図５（ａ）に例示される音色選択履歴管理テーブルに登録、更新される。この処理の詳細については、図１２のフローチャートを用いて後述する。
【００５５】
その後、ＣＰＵ２０１は、優先度計算サブルーチンを実行する（ステップＳ９０７）。この処理では、ステップＳ９０７で図５（ａ）に例示される音色選択履歴管理テーブルの内容が更新された後に、波形メモリ２０６内の４つの波形エリアについて、図５（ｂ）の音色波形エリア情報テーブルの「優先度ポイント」項目値が再計算される。この処理の詳細については、図１３のフローチャートを用いて後述する。
【００５６】
ステップＳ９０８の処理の後、ＣＰＵ２０１は、現在発音中の音色の音色番号を格納する変数Ｃ＿ＴＯＮＥ（図６参照）に、新たに選択された音色の音色番号が格納されている変数Ｔの値をコピーする（ステップＳ９１０）。その後、ＣＰＵ２０１は、図９のフローチャートで示される音色切替え処理を終了する。
【００５７】
図１０は、図９のステップＳ９０１の音色エリア検索サブルーチンの詳細処理例を示すフローチャートである。前述したように、この処理では、音色番号変数Ｔに得られている新たに選択された音色番号が、波形メモリ２０６上の図３の４つの波形エリアのうちのどの波形エリアに存在するかが検索される。
【００５８】
ＣＰＵ２０１はまず、各波形エリアのエリア番号を格納するカウンタ変数Ａについて、ステップＳ１００１において値「０」に初期設定した後、ステップＳ１００３で＋１ずつインクリメントしながら、ステップＳ１００４で値「４」に達したと判定するまで、新たに選択された音色番号を格納する変数Ｔの値が、変数Ａのエリア番号の波形エリアに割り当てられている音色番号を示す構造体要素ＷＭ＿ＳＴ［Ａ］．ＴＯＮＥの値と等しいか否かを判定する処理（ステップＳ１００２）を、繰り返し実行する。
【００５９】
ＣＰＵ２０１は、変数Ａの０から３までの何れかの値において、ステップ１００２の判定がＹｅｓになったら、その変数Ａの値を検索により見つかったエリア番号の戻り値として、図１０のフローチャートで示される図９のステップＳ９０１の処理を終了する。
【００６０】
ＣＰＵ２０１は、変数Ａの０から３までのどの値においてもステップ１００２の判定がＮｏで、やがてステップＳ１００４の判定がＹｅｓになると、変数Ａに検索で見つからなかったことを示す無効値「−１」を格納して戻り値とし、図１０のフローチャートで示される図９のステップＳ９０１の処理を終了する。
【００６１】
次に、図１１は、図９のステップＳ９０４の優先順位判断サブルーチンの詳細処理例を示すフローチャートである。前述したようにこの処理では、図６（ｂ）に例示される音色波形エリア情報テーブル上の４つのエリアのエントリのうち、「優先度ポイント」項目値が最も小さい即ち優先順位が最も低いエントリのエリア番号が判断される。本実施形態では、新たに選択された音色の波形データを大容量フラッシュメモリ２０４から波形メモリ２０６にロードするときに、波形メモリ２０６上の４つの波形エリアのうち、優先順位が最も低いエントリの波形データが、新たな波形データによって置換される。
【００６２】
ＣＰＵ２０１はまず、処理を行う波形エリアのエリア番号をカウントするＲＡＭ２０３上のカウンタ変数Ｗと、優先度が現時点で最も低い波形エリアのエリア番号を格納するＲＡＭ２０３上の変数Ａに、共に初期値０を格納する。また、ＣＰＵ２０１は、優先順位を比較するためのＲＡＭ２０３上のバッファ変数Ｓに、優先順位が非常に小さいことを示す大きな値「２５５」を格納する（ステップＳ１１０１）。
【００６３】
次に、ＣＰＵ２０１は、カウンタ変数Ｗについて、ステップＳ１１０１において上述のように値「０」を初期設定した後、ステップＳ１１０４で＋１ずつインクリメントしながら、ステップＳ１１０５で値「４」に達したと判定するまで、以下のステップＳ１１０２及びＳ１１０３の処理を、繰り返し実行する。ＣＰＵ２０１は、ステップＳ１１０２で、変数Ｗのエリア番号の波形エリアに割り当てられている優先度ポイントを示す構造体要素ＷＭ＿ＳＴ［Ｗ］．ＳＩＧの値が、優先順位比較バッファ変数Ｓの現在の値よりも小さいか否かを判定する。ステップＳ１１０２の判定がＹｅｓならば、ＣＰＵ２０１は、ステップＳ１１０３で、変数Ｗのエリア番号の波形エリアに割り当てられている優先度ポイントを示す構造体要素ＷＭ＿ＳＴ［Ｗ］．ＳＩＧの値を優先順位比較バッファ変数Ｓに格納し、優先度が現時点で最も低い波形エリアのエリア番号を格納する変数Ａに変数Ｗの値を格納する。この構造体要素ＷＭ＿ＳＴ［Ｗ］．ＳＩＧ（０≦Ｗ≦３）は、図５（ｂ）の音色波形エリア情報テーブルの「優先度ポイント」項目値に対応する。なお、図５（ｂ）の音色波形エリア情報テーブルの「音色番号（音色名）」項目値は、構造体要素ＷＭ＿ＳＴ［Ｗ］．ＴＯＮＥ（０≦Ｗ≦３）（図６参照）が対応する。ステップＳ１１０２の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ１１０３の処理はスキップして次のインクリメントされた変数Ｗが示すエリア番号についての処理に移行する。
【００６４】
以上のステップＳ１１０２からＳ１１０５までの一連の処理が繰り返し実行された結果、ステップＳ１１０５の判定がＹｅｓになると、ＣＰＵ２０１は、優先度が最終的に最も低い波形エリアのエリア番号を格納する変数Ａの値を戻り値として、図１１のフローチャートで示される図９のステップＳ９０４の優先順位判断サブルーチンの処理を終了する。
【００６５】
図１２は、図９のステップＳ９０７の音色選択履歴更新サブルーチンの詳細処理例を示すフローチャートである。前述したようにこの処理では、変数Ｔに保持されている新たに選択された音色の音色番号が、ＲＡＭ２０３内の図５（ａ）に例示される音色選択履歴管理テーブルに登録、更新される。
【００６６】
ＣＰＵ２０１はまず、ＲＡＭ２０３上のポインタ変数ＴＳ＿ＨＩＳ＿ＷＰ（図６参照）が示す最新の履歴が格納されるべきＲＡＭ２０３上の音色番号履歴変数ＴＳ＿ＨＩＳ［ｉ］（図６参照）に、変数Ｔに保持されている新たに選択された音色の音色番号を格納する（ステップＳ１２０１）。
【００６７】
次に、ＣＰＵ２０１は、ポインタ変数ＴＳ＿ＨＩＳ＿ＷＰの値を＋１進める（ステップＳ１２０２）。
【００６８】
続いて、ＣＰＵ２０１は、ポインタ変数ＴＳ＿ＨＩＳ＿ＷＰの値が「８」に達したか否かを判定する（ステップＳ１２０３）。
【００６９】
ステップＳ１２０３の判定がＹｅｓの場合、ＣＰＵ２０１は、ポインタ変数ＴＳ＿ＨＩＳ＿ＷＰの値を０にリセットする（ステップＳ１２０４）。ステップＳ１２０３の判定がＮｏの場合、ＣＰＵ２０１は、ステップＳ１２０４の処理はスキップする。その後、ＣＰＵ２０１は、図１２のフローチャートで示される図９のステップＳ９０７の音色選択履歴更新サブルーチンの処理を終了する。
【００７０】
以上の音色選択履歴更新サブルーチンの処理により、ＲＡＭ２０３上の図５（ａ）の音色選択履歴管理テーブルにおいて、ポインタ変数ＴＳ＿ＨＩＳ＿ＷＰが示す発生順序毎に、「選択音色番号（音色名）」項目に変数Ｔの新たに選択された音色番号が設定されてゆく。
【００７１】
図１３は、図９のステップＳ９０７の優先度計算サブルーチンの詳細処理例を示すフローチャートである。前述したようにこの処理では、ステップＳ９０７で図５（ａ）に例示される音色選択履歴管理テーブルの内容が更新された後に、波形メモリ２０６内の４つの波形エリアについて、図５（ｂ）の音色波形エリア情報テーブルの「優先度ポイント」項目値が再計算される。
【００７２】
ＣＰＵ２０１はまず、図５（ｂ）の音色波形エリア情報テーブルの上で処理を行う波形エリアのエリア番号をカウントするＲＡＭ２０３上のカウンタ変数Ｗについて、ステップＳ１３０１において値「０」を初期設定した後、ステップＳ１３０３で＋１ずつインクリメントしながら、ステップＳ１３０４で値「４」に達したと判定するまで、図５（ｂ）の音色波形エリア情報テーブルの変数Ｗが示すエリア番号の「優先度ポイント」項目値に対応する構造体要素ＷＭ＿ＳＴ［Ｗ］．ＳＩＧの値を「０」にリセットする処理（ステップＳ１３０２）を、繰り返し実行する。
【００７３】
次に、ＣＰＵ２０１は、図５（ａ）の音色選択履歴管理テーブルの各履歴エントリをカウントするためのＲＡＭ２０３上の履歴番号カウンタ変数Ｈについて、ステップＳ１３０５で値「０」に初期化した後、ステップＳ１３０９で＋１ずつインクリメントしながら、ステップＳ１３１０で値「８」に達したと判定されるまで、以下のステップＳ１３０８からＳ１３０８までの一連の処理を、繰り返し実行する。
【００７４】
上述の一連の処理において、ＣＰＵ２０１は更に、図５（ｂ）の音色波形エリア情報テーブル上で処理を行う波形エリアのエリア番号をカウントするＲＡＭ２０３上のカウンタ変数Ｗについて、ステップＳ１３０６において値「０」を初期設定した後、ステップＳ１３１０で＋１ずつインクリメントしながら、ステップＳ１３１１で値「４」に達したと判定するまで、図５（ｂ）の音色波形エリア情報テーブルの変数Ｗが示すエリア番号の各エントリ毎に、以下のステップＳ１３０７からＳ１３０９までの一連の処理を繰り返し実行する。
【００７５】
この一連の処理において、ＣＰＵ２０１はまず、履歴番号カウンタ変数Ｈが示す音色番号履歴変数ＴＳ＿ＨＩＳ［Ｈ］に、無効値「−１」が格納されているか否かを判定する（ステップＳ１３０７）。
【００７６】
ステップＳ１３０７の判定がＮｏの場合、ＣＰＵ２０１は、上記音色番号履歴変数ＴＳ＿ＨＩＳ［Ｈ］の値が、図５（ｂ）の音色波形エリア情報テーブルの変数Ｗが示すエリア番号に対応するエントリの「音色番号（音色名）」項目を示す構造体要素ＷＭ＿ＳＴ［Ｗ］．ＴＯＮＥ（図６参照）の値に等しいか否かを判定する（ステップＳ１３０８）。
【００７７】
音色番号履歴変数ＴＳ＿ＨＩＳ［Ｈ］の値が構造体要素ＷＭ＿ＳＴ［Ｗ］．ＴＯＮＥの値に等しい（ステップＳ１３０８の判定がＹｅｓ）ならば、ＣＰＵ２０１は、図５（ｂ）の音色波形エリア情報テーブルの変数Ｗが示すエリア番号に対応するエントリの「優先度ポイント」項目を示す構造体要素ＷＭ＿ＳＴ［Ｗ］．ＳＩＧ（図６参照）の値に、図４（ｂ）の音色選択優先度テーブルの履歴番号カウンタ変数Ｈが示す発生順序のエントリの「優先度ポイント」項目を示す変数ＨＩＳ＿ＳＩＧ［Ｈ］（図６参照）の値を加算し、その加算結果値を新たに構造体要素ＷＭ＿ＳＴ［Ｗ］．ＳＩＧに格納する（ステップＳ１３０９）。
【００７８】
履歴番号カウンタ変数Ｈが示す音色番号履歴変数ＴＳ＿ＨＩＳ［Ｈ］に、無効値「−１」が格納されている場合（ステップＳ１３０７の判定がＹｅｓの場合）、又は音色番号履歴変数ＴＳ＿ＨＩＳ［Ｈ］の値が構造体要素ＷＭ＿ＳＴ［Ｗ］．ＴＯＮＥの値に等しくない（ステップＳ１３０８の判定がＮｏ）ならば、ＣＰＵ２０１は、ステップＳ１３０９の処理はスキップして、インクリメントされた次の変数Ｗに対応するエリア番号に対する処理に移行する。
【００７９】
以上のステップＳ１３０５からＳ１３１０までの一連の処理により、図５（ｂ）に示されるように、波形メモリ２０６上の４つの波形エリアのそれぞれについて、当該波形エリアに読み込まれている波形データの音色番号（音色名）が図５（ａ）の音色選択履歴管理テーブルの選択音色番号（音色名）から検索され、マッチしたエントリの優先度ポイントの合計値が、当該波形エリアの優先度ポイントとして集計される。
【００８０】
ステップＳ１３１０の判定がＹｅｓになると、ＣＰＵ２０１は、図１３のフローチャートで示される図９のステップＳ９０８の優先度計算サブルーチンの処理を終了する。
【００８１】
図１４は、図７のステップＳ７０７の音源発音処理の詳細例を示すフローチャートである。
【００８２】
ＣＰＵ２０１はまず、変数Ｃ＿ＡＲＥＡのエリア番号を示す最新に選択されている波形データの格納先の波形エリアの有無を示す構造体要素ＷＭ＿ＳＴ［Ｗ］．ＷＡＶＥ（図６参照）の値が「１」であるか否か、すなわち、その波形エリアに波形データが存在するか否かを判定する（ステップＳ１４０１）。
【００８３】
ＣＰＵ２０１は、当該波形エリアに波形データが存在する（ステップＳ１４０１の判定がＹｅｓ）ならば、その波形データに対する発音処理を、音源ＬＳＩ２０５に対して指示する発音処理を実行する（ステップＳ１４０２）。
【００８４】
ＣＰＵ２０１は、当該波形エリアに波形データが未だ読み込まれていない（ステップＳ１４０１の判定がＮｏ）ならば、ステップＳ１４０２の発音処理はスキップし、発音を行わない。
【００８５】
図１５は、図７のステップＳ７１１の波形読込み処理の詳細例を示すフローチャートである。演奏による発音処理を止めないようにするために、図７に例示したメインループにおいて、ステップＳ７１１で波形読込み処理だけに処理を集中させず、他の処理も並行に処理するために、ステップＳ７１１で波形読込み処理の１回の実行においては、一定の容量のメモリ転送が完了した時点で処理を中断し、他のメインループの処理を行って再び波形転送プログラムが起動された時に処理が再開される。
【００８６】
ＣＰＵ２０１はまず、ＲＡＭ２０３上の変数である今回読込みサイズカウンタ変数ｃに初期値「０」をセットする。また、ＣＰＵ２０１は、大容量フラッシュメモリ２０４上の読込みアドレスを示すＲＡＭ２０３上の変数ｒｐに、先頭アドレス値「０」をセットする。更に、ＣＰＵ２０１は、波形メモリ２０６上の書込みアドレスを示すＲＡＭ２０３上の変数ｗｐに、先頭アドレス値「０」をセットする。加えて、ＣＰＵ２０１は、ＲＡＭ２０３上の変数ａに、ＲＡＭ２０３上の現在選択されている波形データが読込み済みもしくは読込み中となっている、その波形データの格納先の波形エリアのエリア番号を示す変数Ｃ＿ＡＲＥＡ（図６参照）の値を格納する（以上、図１５のステップＳ１５０１）。
【００８７】
次に、ＣＰＵ２０１は、ＲＡＭ２０３上の変数ＲＥＡＤＩＮＧ＿ＷＡＶＥが示す現在読込み中の波形の番号の値が無効値「−１」であるか否か、すなわち、現在波形データの読込みが行われていないか否かを判定する（図１５のステップＳ１５０２）。
【００８８】
現在波形データの読込みが行われておらず新規の読込み処理である場合（ステップＳ１５０２の判定がＹｅｓの場合）には、ＣＰＵ２０１は、変数ＲＥＡＤＩＮＧ＿ＷＡＶＥに、ＲＡＭ２０３上の変数Ｃ＿ＴＯＮＥ（図６参照）に格納されている現在の音色番号の値を格納する。また、ＣＰＵ２０１は、変数ａが示す処理対象の波形エリアへの前回までに転送済みの波形データのサイズを示す構造体要素ＷＭ＿ＳＴ［ａ］．ＲＥＡＤ＿ＳＩＺＥ（図６参照）に、未転送を示す初期値「０」を格納する（以上、ステップＳ１５０３）。
【００８９】
現在波形データの読込みが行われており継続の読込み処理である場合（ステップＳ１５０２の判定がＮｏの場合）には、ＣＰＵ２０１は、ステップＳ１５０３の処理はスキップし、変数ＲＥＡＤＩＮＧ＿ＷＡＶＥと構造体要素ＷＭ＿ＳＴ［ａ］．ＲＥＡＤ＿ＳＩＺＥの値はそのまま引き継ぐ。
【００９０】
その後、ＣＰＵ２０１は、ステップＳ１５０４以降の処理に移行し、変数Ｗに得られた波形番号の波形データを大容量フラッシュメモリ２０４から波形メモリ２０６へ転送する処理を開始する。
【００９１】
ＣＰＵ２０１はまず、大容量フラッシュメモリ２０４からの読込み処理を実行する（ステップＳ１５０４）。即ち、ＣＰＵ２０１は、変数ｒｐ（初期値はステップＳ１５０１でセットされた「０」）の値に、図７のステップＳ７０４の音色切替え処理内の図９のステップＳ９０６で変数ａ（＝変数Ｃ＿ＡＲＥＡ）の処理対象波形エリアに対応する構造体要素ＷＭ＿ＳＴ［ａ］．ＯＦＦＳＥＴ＿ＡＤＲＳに格納されたオフセットアドレス値を加算する。更に、ＣＰＵ２０１は、変数ｒｐの値に、変数ａ（＝変数Ｃ＿ＡＲＥＡ）が示す処理対象波形エリアに対応する前回までに転送済みの波形データのサイズを示す構造体要素ＷＭ＿ＳＴ［ａ］．ＲＥＡＤ＿ＳＩＺＥの値を加算する。そして、ＣＰＵ２０１は、このようにして得られる変数ｒｐが示す大容量フラッシュメモリ２０４上のアドレスから、１ワード分の波形データを読み込み、ＲＡＭ２０３上の変数ｄに格納する。
【００９２】
次に、ＣＰＵ２０１は、波形メモリ２０６への書込み処理を実行する（ステップＳ１５０５）。即ち、ＣＰＵ２０１は、変数ｗｐ（初期値はステップＳ１５０１でセットされた「０」）の値に、ステップＳ１５０４と同様の構造体要素ＷＭ＿ＳＴ［ａ］．ＯＦＦＳＥＴ＿ＡＤＲＳに格納されたオフセットアドレス値を加算する。更に、ＣＰＵ２０１は、変数ｗｐの値に、ステップＳ１５０４と同様の構造体要素ＷＭ＿ＳＴ［ａ］．ＲＥＡＤ＿ＳＩＺＥの値を加算する。そして、ＣＰＵ２０１は、このようにして得られる変数ｗｐが示す波形メモリ２０６上のアドレスに、変数ｄに格納されている１ワード分の波形データを、音源ＬＳＩ２０５経由で書き込む。
【００９３】
その後、ＣＰＵ２０１は、今回までに転送済みの波形データのサイズを示す構造体要素ＷＭ＿ＳＴ［ａ］．ＲＥＡＤ＿ＳＩＺＥの値を＋１インクリメントし、今回読込みサイズカウンタ変数ｃの値を＋１インクリメントする（ステップＳ１５０６）。
【００９４】
そして、ＣＰＵ２０１は、今回までに転送済みの波形データのサイズを示す構造体要素ＷＭ＿ＳＴ［ａ］．ＲＥＡＤ＿ＳＩＺＥの値が、変数ａが示す処理対象波形エリアに対応する波形データのサイズ要素ＷＭ＿ＳＴ［ａ］．ＷＡＶＥ＿ＳＩＺＥの値に等しくなったか否かを判定する（ステップＳ１５０７）。
【００９５】
ステップＳ１５０７の判定がＮｏならば、ＣＰＵ２０１は、今回読込みサイズカウンタ変数ｃの値が１０００００バイトに等しくなったか否か、すなわち、今回転送されたサイズが１００ＫＢ（キロバイト）に達したか否かを判定する（ステップＳ１５０８）。
【００９６】
ステップＳ１５０８の判定がＮｏならば、ＣＰＵ２０１は、ステップＳ１５０４の処理に戻って転送を続行する。
【００９７】
ステップＳ１５０７の判定がＹｅｓになると、ＣＰＵ２０１は、変数ａが示す処理対象波形エリアでの波形データの有無を示す要素ＷＭ＿ＳＴ［ａ］．ＷＡＶＥ（図６参照）に、波形有りを示す値「１」をセットする。また、ＣＰＵ２０１は、現在読込み中の波形の番号を示す変数ＲＥＡＤＩＮＧ＿ＷＡＶＥ（図６参照）に、無効値「−１」を格納する（以上、ステップＳ１５０９）。
【００９８】
ステップＳ１５０９の処理の後、又はステップＳ１５０８の判定がＹｅｓとなったら、ＣＰＵ２０１は、図１５のフローチャートで示される図７のステップＳ７１１の波形読込み処理を終了する。
【００９９】
このように、本実施形態では、一定の容量（例えば１００ＫＢ）のメモリ転送が完了した時点で処理が中断され、他のメインループの処理を行って再び波形転送プログラムが起動された時に図１８のステップＳ１８０２からＳ１８０３を介して、処理が再開される。このとき、変数Ｗの波形番号に対応する前回までに転送済みのデータサイズを示す要素値ＷＭ＿ＳＴ［Ｗ］．ＲＥＡＤ＿ＳＩＺＥには、図１９のステップＳ１８１２の処理によって前回までに転送が完了したサイズが格納されているため、図１８のステップＳ１８０５、図１９のステップＳ１８０６及びＳ１８０７のアドレス演算処理によって、前回転送が完了したアドレスの次のアドレスから転送を再開することができる。
【０１００】
以上説明した実施形態により、音色選択の際に、現実的な再読み込みの可能性を予測して使用可能性の低いと思われる波形から書き換えを行うようにしたので、波形読み込みの発生する可能性を低く抑えることができ、波形無音時間の期待値を短縮することが可能となる。これにより、演奏者のストレスを軽減、或いは全く感じさせないレベルに抑制することができる。
【０１０１】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１)
楽音の音色夫々に対応した音色波形データのいずれかを指定するための音色選択情報が入力される毎に、前記入力された音色選択情報の入力順序に対応する優先値を前記入力された音色選択情報に付与する優先度付与処理と、
前記入力された音色選択情報に対応する音色波形データが、第１の記憶装置内に設けられ音色波形データ夫々が記憶可能な複数の波形エリアのいずれにも記憶されていない場合に、前記複数の波形エリア夫々に記憶されている音色波形データに対応する音色選択情報に付与された優先値に基づき、前記複数の波形エリアからひとつの波形エリアを選択する選択処理と、
前記入力された音色選択情報に対応する音色波形データを第２の記憶装置から読み出すとともに、前記読み出された音色波形データを、前記選択された波形エリアに書き込む波形書き込み処理と、
を実行する処理部を備えた波形書き込み装置。
（付記２）
前記処理部は、前記優先度付与処理において、前記入力された音色選択情報と前記音色波形情報に付与された優先値とをメモリに記憶する処理を実行する、付記１に記載の波形書き込み装置。
（付記３）
前記第１の記憶装置は、ランダムアクセスメモリを備え、前記第２の記憶装置は、前記第１の記憶装置より容量の大きいフラッシュメモリを備えた、付記１又は２記載の波形書き込み装置。
（付記４）
前記処理部は、前記選択処理において、前記音色選択情報に付与された優先値を、前記音色選択情報毎に累算し、前記累算された優先値に基づき、前記複数の波形エリアからひとつの波形エリアを選択する処理を実行する、付記１乃至３のいずれかに記載の波形書き込み装置。
（付記５）
前記入力順序が新しい音色選択情報順に、大きな優先値が付与され、
前記処理部は、前記選択処理において、前記累算された優先値が最小の音色選択情報を記憶する波形エリアを検索する処理を実行する、付記４に記載の波形書き込み装置。
（付記６）
前記処理部は、前記波形書き込み処理として、
前記音色波形データの前記波形エリアへの読込みが完了前に、前記音色波形データに対応する音色選択情報とは異なる新たな音色選択情報が入力された場合は、前記波形エリアへの前記音色波形データの読込み処理を中止するとともに、前記波形エリアに、前記新たな音色選択情報に対応する音色波形データを前記第２の記憶装置から読み込ませる、付記１乃至５のいずれかに記載の波形書き込み装置。
（付記７）
処理部を有する波形書き込み装置に用いられる波形書き込み方法であって、前記処理部は、
楽音の音色夫々に対応した音色波形データのいずれかを指定するための音色選択情報が入力される毎に、前記入力された音色選択情報の入力順序に対応する優先値を前記入力された音色選択情報に付与し、
前記入力された音色選択情報に対応する音色波形データが、第１の記憶装置内に設けられ音色波形データ夫々が記憶可能な複数の波形エリアのいずれにも記憶されていない場合に、前記複数の波形エリア夫々に記憶されている音色波形データに対応する音色選択情報に付与された優先値に基づき、前記複数の波形エリアからひとつの波形エリアを選択し、
前記入力された音色選択情報に対応する音色波形データを前記第２の記憶装置から読み出すとともに、前記読み出された音色波形データを、前記選択された波形エリアに書き込む、波形書き込み方法。
（付記８）
波形書き込み装置に用いられるコンピュータに、
楽音の音色夫々に対応した音色波形データのいずれかを指定するための音色選択情報が入力される毎に、前記入力された音色選択情報の入力順序に対応する優先値を前記入力された音色選択情報に付与する優先度付与ステップと、
前記入力された音色選択情報に対応する音色波形データが、第１の記憶装置内に設けられ音色波形データ夫々が記憶可能な複数の波形エリアのいずれにも記憶されていない場合に、前記複数の波形エリア夫々に記憶されている音色波形データに対応する音色選択情報に付与された優先値に基づき、前記複数の波形エリアからひとつの波形エリアを選択する選択ステップと、
前記入力された音色選択情報に対応する音色波形データを前記第２の記憶装置から読み出すとともに、前記読み出された音色波形データを、前記選択された波形エリアに書き込む書き込みステップと、
を実行させるプログラム。
（付記９）
付記１乃至６に記載の波形書き込み装置と、
演奏情報を入力する演奏操作子と、
音色選択情報を入力する音色選択操作子と、
複数種の音色波形データが記憶された第１の記憶装置と、
第２の記憶装置と、
前記演奏操作子による演奏情報の入力に応答して、前記第２の記憶装置から読み出された波形データに対応する楽音を生成する音源と、
を備えた電子楽器。
【符号の説明】
【０１０２】
１００  電子鍵盤楽器
１０１  鍵盤
１０２  音色選択ボタン
１０３  機能選択ボタン
１０４  ベンダ／モジュレーション・ホイール
１０５  ＬＣＤ
２０１  ＣＰＵ
２０２  ＲＯＭ
２０３  ＲＡＭ
２０４  大容量フラッシュメモリ
２０５  音源ＬＳＩ
２０６  波形メモリ
２０７  キー・スキャナ
２０８  Ａ／Ｄコンバータ
２０９  ＬＣＤコントローラ
２１０  Ｄ／Ａコンバータ
２１１  アンプ
２１３  ＭＩＤＩ  Ｉ／Ｆ
２１４  システムバス
【図１】
0006657693.tif 000002
【図２】
0006657693.tif 000003
【図３】
0006657693.tif 000004
【図４】
0006657693.tif 000005
【図５】
0006657693.tif 000006
【図６】
0006657693.tif 000007
【図７】
0006657693.tif 000008
【図８】
0006657693.tif 000009
【図９】
0006657693.tif 000010
【図１０】
0006657693.tif 000011
【図１１】
0006657693.tif 000012
【図１２】
0006657693.tif 000013
【図１３】
0006657693.tif 000014
【図１４】
0006657693.tif 000015
【図１５】
0006657693.tif 000016