(57)【要約】【課題】トータルでのトラフィック平均値を低減できる楽音発生装置、方法、及びプログラム、並びに電子楽器を提供する。【解決手段】波形データのループ区間（ループアドレスからエンドアドレスまで）が最初から必ず波形バッファｖに収まるように、即ち、ループアドレスが必ず波形バッファｖの先頭に配置されるように、スタートアドレスの波形データの波形バッファｖ上での書込みアドレスが逆算により算出されて、その書込みアドレスから転送が開始される。音源ＬＳＩも、波形バッファｖ上の上記書込みアドレスから波形データの読み込みを開始し、ループ区間に入ると、当初は波形バッファｖの最後尾に設定されていたエンドアドレスが、実際の波形データのエンドアドレスの位置に変更される。それ以降は、音源ＬＳＩが波形バッファｖ内でループ処理を行うので、ＣＰＵによる波形転送は必要なくなる。【選択図】図８
2019028198.tif 000002
【特許請求の範囲】
【請求項１】
第１記憶手段内の第１波形データを第２記憶手段に転送する第１転送処理と、
前記第１波形データに続く第２波形データのサイズが前記第２記憶手段における複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理と、
前記判定処理により前記第２波形データのサイズが前記いずれかの領域のサイズより大きくないと判定された場合に、前記第２波形データを前記いずれかの領域に転送する第２転送処理と、
を実行する第１プロセッサと、
前記第２記憶手段に転送された前記第１波形データを読み込む第１読込処理と、
前記第２記憶手段における前記いずれかの領域に転送された前記第２波形データを読み込む第２読込処理と、
を実行する第２プロセッサと、
を有する楽音発生装置。
【請求項２】
少なくとも前記第１プロセッサ及び前記第２プロセッサのいずれかのプロセッサは、前記第１波形データに基づく出力が発音部からなされた後、前記第２波形データに基づく出力が前記発音部から繰り返しなされるように制御している、ことを特徴とする請求項１に記載の楽音発生装置。
【請求項３】
前記第１プロセッサは、前記第２波形データに基づく出力が発音部からなされている際に、前記第２転送処理を実行していないことを特徴とする請求項１又は２に記載の楽音発生装置。
【請求項４】
前記第１波形データは、開始位置から繰返し位置の前までの波形データを含み、
前記第２波形データは、前記繰返し位置から終了位置までの波形データを含み、
前記第１プロセッサは、前記第２記憶手段内への前記第１波形データの転送の位置が前記第２プロセッサによる前記第１波形データの読込みの位置を越えないように制御しながら、前記第１転送処理を実行している、
ことを特徴とする請求項１乃至３のいずれかに記載の楽音発生装置。
【請求項５】
前記第１プロセッサは、前記第２波形データにおける前記繰返し位置が前記第２記憶手段内のいずれかの領域の先頭になるように、前記第２記憶手段内における前記第１波形データの書込み開始位置を算出する算出処理を実行することを特徴とする請求項４に記載の楽音発生装置。
【請求項６】
第１記憶手段内の第１波形データを第２記憶手段に転送する第１転送処理と、
前記第１波形データに続く第２波形データのサイズが前記第２記憶手段における複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理と、
前記判定処理により前記第２波形データのサイズが前記いずれかの領域のサイズより大きくないと判定された場合に、前記第２波形データを前記いずれかの領域に転送する第２転送処理と、
を第１プロセッサに実行させ、
前記第２記憶手段に転送された前記第１波形データを読み込む第１読込処理と、
前記第２記憶手段における前記いずれかの領域に転送された前記第２波形データを読み込む第２読込処理と、
を第２プロセッサに実行させる、
ことを特徴とする楽音発生方法。
【請求項７】
第１記憶手段内の第１波形データを第２記憶手段に転送する第１転送処理と、
前記第１波形データに続く第２波形データのサイズが前記第２記憶手段における複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理と、
前記判定処理により前記第２波形データのサイズが前記いずれかの領域のサイズより大きくないと判定された場合に、前記第２波形データを前記いずれかの領域に転送する第２転送処理と、
を第１プロセッサに実行させ、
前記第２記憶手段に転送された前記第１波形データを読み込む第１読込処理と、
前記第２記憶手段における前記いずれかの領域に転送された前記第２波形データを読み込む第２読込処理と、
を第２プロセッサに実行させる、
ためのプログラム。
【請求項８】
請求項１乃至５の何れかに記載の楽音発生装置と、
前記第１波形データ及び前記第２波形データに基づいて発音する発音部と、
を備える電子楽器。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、楽音発生装置、方法、プログラム、及びその装置を用いた電子楽器に関する。
【背景技術】
【０００２】
波形読込み方式により楽音波形を発生する音源装置では、より多数の、より長時間の波形データを利用できるようにするために、使用しない波形データは例えばＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）、フラッシュメモリ、又はハードディスク記憶装置等の二次記憶装置（第１記憶手段）の音色波形領域に保存しておき、その中で使用する波形データを音源装置が直接アクセスできる高速な波形バッファとして機能する例えばＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）等の一次記憶装置（第２記憶手段）に転送して発音させるというシステムを採用するものがある。つまり、高価なＲＡＭが有する記憶容量以上の記憶容量の波形データを安価なＲＯＭに保持しておき、必要な場合のみそれを波形バッファに移動して発音に使用するというコスト的には効率的な方法であると言える。
【０００３】
ところで楽音波形データのサイズは様々であり、理想的には全ての発音チャンネル分の夫々の波形データをそのまま格納できるだけの領域が第２記憶手段の波形バッファ上に用意されていることが好ましいが、現実には、コストを抑えるために、第２記憶手段の波形バッファ上に十分な領域が用意されていない。そのため、波形バッファを楽音波形データのサイズを気にする必要のないいわゆる「リングバッファ」として機能させ、発音部が発音中に音源が対象発音チャネルの波形バッファ（リングバッファ領域）の所定区間を繰り返し読み出すのと並行して、ＣＰＵが波形バッファに波形データを逐次補充している。
【０００４】
従来技術としては、例えば特許文献１に記載の技術が知られている。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０００−１２２６６８号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかし、上述の方法は、波形バッファの容量は少なくて済むが、転送データのトラフィックが多いために、ＣＰＵやメモリシステムのバスの占有率が高くなり同時発音数の減少、演奏レイテンシーの悪化等、性能低下を招くという課題があった。また、その性能低下を少なくするために高性能なＣＰＵやバスシステムを使用すればコストが増大する。
【０００７】
そこで、本発明は、第１プロセッサが第１記憶手段内の波形データを第２記憶手段に良好に転送し、第２プロセッサが第２記憶手段内の波形データを良好に読み込む楽音発生装置等を提供することを目的とする。
【課題を解決するための手段】
【０００８】
態様の一例では、第１記憶手段内の第１波形データを第２記憶手段に転送する第１転送処理と、第１波形データに続く第２波形データのサイズが第２記憶手段における複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理と、判定処理により第２波形データのサイズがいずれかの領域のサイズより大きくないと判定された場合に、第２波形データをいずれかの領域に転送する第２転送処理と、を実行する第１プロセッサと、第２記憶手段に転送された第１波形データを読み込む第１読込処理と、第２記憶手段におけるいずれかの領域に転送された第２波形データを読み込む第２読込処理と、を実行する第２プロセッサと、を有する。
【発明の効果】
【０００９】
本発明によれば、第１プロセッサが第１記憶手段内の波形データを第２記憶手段に良好に転送し、第２プロセッサが第２記憶手段内の波形データを良好に読み込むことができる。
【図面の簡単な説明】
【００１０】
【図１】本発明による電子鍵盤楽器の一実施形態の外観図である。
【図２】電子鍵盤楽器の一実施形態のハードウェア例を示す図である。
【図３】音源ＬＳＩのブロックである。
【図４】音色波形のスプリット制御の説明図である。
【図５】「フラッシュメモリ音色波形ディレクトリ」のデータ例を示す図である。
【図６】「ＲＡＭ波形バッファディレクトリ」のデータ例を示す図である。
【図７】大容量フラッシュメモリ上の音色波形領域からＲＡＭ上の波形バッファへの音色波形転送動作及びＴｙｐｅＣのリングバッファの動作の説明図である。
【図８】ＴｙｐｅＢのループ波形転送動作の説明図である。
【図９】メインルーチンの処理例を示すフローチャートである。
【図１０】初期化処理、音色選択処理、及び離鍵処理の詳細例を示すフローチャートである。
【図１１】押鍵処理の詳細例を示すフローチャートである。
【図１２】波形転送管理処理の例を示すフローチャート（その１）である。
【図１３】波形転送管理処理の例を示すフローチャート（その２）である。
【図１４】波形読出し、波形バッファ転送処理及び音源イベント処理の例を示すフローチャートである。
【図１５】音源定期処理及びｒｐ更新処理の詳細例を示すフローチャートである。
【図１６】マージン確認処理の詳細例を示すフローチャートである。
【発明を実施するための形態】
【００１１】
以下、本発明を実施するための形態について図面を参照しながら詳細に説明する。本実施形態は、例えば電子鍵盤楽器に適用される、音高（鍵域）や音量（ベロシティ：打鍵の速さ）などの演奏情報によって音色が変化するのを再現するために、例えば大容量フラッシュメモリ２０８である第１記憶手段の音色波形領域から例えばＲＡＭ２０４である第２記憶手段の波形バッファに、音高又は音量ごとの波形データ（以下これを「スプリット波形」と呼ぶ）を転送する楽音発生装置を対象とする。本実施形態は、このような楽音発生装置において、例えばＣＰＵである第１プロセッサが、例えば大容量フラッシュメモリである第１記憶手段内の第１波形データを、例えばＲＡＭである第２記憶手段に転送する第１転送処理を実行する。また、第１プロセッサが、第１波形データに続く第２波形データのサイズが第２記憶手段内の複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理を実行する。更に、第１プロセッサは、上記判定処理により第２波形データのサイズが第２記憶手段内のいずれかの領域のサイズより大きくないと判定された場合に、第２波形データをいずれかの領域に転送する第２転送処理を実行する。これに加えて、例えば音源ＬＳＩ（大規模集積回路）である第２プロセッサが、第２記憶手段におけるいずれかの領域に転送された第１波形データを読み込む第１読込処理を実行する。また、第２プロセッサが、第２記憶手段におけるいずれかの領域に転送された第２波形データを読み込む第２読込処理を実行する。より具体的には例えば、第２プロセッサによる第１読込処理により読み込まれた第１波形データが発音部から出力された後、第２プロセッサによる第２読込処理により読み込まれた第２波形データが上記発音部から繰り返し出力される。この場合例えば、第１波形データは、開始位置から繰返し位置の前までの波形データを含み、第２波形データは、繰返し位置から終了位置までの波形データを含む。そして、第１転送処理は、例えば、第１プロセッサによる転送の位置が第２プロセッサによる読出しの位置を追い越さないように制御しながら、第１プロセッサが第１波形データを一回で或いは複数回に分けて、第２記憶手段内のいずれかの領域に転送する処理である。更に、第２転送処理は、第１プロセッサが第２波形データの全体を、第２記憶手段内のいずれかの領域に例えば一回で転送する処理である。もっとも、第２転送処理では、第１プロセッサは第２波形データの全体を、第１記憶手段内から第２記憶手段に一回で転送しなくても、複数回に分けて転送してもよい。本発明によれば、繰り返し発音部から出力すべき波形データともいえる第２波形データを、第１プロセッサが第１記憶手段内から第２記憶手段内に繰り返し転送しないため、トラフィックを低減することができ、結果として性能低下を改善する事ができる楽音発生装置を実現できる。
【００１２】
図１は、本発明による電子鍵盤楽器の一実施形態の外観図である。本実施形態は、電子鍵盤楽器１００として実施される。電子鍵盤楽器１００は、演奏操作子としての複数の鍵からなる鍵盤１０１と、音色選択操作子としての音色選択を行うための音色選択ボタン１０２及び音色以外の各種機能選択を行う機能選択ボタン１０３からなるスイッチ・パネルと、ピッチベンドやトレモロ、ビブラート等の各種モジュレーション（演奏効果）を付加するベンダ／モジュレーション・ホイール１０４、音色や音色以外の各種設定情報を表示するＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ：液晶ディスプレイ）１０５等を備える。また、電子鍵盤楽器１００は、特には図示しないが、演奏により生成された楽音を放音するスピーカを裏面部、側面部、又は背面部等に備える。
【００１３】
音色選択ボタン１０２は、図１に示されるように、ピアノ（図中「Ｐｉａｎｏ」）、エレクトリックピアノ（図中「Ｅ．ｐｉａｎｏ」）、オルガン（図中「Ｏｒｇａｎ」）、ギター（図中「Ｇｕｉｔａｒ）等の各種音色のカテゴリを選択するためのボタン群である。ユーザは、この音色選択ボタン１０２を押下することにより、例えば１６音色のうちのいずれかを選択することができる。
【００１４】
図２は、図１の電子鍵盤楽器１００の実施形態のハードウェア例を示す図である。図２の電子鍵盤楽器１００において、システム全体はバスコントローラ２０１によって制御されるバス２０２を中心に構成される。バスコントローラ２０１はバス２０２上のデータの流れを司るものであるが、その役割は、バス２０２に接続されたデバイスの優先順位のコントロールである。例えば、メモリコントローラ２０３を介してバス２０２に接続されるＲＡＭ２０４は、ＣＰＵ２０５と音源ＬＳＩ２０６によって共有されているが、発音を行う音源ＬＳＩ２０６はデータの欠落が許されないために優先度が最も高く設定されており、必要に応じてＣＰＵ２０５のアクセスを制限する。
【００１５】
バス２０２には、ＣＰＵ２０５、音源ＬＳＩ２０６、フラッシュメモリコントローラ２０７、メモリコントローラ２０３、ＤＭＡ（ダイレクトメモリアクセス）コントローラ２０９、Ｉ／Ｏ（入出力）コントローラ２１０、Ｉ／Ｏコントローラ２１０を介して接続されるキー・スキャナ２１１とＬＣＤコントローラ２１２とＡ／Ｄ（アナログ／デジタル）コンバータ２１３が接続される。
【００１６】
ＣＰＵ２０５は、電子鍵盤楽器１００の全体の制御処理を実行する第１プロセッサである。音源ＬＳＩ２０６は、楽音発音専用の大規模集積回路である第２プロセッサである。
【００１７】
フラッシュメモリコントローラ２０７は、大容量フラッシュメモリ２０８とバス２０２を接続するインタフェース回路である。大容量フラッシュメモリ２０８は、波形データ、制御プログラム、固定データ等格納する。
【００１８】
メモリコントローラ２０３は、ＲＡＭ２０４とバス２０２を接続するインタフェース回路である。ＲＡＭ２０４は、波形データ、制御プログラム、データを必要に応じて配置する。ＲＡＭ２０４はまた、ＣＰＵ２０５や音源ＬＳＩ２０６に内蔵されるＤＳＰ（デジタルシグナルプロセッサ）のワーク領域としても使用される。
【００１９】
Ｉ／Ｏコントローラ２１０は、バス２０２と、図１の鍵盤１０１、音色選択ボタン１０２、機能選択ボタン１０３、ベンダ／モジュレーション・ホイール１０４、又はＬＣＤ１０５等の周辺デバイスとを接続するインタフェース回路である。Ｉ／Ｏコントローラ２１０に接続されるキー・スキャナ２１１は、図１の鍵盤１０１や音色選択ボタン１０２又は機能選択ボタン１０３等のスイッチ・パネルの状態を走査して、その走査結果をＩ／Ｏコントローラ２１０及びバス２０２を介してＣＰＵ２０５に通知する。Ｉ／Ｏコントローラ２１０に接続されるＬＣＤコントローラ２１２は、図１のＬＣＤ１０５のデバイスをコントロールする。Ａ／Ｄコンバータ２１３は、図１のベンダ／モジュレーション・ホイール１０４の走査位置を検出する。
【００２０】
ＤＭＡコントローラ２０９は、大容量フラッシュメモリ２０８とＲＡＭ２０４間のＤＭＡ転送を制御する。
【００２１】
図３は、音源ＬＳＩ２０６のブロック図である。音源ＬＳＩ２０６は、波形発生器３０１、バスインタフェース３０２、ＤＳＰ３０３、及びミキサ３０４を含む。波形発生器３０１は、図２のＲＡＭ２０４から波形データ読み出して楽音波形として発生する＃１から＃２５６までの２５６組の発振器である波形読出し装置３０５を具備する。バスインタフェース３０２は、バス２０２と、波形発生器３０１、ＤＳＰ３０３、及びミキサ３０４との接続を行うバスインタフェース回路であり、これら各部と図２のＣＰＵ２０５又はＲＡＭ２０４との通信を司る。ＤＳＰ３０３は、楽音信号に音響効果をもたらすデジタル信号処理回路である。ミキサ３０４は、波形発生器３０１が出力する楽音信号を混合したり、ＤＳＰ３０３に送ったり、ＤＳＰ３０３からの音響信号を受け取ったりすることで全体の楽音信号の流れを制御し、外部に出力する。ミキサ３０４からのデジタル楽音信号は、図２のＤ／Ａコンバータ２１４でアナログ楽音信号に変換される。このアナログ楽音信号は、アンプ２１５で増幅された後に、アナログ楽音出力信号として出力される。
【００２２】
次に、図２の大容量フラッシュメモリ２０８は、ＮＡＮＤ型フラッシュメモリなどの、大容量で安価なメモリデバイスである。なお、この大容量フラッシュメモリ２０８の代わりに、ハードディスク記憶装置や、ネットワーク上又はクラウド上のディスク装置が使用されてもよい。大容量フラッシュメモリ２０８には、主に以下のようなデータが格納されている。
・全ての音色の波形データ
・全ての音色のパラメータデータ
・ＣＰＵ２０５やＤＳＰ３０３が実行するプログラム、プログラムの使用データ
・音楽データ
・ユーザの設定データ
波形データは例えば、１ワード長が１６ビットのリニアＰＣＭフォーマットデータである。
【００２３】
前述した大容量フラッシュメモリ２０８の内容は、ＣＰＵ２０５からは任意のアドレスへのアクセスが可能であるが、音源ＬＳＩ２０６からはアクセスすることができないので、大容量フラッシュメモリ２０８中の波形データをＲＡＭ２０４に転送する必要がある。しかしながら、ＲＡＭ２０４の記憶容量は大容量フラッシュメモリ２０８よりも小さいために、全てのデータをＲＡＭ２０４中の発音チャネル毎のバッファ領域に転送することはできない。従って、ＲＡＭ２０４の記憶内容は必要に応じて逐次入れ替える必要がある。入替えが必要なデータの中で特に本実施形態が対象とするものは波形データであるが、波形データの制御の詳細については後述する。
【００２４】
図１から図３に示す本実施形態の動作の概要について、以下に説明する。まず本実施例では、演奏者が図１の音色選択ボタン１０２を押下することで図１に示される１６音色のうちのいずれかを選択することができる。各音色は、それぞれ１音色当たり最大３２種類の波形が用いられ、波形データは大容量フラッシュメモリ２０８に格納されている。図４は、音色波形のスプリット制御の説明図である。図４に示されるように、１音色の音域（キー番号）とベロシティ域が２次元的に分割され、それぞれのスプリット(分割)エリアに、上述の最大３２個の波形が割り当てられている。即ち、押鍵時の速さ(ベロシティ)とキー番号（鍵盤１０１の番号）の２つのファクタから、読み出されるべき波形が１つ決定される、という制御が実施される。
【００２５】
図５は、「フラッシュメモリ音色波形ディレクトリ」のデータ例を示す図である。フラッシュメモリ音色波形ディレクトリは、大容量フラッシュメモリ２０８上に格納されている全ての波形データの情報をまとめたテーブルである。具体的には、このテーブルは、「音色番号」及び「音色内波形番号」で決まる各音色の各波形それぞれが用いられる鍵域を示す「最低キー番号」と「最高キー番号」（図４の横軸）、前記各波形それぞれが用いられるベロシティ域情報である「最低ベロシティ」と「最高ベロシティ」（図４の縦軸）、実際に大容量フラッシュメモリ２０８のどのアドレスに配置されているかを示す「波形領域先頭からのアドレス」、波形の長さを示す「波形サイズ」、読出しに使用される「スタートアドレス」、「ループアドレス」、及び「エンドアドレス」の情報をまとめたテーブルである。このテーブルは、電源投入時に、ＲＡＭ２０４上に展開される。
【００２６】
図６は、「ＲＡＭ波形バッファディレクトリ」のデータ例を示す図である。ＲＡＭ波形バッファディレクトリは、ＲＡＭ２０４上のボイス(発振器)チャンネル毎の波形バッファのための情報を保持するテーブルである。具体的には、このテーブルには、ボイスの現在の状況を表す「ボイスステータス」、読み出されるべき波形の３つのアドレス情報である「波形バッファスタートアドレス」と「波形バッファループアドレス」と「波形バッファエンドアドレス」、ＣＰＵ２０５による大容量フラッシュメモリ２０８上の現在の転送波形の読出しアドレスである「転送データポインタ」、ＣＰＵ２０５によるＲＡＭ２０４への転送書込みアドレスである「書込みポインタ」、音源ＬＳＩ２０６によるＲＡＭ２０４上の現在の読出しアドレスである「読出しポインタ最新値」、そして、書込みポインタと読出しポインタ最新値との差分である「読出しマージン」が保持される。なお、以下の説明では、「読出しポインタ最新値」を「読出しポインタ」と言う。また、「読出しマージン」は、「波形読出しマージン」と記載する。
【００２７】
図７（ａ）は、大容量フラッシュメモリ２０８上の音色波形領域からＲＡＭ２０４上の波形バッファへの音色波形転送動作の説明図である。大容量フラッシュメモリ２０８上には全ての音色の波形データが格納されており、そのサイズは波形毎に異なる。ＲＡＭ２０４上には波形バッファが発音ボイスチャンネル分確保されている。これらのサイズは一定であり、実施例では１６ＫＢ（キロバイト）である。前述したように波形データは、以下のアドレス情報を持つ。
【００２８】
１．スタートアドレス：音源ＬＳＩ２０６が読出しを開始するためのアドレス
２．エンドアドレス：音源ＬＳＩ２０６が読出しを行う最も後方のアドレス
３．ループアドレス：スタートアドレスとエンドアドレスの間に存在し、
波形読出しがエンドアドレスに達した場合に、次に読み出されるのが
このループアドレスである。なお、ループアドレスが、エンドアドレスと
等しい場合は、ループは行われず、読出しポインタがエンドアドレス
に達した時点で発音を停止する。
【００２９】
また、必ずしもスタートアドレスが波形データの先頭である必要もなく、エンドアドレスが、波形の最後尾である必要もない。
【００３０】
バッファサイズを１６Ｋ（キロ）ワード、波形番号ｗを有する波形のスタートアドレスをｓｔａｒｔ＿ａｄ［ｗ］、ループアドレスをｌｏｏｐ＿ａｄ［ｗ］、エンドアドレスを ｅｎｄ＿ａｄ［ｗ］としたとき、各波形は、そのサイズによって以下の３つに分類される。
【００３１】
ＴｙｐｅＡ：
ｅｎｄ＿ａｄ［ｗ］−ｓｔａｒｔ＿ａｄ［ｗ］≦１６３８４（１６Ｋワード）
ＴｙｐｅＢ： 
ｅｎｄ＿ａｄ［ｗ］−ｓｔａｒｔ＿ａｄ［ｗ］＞１６３８４
ｅｎｄ＿ａｄ［ｗ］−ｌｏｏｐ＿ａｄ［ｗ］＋１≦１６３８４
ＴｙｐｅＣ：
ｅｎｄ＿ａｄ［ｗ］−ｌｏｏｐ＿ａｄ［ｗ］＞１６３８４
【００３２】
本実施形態では、これら３つのＴｙｐｅ（タイプ）によって波形読込みの手法が変更される。まず、ＴｙｐｅＣの波形転送動作は、以下の通りである。ＴｙｐｅＣは、ループ区間も波形バッファに格納できないタイプであり、この場合には通常のリングバッファ方式の制御が実施される。図７（ｂ）は、ＴｙｐｅＣのリングバッファの動作の説明図である。図７（ｂ）に示されるように、波形バッファｖの全体を１つのリングとして、音源ＬＳＩ２０６は、発音開始から発音終了まで、単純に波形バッファｖの全区間を繰り返し読み続ける。そのため、ＣＰＵ２０５は、波形バッファｖにおいて、ＣＰＵ２０５が更新する書込みポインタｗｐ［ｖ］が、音源ＬＳＩ２０６が更新する読出しポインタｒｐ［ｖ］を追い越さないように、大容量フラッシュメモリ２０８の音色波形領域ｗからＲＡＭ２０４上の波形バッファｖに波形データを転送し続ける。
【００３３】
また、波形読出し式の電子楽器では有限の波形データの読出しを無限に継続させるために、波形データの一区間を繰返し読み出すループという手法を用いるのが一般的である。音色波形領域ｗにおいて、スタートアドレスから波形の読出しが開始され、エンドアドレスに達すると、それより手前に設定されたループアドレスに不連続に戻り、エンドアドレスに達すると再度ループアドレスに戻るという動作が無限に繰り返される。本実施形態では、ＣＰＵ２０５が読み出したデータをそのまま順次リングバッファである波形バッファ［ｖ］に書き込んでゆく。このときのＣＰＵ２０５による波形データ転送における音色波形領域ｗ上の読出しアドレスは転送データポインタｔｐ［ｖ］であり、ＣＰＵ２０５よる波形バッファｖへの書込みアドレスは書込みポインタｗｐ［ｖ］であり、音源ＬＳＩ２０６による波形バッファｖからの読出しアドレスは読出しポインタｒｐ［ｖ］である。
【００３４】
例えば、音色波形領域ｗの波形サイズ(スタートアドレスからエンドアドレスまで)が波形バッファｖのサイズよりも小さいか等しいＴｙｐｅＡのループ波形転送動作の場合、音色波形領域ｗ上の全ての波形データを波形バッファｖに転送することができるため、音源ＬＳＩ２０６による読出しアドレスは、波形バッファｖの中にループ区間を設けてループさせておけばよい。従って、ＣＰＵ２０５は、音色波形領域ｗ上の波形データをエンドアドレスまで波形バッファｖに転送すれば、それ以上の転送は必要ない。
【００３５】
図８は、ＴｙｐｅＢのループ波形転送動作の説明図である。本実施形態における特徴的なポイントの１つは、このＴｙｐｅＢの動作である。多くの楽音波形は、全体の波形サイズと比較するとループ区間は短いことが多く、例えば、波形データ全体（スタートアドレスからエンドアドレスまで）をＲＡＭ２０４のバッファ領域内に格納できなくても、ループ区間の波形データ（ループアドレスからエンドアドレスまで）だけであればバッファ領域に格納できるケースは多いはずである。本実施形態では、従来のように、ループ区間の読出しが行われる毎に音色波形領域ｗから波形バッファｖに波形データが転送はされない。
【００３６】
本実施形態では、図８に示されるように、波形データのループ区間（ループアドレスからエンドアドレスまで）が波形バッファｖの或る領域内に収まるような制御が実行される。この制御では、図８（ｂ）に示されるように、波形バッファｖの先頭にループアドレスの波形データが配置され、波形データ全体が連続的に発音部から出力されるように、スタートアドレスの波形データを波形バッファｖ内のどの位置に書き込むべきかを示す書込みアドレスが逆算により算出されて、図８（ａ）に示されるように、その書込みアドレスが示す領域から波形データが格納開始されるように、転送１が開始される。その後、転送２が開始される。もっとも第１プロセッサは転送１を開始する前や、転送１の開始と同時に転送２の処理を実行していてもよく、発音部による発音に間にあうように、波形バッファへの転送１及び転送２の転送が完了していればよい。音源ＬＳＩ２０６は、図８（ａ）に示す波形バッファｖ上の上記書込みアドレスから波形データの読み込みを開始し、ループ区間に入ると、図８（ｂ）に示す波形バッファｖの先頭から実際の波形データのエンドアドレスの位置まで繰り返し波形データを読み込む。それ以降は、音源ＬＳＩ２０６が波形バッファｖ内でループ処理を行うので、ＣＰＵ２０５による波形転送は必要なくなる。このときのスタートアドレスの波形バッファｖ上のアドレスは、下記式の演算により算出される。
【００３７】
波形バッファｖ上のスタートアドレス＝
ＢＵＦ＿ＳＩＺＥ−１−ｍｏｄ（ｌｏｏｐ＿ａｄ［ｗ］
−ｓｔａｒｔ＿ａｄ［ｗ］＋１，ＢＵＦ＿ＳＩＺＥ）
但し、ｍｏｄ（ａ，ｍ）関数はａをｍで除算したモジュロ(剰余)を求める関数。
また、ＢＵＦ＿ＳＩＺＥ＝波形バッファｖのサイズ＝１６３８４バイト
【００３８】
ところで、波形バッファｖの書込みポインタｗｐ［ｖ］が音源ＬＳＩ２０６の読出しポインタｒｐ［ｖ］を追い越せば、音源ＬＳＩ２０６が読み出す波形データは、突然、不連続に過去のデータに戻ってしまい、ノイズが発生することになる。これは音楽的に許容できるものではない。
【００３９】
そこで、本実施例では、波形バッファｖにおける読出しポインタｒｐ［ｖ］が、波形データを充当しない状態でどれだけ読めるかというデータのワード数(アドレス)、即ち、書込みポインタｗｐ［ｖ］の値と読出しポインタｒｐ［ｖ］の値の差分が、波形読出しマージンとして管理される。本実施形態では、この波形読出しマージンが所定の値以下に達した場合、その楽音を発生しているボイスチャネルに対してダンプ処理(緩やかな消音処理)が実行され、その処理の後に発音が停止した時点でそのボイスチャネルの波形バッファｖからの読出しが中止されることにより、ノイズの発生を防止することができる。
【００４０】
本実施例では、その波形読出しマージンの値は、固定値ではなく再生ピッチが考慮されて、原音ピッチによる再生時には１Ｋワード未満、１オクターブ上のピッチでの再生時には２Ｋワード未満、１オクターブ下のピッチでの再生時には５１２ワード未満になったら、ダンプ処理の実行が決定される。
【００４１】
ダンプ処理の速度は、このまま波形が補充されずに読み進んだとしても、すでに波形バッファｖに転送された読込みマージン分の波形データが読み切られる前に消音できるだけの速度であればよい。その速度は現在の再生ピッチに依存する。
【００４２】
図９は、図２のＣＰＵ２０５が実行する制御処理のメインルーチンの処理例を示すフローチャートである。図１の電子鍵盤楽器１００において、機能選択ボタン１０３により装置電源がパワーオンされると、ＣＰＵ２０５は、図９のフローチャートで示されるメインルーチンを起動し、まず装置各部を初期化する初期化処理を実行する（ステップＳ９０１）。ステップＳ９０１の初期化処理が完了すると、ユーザが図１の音色選択ボタン１０２又は機能選択ボタン１０３の操作状態を取り込むスイッチ処理（ステップＳ９０２）、ステップＳ９０２の処理の結果に基づく音色選択ボタン１０２が操作された際の音色選択イベントの検出及び音色選択処理（ステップＳ９０３→Ｓ９０４）、ユーザが図１の鍵盤１０１を弾いた際の押鍵イベントや離鍵イベントを取り込む鍵盤処理（ステップＳ９０５）、ステップＳ９０５の処理の結果に基づく押鍵イベントの検出及び押鍵処理（ステップＳ９０６→Ｓ９０７）、ステップＳ９０５の処理の結果に基づく離鍵イベントの検出及び離鍵処理（ステップＳ９０８→Ｓ９０９）、音源ＬＳＩ２０６からのイベントの処理を行う音源イベント処理（ステップＳ９１０）、音源ＬＳＩ２０６に対して一定時間毎の処理を行う音源定期処理（ステップＳ９１１）が、繰り返し実行される。
【００４３】
図１０（ａ）は、図９のステップＳ９０１の初期化処理の詳細例を示すフローチャートである。まず、ＣＰＵ２０５は、大容量フラッシュメモリ２０８からフラッシュメモリ音色波形ディレクトリ（図５参照）のテーブルデータを、ＲＡＭ２０４上の指定されたアドレスに転送する（ステップＳ１００１）。
【００４４】
次に、ステップＳ１００２とステップＳ１００４の繰返し制御処理によりボイス数分のループ処理が実行される。このループ処理中のステップＳ１００３において、ボイスステータスｖｓ［ｖ］、ボイス番号ｖに対応する波形バッファｖの波形バッファスタートアドレスｓａ［ｖ］、波形バッファループアドレスｌａ［ｖ］、波形バッファエンドアドレスｅａ［ｖ］が初期化される。
【００４５】
次に音色波形領域ｗから波形バッファｖへの波形の転送を管理するための転送要求カウンタ、転送状態フラグ、転送要求バッファ（リンク構造）が初期化される（ステップＳ１００５）。転送要求カウンタは、転送中のボイスが現在いくつあるか管理するものであり、転送状態フラグは、音色波形領域から波形バッファへの転送中か否かを判断するフラグであり、転送要求バッファは次にどのボイスに対して音色波形領域から波形バッファへの波形転送を行うかを管理するためのバッファである。
【００４６】
図１０（ｂ）は、図９のステップＳ９０４の音色選択処理の詳細例を示すフローチャートである。ＣＰＵ２０５は、押鍵処理などで使用するために、図１の音色選択ボタン１０２の操作により指定された音色番号がＲＡＭ２０４内のワーク領域に保存しておく（ステップＳ１０１０）。
【００４７】
図１１は、図９のステップＳ９０７の押鍵処理の詳細例を示すフローチャートである。ＣＰＵ２０５は、鍵盤が弾かれた際の押鍵による演奏情報（鍵盤位置、押された強さ）を、キー番号、ベロシティに変換し、これらに基づく制御処理を実行する。
【００４８】
ＣＰＵ２０５は、最初に、この押鍵での発音にどのボイスを使用するかを決定するボイスアサインを実行する（ステップＳ１１０１）。ＣＰＵ２０５は、ＲＡＭ２０４に記憶されている図６に例示されるＲＡＭ波形バッファディレクトリにおいて、ボイスステータスが不使用(ｖｓ［ｖ］＝０)のボイス番号のボイスから優先的にアサインする。ＣＰＵ２０５は、ボイスステータスが発音中（ｖｓ「ｖ」＝１）又は減衰中（ｖｓ「ｖ」＝２）のボイスをアサインしなくてはならないとき（ステップＳ１１０２の判定がＹＥＳの場合）は、ダンプ処理を実行する（ステップＳ１１０３）。
【００４９】
次に、ＣＰＵ２０５は、キー番号、ベロシティ、現在の音色番号から、音色波形領域から波形バッファへ転送を行うべき波形番号ｗを取得する（ステップＳ１１０４）。
【００５０】
次に、ＣＰＵ２０５は、キー番号、波形番号ｗから得られる波形情報から、再生ピッチを計算する（ステップＳ１１０５）。
【００５１】
次に、ＣＰＵ２０５は、再生ピッチから、波形読出しマージン（図６参照）を決定する（ステップＳ１１０６）。
【００５２】
次に、ＣＰＵ２０５は、読出しポインタｒｐ［ｖ］の更新処理に必要な、読出しポインタｒｐ［ｖ］に周期的に加算するオフセット値を計算する（ステップＳ１１０７）。
【００５３】
次に、ＣＰＵ２０５は、波形番号ｗのスタートアドレスｓｔａｒｔ＿ａｄ［ｗ］、ループアドレスｌｏｏｐ＿ａｄ［ｗ］、及びエンドアドレスｅｎｄ＿ａｄ［ｗ］から、前述した条件に従ってＴｙｐｅＡ、ＴｙｐｅＢ、又はＴｙｐｅＣのいずれかの転送Ｔｙｐｅを設定する（ステップＳ１１０８）。
【００５４】
次に、ＣＰＵ２０５は、転送ＴｙｐｅがＴｙｐｅＡ又はＴｙｐｅＣの場合は、読出しポインタｒｐ［ｖ］及び書込みポインタｗｐ［ｖ］を０に設定する（ステップＳ１１０９→Ｓ１１１０）。ＣＰＵ２０５は、転送ＴｙｐｅがＴｙｐｅＢの場合は、前述したループアドレスが波形バッファｖの先頭になるように読出しポインタｒｐ［ｖ］及び書込みポインタｗｐ［ｖ］を逆算して、補正された各値を設定する（ステップＳ１１０９→Ｓ１１１１）。
【００５５】
ステップＳ１１１０又はＳ１１１１の処理の後、ＣＰＵ２０５は、音色波形領域から波形バッファへの波形転送を行うために、波形転送管理処理に対して新規転送要求を発行し、波形転送管理処理での処理の終了を待つ（ステップＳ１１１２）。
【００５６】
ＣＰＵ２０５は、書込みポインタｗｐ［ｖ］と読出しポインタｒｐ［ｖ］の差分から波形読出しマージンを計算することにより（ステップＳ１１１３）、ステップＳ１１１２の波形転送管理処理で波形バッファに波形が転送されたか否かを確認し、再生ピッチで決定された波形読出しマージンと比較を行う（ステップＳ１１１３→Ｓ１１１４→Ｓ１１１３の繰返し）。ＣＰＵ２０５は、現在の波形読出しマージンが再生ピッチで決定された波形読出しマージンより大きくなった時点で、波形読出しの開始、即ち発音の開始を行い、ボイスステータス（図６参照）を発音中（ｖｓ「ｖ」＝１）にする（ステップＳ１１１４→Ｓ１１１５）。その後、ＣＰＵ２０５は、図１１のフローチャートで例示される図９のステップＳ９０７の押鍵処理を終了する。
【００５７】
図１０（ｃ）は、図９のステップＳ９０９の離鍵処理の詳細例を示すフローチャートである。ＣＰＵ２０５は、鍵盤を弾いた際の離鍵による演奏情報を（鍵盤位置）をキー番号に変換し、ピッチ、フィルタ、アンプのエンベロープ設定等に基づくリリース状態への移行処理を実行する（ステップＳ１０２０）。この処理は、本実施形態の波形転送に関する部分には影響を与えない。ステップＳ１０２０の処理の後、ＣＰＵ２０５は、図１０（ｃ）のフローチャートで例示される図９のステップＳ９０９の離鍵処理を終了する。
【００５８】
図１２及び図１３は、波形転送管理処理を示すフローチャートである。ＣＰＵ２０５は、図１２のステップＳ１２０１、Ｓ１２０２、及びＳ１２０３でそれぞれ、波形転送管理処理に対して発行されたイベントが、新規転送要求、転送要求、転送終了、又は転送停止の何れであるかを判定し、それぞれのイベントに対応した処理を実行する。
【００５９】
新規転送要求イベントが発行された場合（図１１のステップＳ１１１２参照）、図１２のステップＳ１２０１の判定がＹＥＳとなって、図１３のステップＳ１２１６の処理が実行される。ステップＳ１２１６で、ＣＰＵ２０５は、転送状態フラグを確認する。
【００６０】
ステップＳ１２１６で転送状態フラグが転送終了待ちであると判定された場合は、別のボイスに対して音色波形領域から波形バッファへの波形転送を行っている最中であるので、ＣＰＵ２０５は、別のボイスの転送終了イベントからの転送要求イベントで処理されるように、転送要求バッファの先頭に該当ボイスを設定する（図１３のステップＳ１２２５）。その後、ＣＰＵ２０５は、図１２及び図１３のフローチャートで示される波形転送管理処理を終了する。
【００６１】
ステップＳ１２１６で転送状態フラグが待機状態であると判定された場合は、ＣＰＵ２０５はまず、該当ボイス番号に対して、転送１回あたりの読出しサイズ（ここでは２ページ）を指定し、後述する波形読出し、波形バッファ転送処理（図１４（ａ））に、転送要求を発行する（図１３のステップＳ１２１７）。
【００６２】
次に、ＣＰＵ２０５は、転送状態フラグを転送終了待ちに設定し（図１３のステップＳ１２１８）、該当ボイスを転送要求バッファの最後尾に設定する（図１３のステップＳ１２１９）。
【００６３】
次に、ＣＰＵ２０５は、転送データポインタｔｐ［ｖ］を更新し（図１３のステップＳ１２２０）、転送要求バッファカウンタをインクリメントする（図１３のステップＳ１２２１）。
【００６４】
次に、ＣＰＵ２０５は、転送Ｔｙｐｅを確認する（図１３のステップＳ１２２２）。転送ＴｙｐｅがＡの場合は、波形バッファ内に波形の全てが転送可能であるので、全データが転送完了したかを判定する（図１３のステップＳ１２２３）。この判定は、転送データポインタがエンドアドレスに到達したかどうかで判断できる。
【００６５】
全データの転送が完了している場合は、これ以上の転送は必要ないので、波形転送管理処理に対して、転送停止イベントを発行する（図１３のステップＳ１２２４）。その後、ＣＰＵ２０５は、図１２及び図１３のフローチャートで示される波形転送管理処理を終了する。
【００６６】
ステップＳ１２２２で、転送ＴｙｐｅがＢ又はＣと判定された場合、或いは、ステップＳ１２２３で全データの転送が完了していないと判定された馬合には、ＣＰＵ２０５は、図１２及び図１３のフローチャートで示される波形転送管理処理を終了する。
【００６７】
後述する波形読出し、波形バッファ転送処理で指定サイズ分の波形データの転送が終了し波形転送管理処理に対して転送終了の要求イベントが発行された場合（図１４（ａ）のステップＳ１４０７）、図１２のステップＳ１２０１及びＳ１２０２の判定がＮＯ、ステップＳ１２０３の判定がＹＥＳとなって、図１２のステップＳ１２０６の処理が実行される。ステップＳ１２０６で、ＣＰＵ２０５は、転送要求バッファに転送待ちのボイスがあるか否か、即ち、転送要求バッファカウンタが０でないか０であるかを判定する。
【００６８】
ステップＳ１２０６の判定がＮＯならば、音色波形領域から波形バッファへの全ての転送が終了した状態（無音）なので、ＣＰＵ２０５はそのまま何もせずに、図１２及び図１３のフローチャートで例示される現在の波形転送管理処理を終了する。
【００６９】
ステップＳ１２０６の判定がＹＥＳならば、ＣＰＵ２０５は、次のボイスが処理されるよう波形転送管理処理に対して、転送要求イベントを発行し（ステップＳ１２０７）、図１２及び図１３のフローチャートで例示される現在の波形転送管理処理を終了する。
【００７０】
上述した図１２のステップＳ１２０７の処理により、波形転送管理処理に大使って転送要求イベントが発行されると、図１２のステップＳ１２０１の判定がＮＯ、ステップＳ１２０２の判定がＹＥＳとなって、図１２のステップＳ１２０８の処理が実行される。ステップＳ１２０８で、ＣＰＵ２０５は、転送要求バッファの先頭のボイスについて転送処理を実行する。書込みポインタｗｐ［ｖ］と読出しポインタｒｐ［ｖ］を確認し、波形バッファｖへの転送を行うことによって、書込みポインタｗｐ［ｖ］が読出しポインタｒｐ［ｖ］を追い越してしまう場合は、そのボイスｖについては、転送要求バッファの最後尾に設定し、先頭から2番目のボイスに対して処理を行う。
【００７１】
次に、ＣＰＵ２０５は、該当ボイス番号に対して、転送１回あたりの読出しサイズ（こでは２ページ）を指定し、後述する波形読出し、波形バッファ転送処理（図１４（ａ））に、転送要求を発行する（図１２のステップＳ１２０９）。
【００７２】
次に、ＣＰＵ２０５は、転送状態フラグを転送終了待ちに設定し（図１２のステップＳ１２１０）、該当ボイスを転送要求バッファの最後尾に設定する（図１２のステップＳ１２１１）。
【００７３】
次に、ＣＰＵ２０５は、転送データポインタｔｐ［ｖ］を更新する（図１２のステップＳ１２１２）。
【００７４】
次に、ＣＰＵ２０５は、転送Ｔｙｐｅを確認する（図１２のステップＳ１２１３）。転送ＴｙｐｅがＡ又はＢの場合は、波形バッファ内に波形の全データが転送完了したかを判定する（図１２のステップＳ１２１４）。この判定は、転送データポインタがエンドアドレスに到達したかどうかで判断できる。
【００７５】
全データの転送が完了している場合は、これ以上の転送は必要ないので、波形転送管理処理に対して、転送停止イベントを発行する（図１２のステップＳ１２１５）。その後、ＣＰＵ２０５は、図１２及び図１３のフローチャートで示される波形転送管理処理を終了する。
【００７６】
ステップＳ１２１３で、転送ＴｙｐｅがＢ又はＣと判定された場合、或いは、ステップＳ１２１４で全データの転送が完了していないと判定された馬合には、ＣＰＵ２０５は、図１２及び図１３のフローチャートで示される波形転送管理処理を終了する。
【００７７】
図１３のステップＳ１２２４、図１２のステップＳ１２１５、又は後述する音源イベント処理（図１４（ｂ）のステップＳ１４１３）において波形転送管理処理に対して転送停止イベントが発行された場合、図１２のステップＳ１２０１、Ｓ１２０２、及びＳ１２０３の判定が何れもＮＯとなって、ステップＳ１２０４が実行される。この場合、発音停止状態となり波形読出しは停止しているので、ＣＰＵ２０５は、転送要求バッファから該当ボイスを削除し、転送要求バッファカウンタをデクリメントする（ステップＳ１２０４）。その後、ＣＰＵ２０５は、図１２及び図１３のフローチャートで示される波形転送管理処理を終了する。
【００７８】
図１４（ａ）は、波形読出し、波形バッファ転送処理を示すフローチャートである。このフローチャートの処理は、図１３のステップＳ１２１７又は図１２のステップＳ１２０９からの転送要求イベントにより起動される。
【００７９】
ＣＰＵ２０５は、ステップＳ１４０１とＳ１４０５のループ制御処理により、以下のステップＳ１４０２からＳ１４０４の一連の処理を、波形転送管理処理（図１３のステップＳ１２１７又は図１２のステップＳ１２０９）で指定された指定サイズ分繰り返し実行する。
【００８０】
まず、ステップＳ１４０２で、ＣＰＵ２０５は、転送データポインタｔｐ［ｖ］に基づいて、大容量フラッシュメモリ２０８の音色波形領域ｗからページ単位で波形データを読み込む。
【００８１】
次に、ステップＳ１４０３で、ＣＰＵ２０５は、波形バッファループアドレス及び波形バッファエンドアドレスを考慮し、ループ読出しの場合は、不要な部分は読み捨てる。
【００８２】
そして、ステップＳ１４０４で、ＣＰＵ２０５は、波形バッファｖの書込みポインタｗｐ［ｖ］に応じたアドレスに、ステップＳ１４０２及びＳ１４０３で音色波形領域ｗから読み出した波形データの書込みを行う。ＣＰＵ２０５は、書き込んだサイズ分、書込みポインタｗｐ［ｖ］を更新する。
【００８３】
次に、ＣＰＵ２０５は、転送状態フラグに待機状態を設定し（ステップＳ１４０６）、前述した波形転送管理処理に対して、転送終了イベントを発行する（ステップＳ１４０７）。その後、ＣＰＵ２０５は、図１４のフローチャートで示される波形読出し、波形バッファ転送処理を終了する。
【００８４】
図１４（ｂ）は、図９のステップＳ９１０の音源イベント処理の詳細例を示すフローチャートである。ＣＰＵ２０５は、図９のステップＳ９０９又は図１０（ｃ）の離鍵処理によってリリース状態に移行したボイスが、リリースレベルに到達した場合（ステップＳ１４１０の判定がＹＥＳの場合）、もしくは、ダンプ処理によってボイスがダンプレベルに到達した場合（ステップＳ１４１１の判定がＹＥＳの場合）は、当該ボイスに対して、波形読出しの停止（発音終了）を行った後（ステップＳ１４１２）、前述した波形転送管理処理に対して転送停止イベントを発行する（ステップＳ１４１３）。その後、ＣＰＵ２０５は、図１４（ｂ）のフローチャートで例示される図９のステップＳ９１０の音源イベント処理を終了する。
【００８５】
図１５（ａ）は、図９のステップＳ９１１の音源定期処理の詳細例を示すフローチャートである。ＣＰＵ２０５は、ピッチ変更があった場合（ステップＳ１５０１の判定がＹＥＳ）、ステップＳ１５０２とＳ１５０８の繰返し制御処理によりボイス数分、以下のステップＳ１５０３からＳ１５０７の一連の処理を繰り返し実行する。
【００８６】
まず、ＣＰＵ２０５は、ボイスステータスが不使用以外のボイスについて、転送Ｔｙｐｅを確認する（ステップＳ１５０３→Ｓ１５０４）。
【００８７】
ＣＰＵ２０５は、転送ＴｙｐｅがＡ又はＢの場合は全データの転送が完了していないボイス（ステップＳ１５０４→Ｓ１５０５→Ｓ１５０６）、転送ＴｙｐｅがＣの場合は全ボイスに対して（ステップＳ１５０４→Ｓ１５０６）、ピッチ変更後の再生ピッチから波形読出しマージンを決定する（ステップＳ１５０６）。
【００８８】
続いて、ＣＰＵ２０５は、読出しポインタｒｐ［ｖ］の更新処理に必要な読出しポインタｒｐ［ｖ］に周期的に加算するオフセット値を再計算する（ステップＳ１５０７）。
【００８９】
その後、ＣＰＵ２０５は、読出しポインタｒｐの更新処理（ステップＳ１５０９）と波形読出しマージン確認処理（捨てＳ１５１０）を実行し、図１５（ａ）のフローチャートで例示される図９のステップＳ９１１の音源定期処理を終了する。
【００９０】
図１５（ｂ）は、図１５（ａ）のステップＳ１５０９の読出しポインタｒｐ［ｖ］の更新処理（ｒｐ更新処理）の詳細例を示すフローチャートである。ＣＰＵ２０５は、ステップＳ１５１０とＳ１５１５の繰返し制御処理によりボイス数分、以下のステップＳ１５１１からＳ１５１４の一連の処理を繰り返し実行する。
【００９１】
まず、ＣＰＵ２０５は、ボイスステータスが不使用以外のボイスについて、転送Ｔｙｐｅを確認する（ステップＳ１５１１→Ｓ１５１２）。
【００９２】
ＣＰＵ２０５は、転送ＴｙｐｅがＡ又はＢの場合は全データの転送が完了していないボイス（ステップＳ１５１２→Ｓ１５１３→Ｓ１５１４）、転送ＴｙｐｅがＣの場合は全ボイスに対して（ステップＳ１５１２→Ｓ１５１４）、読出しポインタｒｐ［ｖ］にオフセット値ｏｆｆｓｅｔを加算する（ステップＳ１５１４）。その後、ＣＰＵ２０５は、図１５（ｂ）のフローチャートで例示される図１５のステップＳ１５０９の読出しポインタｒｐ［ｖ］の更新処理（ｒｐ更新処理）を終了する。
【００９３】
図１６は、図１５（ａ）のステップＳ１５１０のマージン確認処理の詳細例を示すフローチャートである。ＣＰＵ２０５は、ステップＳ１６０１とＳ１６０８の繰返し制御処理によりボイス数分、以下のステップＳ１６０２からＳ１６０７の一連の処理を繰り返し実行する。
【００９４】
まず、ＣＰＵ２０５は、ボイスステータスが発音中のボイスについて、転送Ｔｙｐｅを確認する（ステップＳ１６０２→Ｓ１６０３）。
【００９５】
ＣＰＵ２０５は、転送ＴｙｐｅがＡ又はＢの場合は全データの転送が完了していないボイス（ステップＳ１６０３→Ｓ１６０４→Ｓ１６０５）、転送ＴｙｐｅがＣの場合は全ボイスに対して（ステップＳ１６０３→Ｓ１６０５）、書込みポインタｗｐ［ｖ］と読出しポインタｒｐ［ｖ］の差分から、波形読出しマージンを算出する（ステップＳ１６０５）。
【００９６】
続いて、ＣＰＵ２０５は、ステップＳ１６０５で算出した波形読出しマージンを、再生ピッチから決定された波形読出しマージンと比較する（ステップＳ１６０６）。この結果、ステップＳ１６０５で算出した現在の波形読出しマージンのほうが小さければ、該当ボイスに対して、指定レイトを用いて、ダンプ処理を実行する（ステップＳ１６０７）。ステップＳ１６０５で算出した現在の波形読出しマージンのほうが大きければ、ステップＳ１６０７はスキップする。
【００９７】
以上説明したようにして、本実施形態では、音源ＬＳＩ２０６が読み出す波形データが格納される高速小容量のＲＡＭ２０４と、機器全ての音色波形データを保持するＮＡＮＤフラッシュなどの低速大容量フラッシュメモリ２０８を持ち、演奏時に大容量フラッシュメモリ２０８の音色波形領域からＲＡＭ２０４の波形バッファに転送を開始し、所定容量転送後に音源が読み出しを開始する逐次転送型楽音発生装置において、バッファのサイズＢと波形のスタートアドレスからエンドアドレスまでの長さＷ、波形のループ区間の長さＬを比較し、Ｂ≧Ｗの時はエンドで転送停止、Ｂ≦ＷかつＢ≧Ｌの時はループ波形データがバッファ内で分断されないようにスタートアドレスを逆算して転送を開始し、エンドで転送停止、Ｂ＜Ｌの時は従来通り発音停止まで転送を続ける制御が実施される。このような制御により、上述の３つのケースのうち、２つのケース（Ｂ≧Ｗ、Ｂ≦ＷかつＢ≧Ｌ）では、エンドアドレスまで波形を転送すれば、それ以上の転送は不要となるため、波形転送によるトータルでのトラフィック平均値を大幅に低減することが可能となる。この結果、性能低下を改善することができる楽音発生装置、又はそのような楽音発生装置を用いた電子楽器を実現できる。あるいは性能低下を補正するためのハードウェアのコストを削減できる楽音発生装置、又はそのような楽音発生装置を用いた電子楽器を実現することが可能となる。
【００９８】
その他、本発明は上述した実施形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上述した実施形態で実行される機能は可能な限り適宜組み合わせて実施しても良い。上述した実施形態には種々の段階が含まれており、開示される複数の構成要件による適宜の組み合せにより種々の発明が抽出され得る。例えば、実施形態に示される全構成要件からいくつかの構成要件が削除されても、効果が得られるのであれば、この構成要件が削除された構成が発明として抽出され得る。
【００９９】
以上の実施形態に関して、更に以下の付記を開示する。
（付記１）
第１記憶手段内の第１波形データを第２記憶手段に転送する第１転送処理と、
前記第１波形データに続く第２波形データのサイズが前記第２記憶手段における複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理と、
前記判定処理により前記第２波形データのサイズが前記いずれかの領域のサイズより大きくないと判定された場合に、前記第２波形データを前記いずれかの領域に転送する第２転送処理と、
を実行する第１プロセッサと、
前記第２記憶手段に転送された前記第１波形データを読み込む第１読込処理と、
前記第２記憶手段における前記いずれかの領域に転送された前記第２波形データを読み込む第２読込処理と、
を実行する第２プロセッサと、
を有する楽音発生装置。
（付記２）
少なくとも前記第１プロセッサ及び前記第２プロセッサのいずれかのプロセッサは、前記第１波形データに基づく出力が発音部からなされた後、前記第２波形データに基づく出力が前記発音部から繰り返しなされるように制御している、ことを特徴とする付記１に記載の楽音発生装置。
（付記３）
前記第１プロセッサは、前記第２波形データに基づく出力が発音部からなされている際に、前記第２転送処理を実行していないことを特徴とする付記１又は２に記載の楽音発生装置。
（付記４）
前記第１波形データは、開始位置から繰返し位置の前までの波形データを含み、
前記第２波形データは、前記繰返し位置から終了位置までの波形データを含み、
前記第１プロセッサは、前記第２記憶手段内への前記第１波形データの転送の位置が前記第２プロセッサによる前記第１波形データの読込みの位置を越えないように制御しながら、前記第１転送処理を実行している、
ことを特徴とする付記１乃至３のいずれかに記載の楽音発生装置。
（付記５）
前記第１プロセッサは、前記第２波形データにおける前記繰返し位置が前記第２記憶手段内のいずれかの領域の先頭になるように、前記第２記憶手段内における前記第１波形データの書込み開始位置を算出する算出処理を実行する、ことを特徴とする付記４に記載の楽音発生装置。
（付記６）
第１記憶手段内の第１波形データを第２記憶手段に転送する第１転送処理と、
前記第１波形データに続く第２波形データのサイズが前記第２記憶手段における複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理と、
前記判定処理により前記第２波形データのサイズが前記いずれかの領域のサイズより大きくないと判定された場合に、前記第２波形データを前記いずれかの領域に転送する第２転送処理と、
を第１プロセッサに実行させ、
前記第２記憶手段に転送された前記第１波形データを読み込む第１読込処理と、
前記第２記憶手段における前記いずれかの領域に転送された前記第２波形データを読み込む第２読込処理と、
を第２プロセッサに実行させる、
ことを特徴とする楽音発生方法。
（付記７）
第１記憶手段内の第１波形データを第２記憶手段における複数の領域のうちのいずれかの領域に転送する第１転送処理と、
前記第１波形データに続く第２波形データのサイズが前記複数の領域のうちのいずれかの領域のサイズと比較して大きいか否かを判定する判定処理と、
前記判定処理により前記第２波形データのサイズが前記いずれかの領域のサイズより大きくないと判定された場合に、前記第２波形データを前記いずれかの領域に転送する第２転送処理と、
を第１プロセッサに実行させ、
前記第２記憶手段における前記いずれかの領域に転送された前記第１波形データを読み込む第１読込処理と、
前記第２記憶手段における前記第１領域に転送された前記第２波形データを読み込む第２読込処理と、
を第２プロセッサに実行させる、
ためのプログラム。
（付記８）
付記１乃至５の何れかに記載の楽音発生装置と、
前記第１波形データ及び前記第２波形データに基づいて発音する発音部と、
を備える電子楽器。
【符号の説明】
【０１００】
１００  電子鍵盤楽器
１０１  鍵盤
１０２  音色選択ボタン
１０３  機能選択ボタン
１０４  ベンダ／モジュレーション・ホイール
１０５  ＬＣＤ
２０１  バスコントローラ
２０２  バス
２０３  メモリコントローラ
２０４  ＲＡＭ
２０５  ＣＰＵ
２０６  音源ＬＳＩ
２０７  フラッシュメモリコントローラ
２０８  大容量フラッシュメモリ
２０９  ＤＭＡコントローラ
２１０  Ｉ／Ｏコントローラ
２１１  キー・スキャナ
２１２  ＬＣＤコントローラ
２１３  Ａ／Ｄコンバータ
２１４  Ｄ／Ａコンバータ
２１５  アンプ
３０１  波形発生器
３０２  バスインタフェース
３０３  ＤＳＰ
３０４  ミキサ
３０５  波形読出し装置
【図１】
2019028198.tif 000003
【図２】
2019028198.tif 000004
【図３】
2019028198.tif 000005
【図４】
2019028198.tif 000006
【図５】
2019028198.tif 000007
【図６】
2019028198.tif 000008
【図７】
2019028198.tif 000009
【図８】
2019028198.tif 000010
【図９】
2019028198.tif 000011
【図１０】
2019028198.tif 000012
【図１１】
2019028198.tif 000013
【図１２】
2019028198.tif 000014
【図１３】
2019028198.tif 000015
【図１４】
2019028198.tif 000016
【図１５】
2019028198.tif 000017
【図１６】
2019028198.tif 000018