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