(57)【特許請求の範囲】
【請求項１】
波形データを割り当て発音を行うボイスを複数備える音源を有して、楽音を発生する楽音発生装置であって、 
複数の波形データを記憶するメモリと、 
楽音合成指令に応じて、前記波形データを前記複数のボイスのいずれかに割り当てていき、ボイス音を合成した楽音信号を発生させる信号処理手段と、       
波形管理手段によって書き込まれた前記波形データを記憶する、前記メモリよりアクセス速度が速いキャッシュメモリと、を備え、
前記波形管理手段は、 
複数の前記ボイスが発音中である場合のその複数の発音中ボイスのそれぞれに割り当てる波形データが、前記信号処理手段に供給され続けたと想定した時の当該発音中ボイスに対する残りの発音可能な時間である残存発音可能時間を求める演算部と、 
前記演算部によって求められた前記残存発音可能時間に基づいて前記発音中ボイスに対する優先順位を決め、この決めた優先順位に従って前記ボイスを選択する選択部と、 
前記選択部によって選択された前記ボイスの波形データを前記メモリから読み出す読み出し部と、
この読み出した波形データを前記キャッシュメモリに書き込む書き込み部と、
前記キャッシュメモリの利用状況を把握して不要なデータを消去する消去部と、
前記演算部が求めた前記残存発音可能時間が零となった場合、対応するボイスを強制無音とするために、前記信号処理手段に無音信号を返す応急措置部と、を含み、
前記演算部は、
前記読み出し部が前記メモリに対して追加読み出しを停止するとした場合に、その追加読み出し停止時点において前記信号処理手段に供給可能な波形データの前記キャッシュメモリ上の残存量である残存発音可能データ量（Ｄ）を、実効サンプリング周波数で除した値を前記残存発音可能時間として求め、この実効サンプリング周波数は、録音ピッチ（ｆ１）と再生ピッチ（ｆ２）とのピッチシフト量をｎ半音として「ｆ２＝ｆ１×２n/12（Ｈｚ）」となる周波数（ｆ２）またはその代替値であることを特徴とする楽音発生装置。
【請求項２】
請求項１に記載の楽音発生装置において、 
前記信号処理手段が行う処理と、前記波形管理手段が行う処理とは並行して行われることを特徴とする楽音発生装置。
【請求項３】
波形データを割り当て発音を行うボイスを複数備える音源と、複数の波形データを記憶するメモリと、前記波形データを記憶する、前記メモリよりアクセス速度が速いキャッシュメモリとを備えて楽音を発生する楽音発生装置に、 
楽音合成指令に応じて、前記波形データを前記複数のボイスのいずれかに割り当てていき、ボイス音を合成した楽音信号を発生させる信号処理機能と、 
前記キャッシュメモリに対してアクセス動作を行う波形管理機能と、を実現させるためのプログラムであり、
前記波形管理機能は、
複数の前記ボイスが発音中である場合のその複数の発音中ボイスのそれぞれに割り当てる波形データが、前記信号処理手段に供給され続けたと想定した時の当該発音中ボイスに対する残りの発音可能な時間である残存発音可能時間を求める演算機能と、 
前記演算機能によって求められた前記残存発音可能時間に基づいて前記発音中ボイスの優先順位を決め、この決めた優先順位に従って前記ボイスを選択する選択機能と、 
前記選択機能によって選択された前記ボイスの波形データを前記メモリから読み出す読み出し機能と、
この読み出した波形データを前記キャッシュメモリに書き込む書き込み機能と、
前記キャッシュメモリの利用状況を把握して不要なデータを消去する消去機能と、
前記演算機能が求めた前記残存発音可能時間が零となった場合、対応するボイスを強制無音とするために、前記信号処理機能に無音信号を返す応急措置機能と、を含み、
前記演算機能は、
前記読み出し機能が前記メモリに対して追加読み出しを停止するとした場合に、その追加読み出し停止時点において前記信号処理機能に供給可能な波形データの前記キャッシュメモリ上の残存量である残存発音可能データ量（Ｄ）を、実効サンプリング周波数で除した値を前記残存発音可能時間として求め、この実効サンプリング周波数は、録音ピッチ（ｆ１）と再生ピッチ（ｆ２）とのピッチシフト量をｎ半音として「ｆ２＝ｆ１×２n/12（Ｈｚ）」となる周波数（ｆ２）またはその代替値であることを特徴とするプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、汎用ＣＰＵを音源に用いた電子楽器音源（ソフトウエア音源）等に係わり、特に楽音発生を遅延なく行うことを可能にする改良に関する。
【背景技術】
【０００２】
キャッシュメモリを備えた装置（ＣＰＵ等）を用いて、効率良く楽音発生（ＰＣＭデータの読み出し）を行う手法について以下のような提案がなされている。例えば、特許文献１に記載の楽音発生装置は次のようなものである。波形テーブル合成処理部において、左チャンネル、右チャンネルおよびリバーブ用の３系統の波形データが１サンプル分ずつ繰り返し演算生成されることより、複数サンプル分の波形データが纏めて演算生成される。
【０００３】
そして、これらのデータは、出力バッファに１サンプル毎に順次インターリーブされて格納される。このデータにリバーブ演算処理されたデータが足し込まれ、出力すべき波形データが出力バッファに得られる。この構成にあっては、出力バッファにインターリーブされて波形データが格納されているので、キャッシュメモリを搭載したシステムにおいて、キャッシュのヒット率が高くなり高速演算が可能になる（例えば特許文献１参照。）。つまり、複数系列の波形データを１サンプル分ずつインターリーブして出力バッファに格納するというものである。
【０００４】
また、特許文献２に記載の装置は、第１のメモリの他に、この第１のメモリ（波形メモリ）よりも小容量であるが高速アクセス可能な第２のメモリを備えた装置である。そして、第２のメモリに部分的な波形データを記憶し、第１のメモリと第２のメモリの出力を切り替えて楽音信号形成に利用するために、メモリ切り替手段が設けられている。このメモリ切り替手段の働きにより、通常は、第１のメモリから読み出された波形データに基づき楽音信号を形成するが、この第１のメモリのアクセス時間の時間遅れに見合った時間の間は第２のメモリから波形データを読み出しこれに基づき楽音信号を形成する。
【０００５】
これによって、第１のメモリのアクセス時間遅れが問題となる短時間の間は、高速アクセス型の第２のメモリによって楽音発生が保証されて、不都合のない実時間演奏が可能になる。つまり、低速の大容量の第１のメモリからの波形データの読み出し遅延時間に見合った時間だけ、高速の小容量の第２のメモリから波形データを読み出す手法が開示されている（例えば特許文献２参照。）。
【０００６】
これらの手法の他にも、ＰＣＭ波形データをアクセス速度が低速なメモリからアクセス速度が高速のメモリに取り込む手法として、補間のためにデータを先読みしておく等の工夫がなされてきた。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平９−１５２８６９号公報（第２−４頁、第３図）
【特許文献２】特公昭６４−１８００号公報（第１−２頁、第３図）
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかしながら、ＣＰＵがソフトウエアを実行することで実現する電子楽器用音源（ソフトウエア音源）にあっては、ＣＰＵがキャッシュ機構を備えていても、異なるサンプリング周期のＰＣＭデータの読み出しに関する配慮がなされていない。そのため、異なるサンプリング周期のＰＣＭデータが混在する場合にあっては、発音開始までの遅延時間が発生し演奏がしにくくなるといった問題が発生していた。つまり、発音指示を与えても発音動作が行われなくなることがあった。
【０００９】
本発明は、かかる従来の課題を解決するためになされたもので、ボイスの発音可能な残り時間である残存発音可能時間を参照して、発音の遅延を防止することを可能とする楽音発生装置およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
上記目的を達成するために、本願発明の発明者は、ＳＳＤ、ＨＤ等の大容量記憶装置（低速だが大容量のメモリ）から、ＤＲＡＭ、ＳＲＡＭ等（高速だが容量の小さなメモリ）のキャッシュメモリにＰＣＭデータ（波形データ）を読み出す際に、発音中ボイスの発音可能な残り時間である「残存発音可能時間」を求め、例えば残存発音可能時間のより短いボイスに対応する波形データを優先的に読み出すことによって、サンプリング周期の異なるデータを混在させた場合であってもこの混在を支障とせずに、発音開始までの遅延を低減して楽音発生することができることを見出した。
【００１１】
つまり、本発明は、波形データを割り当て発音を行うボイスを複数備える音源を有して、楽音を発生する楽音発生装置において、 
複数の波形データを記憶するメモリと、 
楽音生成指令に応じて、前記波形データを組み合わせこの組み合わせた前記波形データを前記ボイスに割り当てて楽音信号を発生させる信号処理手段と、 
波形管理手段によって書き込まれた前記波形データを記憶するキャッシュメモリと、を備え、 
前記波形管理手段は、 
複数の前記ボイスが発音中である場合のその複数の発音中ボイスに割り当てる波形データが、前記信号処理手段に供給され続けたと想定した時の当該発音中ボイスに対する残りの発音可能な時間である残存発音可能時間を零としないように、前記メモリから前記波形データを読み出し、
この読み出した波形データを前記キャッシュメモリに書き込むことを特徴とする。
【００１２】
この発明によれば、波形管理手段は、複数の発音中ボイスに割り当てる波形データが、信号処理手段に供給され続けたと想定した時の当該発音中ボイスに対する残存発音可能時間を零としないように、メモリから波形データを読み出す。更に、この読み出した波形データをキャッシュメモリに書き込む。この結果として、信号処理手段は発音の遅延を防止することが可能となり、読み出し対象となる波形データのサンプリング周期が異なっていてもこの混在を支障とせずに、発音開始までの遅延を低減して楽音発生することができる。
【００１３】
より具体的には、波形管理手段を、発音中ボイスそれぞれに対する残存発音可能時間を求める演算部と、この演算部によって求められた残存発音可能時間に基づいて発音中ボイスの優先順位を決めこの決めた優先順位に従ってボイスを選択する選択部と、この選択部によって選択されたボイスの波形データをメモリから読み出す読み出し部と、読み出し部が読み出した波形データをキャッシュメモリに書き込む書き込み部と、を含んで成る構成とすることができる。
【００１４】
演算部は、発音中ボイスそれぞれに対する残存発音可能時間を求め、また、選択部は、この演算部によって求められた残存発音可能時間に基づいて発音中ボイスの優先順位を決め、次いで、選択部は、この決めた優先順位に従ってボイスを選択する。そして、読み出し部は、この選択部によって選択されたボイスの波形データをメモリから読み出し、書き込む部は、読み出し部が読み出した波形データをキャッシュメモリに書き込む。したがって、選択部は、演算部によって演算された残存発音可能時間というパラメータに対する優先順位付けを行い、読み出し部は、この優先順位付けを参照して直近に必要な波形データを優先的にメモリから読み出すことになるため、必要なボイスの波形データを迅速に読み出すことが可能となる。更に、書き込み部がキャッシュメモリに書き込む処理を行うことによってキャッシュの使用率が高まり処理が一層迅速に行えるようになる。
【００１５】
また上記楽音発生装置において、前記演算部は、前記残存発音可能時間を、（１）前記信号処理手段で用いる前記ボイスに割り当てられた前記波形データの再生サンプリング周波数（再生ピッチｆ２）と、（２）前記メモリから追加読み出しをせずに前記信号処理手段に供給することができる前記キャッシュメモリ上の残データである残存発音可能データ量（Ｄ）と、（３）前記波形データの録音時のサンプリング周波数（録音ピッチｆ１）と、を含むパラメータを用いて求めることが可能である。
【００１６】
具体的には、演算部は、読み出し手段がメモリに対して追加読み出しを停止するとした場合に、その追加読み出し停止時点において信号処理手段に供給可能な波形データの残存量である残存発音可能データ量（Ｄ）を実効サンプリング周波数（ｆ１、ｆ２）で除した値を残存発音可能時間として求める。ここで「実効サンプリング周波数」は、通常、再生ピッチ（ｆ２）に等しく、ｆ２は録音時から再生時へのピッチシフト量をｎ半音とした時、「ｆ２＝ｆ１×２n/12（Ｈｚ）」として求める周波数（ｆ２）である。また、実装の効率化のため、実効サンプリング周波数（ｆ３）として、再生ピッチ（ｆ２）の代替値を用いることもできる。代替値の例として、ｆ２の上下一半音以内の近似値や、押鍵時の再生ピッチ（ｆ２）、すなわち、押鍵以降のピッチ変更指示を無視した場合の周波数等が考えられる。
【００１７】
今、音程Ｘ１、サンプリング周波数ｆ１（Ｈｚ）で録音されたデータを音程Ｘ２で発音する場合を想定する。この場合のピッチシフト量（音程Ｘ１と音程Ｘ２との音高差）をｎ半音とすると、「実効サンプリング周波数」は、ｆ１に２n/12を乗じた「ｆ１×２n/12（Ｈｚ）」となる。ピッチシフト量が「０」、即ち、ピッチシフトが無ければ「ｎ（ピッチシフト量）＝０」であるので、「実効サンプリング周波数」は、録音時のサンプリング周波数（ピッチ）ｆ１そのものである。
【００１８】
具体例を述べると、音程Ａ４、サンプリング周波数４８０００（Ｈｚ）で録音されたサンプルを音程Ｂ４で発音する場合、ピッチシフト量は２半音であるので、実効サンプリング周波数は４８０００（Ｈｚ）に２2/12を乗じれば良いので「４８０００×２2/12≒５３８７８（Ｈｚ）」となる。このようにして、再生サンプリング周波数（再生ピッチ）を、録音と再生との「ピッチシフト量」を考慮して求めたサンプリング周波数が「実効サンプリング周波数」である。「残存データ量」をこの「実効サンプリング周波数」で除した値を「残存発音可能時間」としているので、録音ピッチと再生ピッチとのピッチシフトを考慮しながら残存発音可能時間を正確かつ容易に求めることができる。
【００１９】
更に、信号処理手段が行う処理（例えば楽音生成指令に応じて波形データを組み合わせてボイスに割り当てて楽音信号を発生させる等）と、波形管理手段が行う処理（例えばキャッシュメモリに対する読み出し書き込み、残存発音可能時間の演算、優先順位付け、波形データのメモリからの読み出し等）とを並行して行う構成とすれば、必要な処理が一層迅速に行われる。
【００２０】
また、本発明の他の態様は、波形データを割り当て発音を行うボイスを複数備える音源と、複数の波形データを記憶するメモリと、前記波形データを記憶するキャッシュメモリとを備えて楽音を発生する楽音発生装置に、 
楽音生成指令に応じて、前記波形データを組み合わせこの組み合わせた前記波形データを前記ボイスに割り当てて楽音信号を発生させる信号処理機能と、 
前記キャッシュメモリに対してアクセス動作を行う波形管理機能と、を実現させるためのプログラムであり、
前記波形管理機能は、   
複数の前記ボイスが発音中である場合のその複数の発音中ボイスに割り当てる波形データが、前記信号処理機能に供給され続けたと想定した時の当該発音中ボイスの、残りの発音可能な時間である残存発音可能時間を零としないように、前記メモリから前記波形データを読み出す機能と、
この読み出した波形データを前記キャシュメモリに書き込む書き込み機能と、を含むことを特徴とする。
【００２１】
この発明によれば、波形管理機能は、複数の発音中ボイスに割り当てる波形データが、信号処理機能に供給され続けたと想定した時の当該発音中ボイスに対する残存発音可能時間を零としないように、メモリから波形データを読み出し、この読み出した波形データを前記キャッシュメモリに書き込む。また、波形管理機能によってキャッシュメモリに対するアクセス動作を行う。したがって、この発明によってもボイスに対する残存発音可能時間を参照することによって発音の遅延を防止することができ、また、読み出し対象となる波形データのサンプリング周期が異なるものが混在する場合であってもこの混在を支障とはせずに、発音開始までの遅延を低減して楽音発生することができる。
【００２２】
このプログラムにおいて、更に、前記波形管理機能を、前記発音中ボイスそれぞれに対する前記残存発音可能時間を求める演算機能と、前記演算部によって求められた前記残存発音可能時間に基づいて前記発音中ボイスの優先順位を決めこの決めた優先順位に従って前記ボイスを選択する選択機能と、前記選択機能によって選択された前記ボイスの波形データを前記メモリから読み出す読み出し機能と、この読み出した波形データを前記キャッシュメモリに書き込む書き込み機能とを含んで成ることを特徴とするプログラムとすることができる。
【００２３】
このプログラムによれば、演算機能が発音中ボイスそれぞれに対する残存発音可能時間を求め、また、選択機能は、この演算機能によって求められた残存発音可能時間に基づいて発音中ボイスの優先順位を決め、次いで、選択機能は、この決めた優先順位に従ってボイスを選択する。そして、読み出し機能は、この選択機能によって選択されたボイスの波形データをメモリから読み出し、また、書き込み機能は、この読み出した波形データを前記キャッシュメモリに書き込む。したがって、選択機能は、演算機能によって演算された残存発音可能時間というパラメータによる優先順位付けを行い、読み出し機能は、この優先順位付けを参照して必要な波形データのみをメモリから読み出すだけで良いので、必要なボイスの波形データを迅速に読み出すことが可能となる。また、書き込み機能は、読み出し機能が読み出した波形データをキャッシュメモリに書き込むことで処理の迅速化を図る。
【００２４】
このようなプログラムは、ＲＯＭ、ＳＳＤ、ＨＤ等の記録媒体に記録しておき、この記録したプログラムをＣＰＵ、ＤＳＰ等のプロセッサ等が読み取って実行していくことによって、信号処理機能や波形管理機能（演算機能、選択機能、読み出し機能、書き込み機能等を含む）等の必要な機能を実現することが可能である。
【発明の効果】
【００２５】
本発明によれば、ボイスに対する残存発音可能時間を参照することによって発音の遅延を防止することを可能とする楽音発生装置やプログラムを実現できるという効果が得られる。
【図面の簡単な説明】
【００２６】
【図１】楽音発生装置１００の構成図である。
【図２】音源の構成図である。
【図３】信号処理部２１の動作を説明するためのフローチャートである。
【図４】信号処理部２１の動作を説明するためのフローチャートである。
【図５】信号処理部２１の動作を説明するためのフローチャートである。
【図６】波形管理部２２の動作を説明するためのフローチャートである。
【図７】動作を説明するための模式的な説明図である。
【発明を実施するための形態】
【００２７】
以下、本発明を実施の形態について図面を参照しつつ説明する。図１は本発明の楽音発生装置１００の実施形態のハードウエア構成図である。なお、この図１に示す楽音発生装置１００のハードウエアの構成は、本発明の一実施形態に過ぎず、また、楽音発生装置１００のハードウエア構成は、本願発明の要旨を逸脱しない範囲内で種々の変形等が可能である。
【００２８】
（構成）
ＣＰＵ１は各構成要素の動作を把握したり動作を制御したりする機能を有する。より具体的には、ＣＰＵ１はアプリケーションプログラム（ＡＰ）の実行や各種の演算処理、制御動作を行う機能を有する。ＲＯＭ３には音色データ等の各種のデータや、アプリケーションプログラム（ＡＰ）、動作プログラム等のプログラム等が読み出し可能に記録されている。ＲＡＭ４は、出力バッファエリア等の記憶エリアが形成されたり、ＣＰＵ１がプログラムを実行する演算過程での一時記憶領域等が形成されたりする。
【００２９】
ＭＩＤＩインターフェイス５はＭＩＤＩ信号を通信するためのインターフェイスであり、例えばＭＩＤＩ信号を受信するインターフェイスとなる。ＭＩＤＩインターフェイス５を介して受信されたＭＩＤＩ信号はバス１５を通ってＣＰＵ１に渡される。また、キーボード６は、英文字、記号、数字、日本語等のキャラクタを入力するための入力デバイスであり、また、同じく入力デバイスであるマウス１１を平面上で移動操作させて画面上のポインタを移動させたり、釦部をクリックすることにより所望のコマンドを選択したりするものである。また、ディスプレイ８は、アプリケーション操作画面を表示したり、ユーザーがこの楽音発生装置１００と対話するために各種のコマンドを表示したりするための出力デバイスである。
【００３０】
音源２０は、楽音発生指示操作等に応じて、楽音信号を生成出力する。Ｄ／Ａ変換器９は、この生成出力されたデジタル楽音信号をアナログ信号に変換する。このＤ／Ａ変換器９には発音手段としてスピーカ１０が接続されているので、デジタルの楽音信号がＤ／Ａ変換器９によってアナログ信号に変換されてスピーカ１０から放音される。かくして、音源２０が生成出力した楽音信号はスピーカ１０から放音される構成となっている。
【００３１】
ＨＤ（ハードディスク）７のアクセス速度（読み出しおよび書き込み速度）はＲＡＭ４等の記憶デバイスと比較して低速であるが大容量のメモリである。このＨＤ７には各種のアプリケーションプログラム（ＡＰ）やＯＳ等をインストールしたり各種のデータを保存したりすることが可能である。楽音信号作成のための音のＰＣＭ波形である波形データを音色数だけ保存可能であるので波形メモリとすることもできる。これらの構成要素は、バス１５を介して相互に所要のデータを送受信可能に接続されている。そして、楽音発生装置１００は、例えば外付け基板上にＤ／Ａ変換器９を搭載し、この基板を差し込んだコンピュータシステムによって実現可能である。したがって楽音発生装置１００は１台のパーソナルコンピュータ（ＰＣ）等によって実現可能である。
【００３２】
（音源２０の構成）
音源２０は、不図示のＲＯＭ等に記録された音源制御用プログラムをＣＰＵが実行することによって実現される。ＣＰＵは信号処理部２１と波形管理部２２とを実現している。また、このＣＰＵはキャッシュメモリ３０を備えていると共に、ＨＤ等で実現可能な大容量記憶装置（メモリ）２３もアクセス可能になっている。このキャッシュメモリ３０は、アクセス（波形データの読み出しおよび書き込み）速度が高速であるが容量の小さい記憶デバイスである一方、大容量記憶装置２３は読み出し速度が低速であるが容量の大きな記憶デバイスである。また、出力バッファ２５も備えていて、この出力バッファ２５に合成音を書き込んだり、この書き込んだ合成音を読み出したりするために使用される。図２の構成例では大容量記憶装置２３を設けているが、図１に記載したＨＤ７を利用して音源２０を構成することも可能である。また、波形データは、所要の波形をＰＣＭ録音したものを音色数記録されているものであり、これを記録している記憶デバイスを、一般に波形メモリと称している。
【００３３】
信号処理部２１は、プログラム管理データ用エリア３１と、ボイス管理データＡ用エリア３２とが形成されており、中間バッファ３３も有している。信号処理部２１は、後述する「発音指令」、「演奏プログラム指令」、「音声合成指令」等の楽音信号の生成指令に応じて、波形データを組み合わせこの組み合わせた波形データをボイスに割り当てて楽音信号を発生させる。プログラム管理データ用エリア３１は、与えられる演奏プログラム（信号処理部２１が発音指令等を基に合成音を出力する際、どのサウンド（サウンド：一つの録音サンプルで、例えばWAV形式ファイルのようなもの）をいつ発音すべきかというような情報をまとめたデータ）を記憶管理するための領域であり、ボイス管理データＡ用エリア３２は、ボイスの記憶管理のためのデータの記憶エリアである。信号処理部２１が波形管理部２２に対してデータ要求指令を与えると、波形管理部２２がこれに応答して波形データを信号処理部２１に渡す。また、信号処理部２１は波形データを合成して生成した合成音（楽音信号）を出力バッファ２５に書き込んだり、この書き込んだ合成音を出力バッファ２５から読み出したりして音源外部の出力装置例えばスピーカ１０に渡す。また、信号処理部２１内には複数のボイス３４が設けられている。この例ではボイス１〜ボイスｎまでｎ個のボイスがある。このボイスは、信号処理部２１における楽音の合成単位であり、ハードウエア的には一種の発音器で成る。
【００３４】
波形管理部２２には、サウンド管理データ用エリア４１と、ボイス管理データＢ用エリア４２と、メモリ管理データ用エリア４３とが形成されている。波形管理部２２は、キャッシュメモリ３０に対して波形データの読み出しおよび書き込みを行い、メモリ管理データ用エリア４３にはキャッシュメモリ３０の３番地がサウンド５の波形ブロックを記録しているというようなキャッシュ記憶内容管理情報を書き込んで記憶しておく。また、波形管理部２２が大容量記憶装置２３に対して読み出し指令を与えると、大容量記憶装置２３がこれに応答して波形データを渡す。
【００３５】
（全体動作例概要）
まず、音源２０の全体動作概要を説明する。便宜上、「ボイス」は信号処理部２１における発音単位、「サウンド」は単一の録音波形とし、１ボイスには１サウンドを割り当てるものとする。大容量記憶装置２３には、予め全てのサウンドが記録されているものとする。例えば、信号処理部２１が処理可能なボイス数は１００程度、大容量記憶装置２３に含まれるサウンド数は数十から数千程度となる。また、音源２０における波形データの語長は１バイトとする。すなわち、４８（ｋＨｚ）の波形１秒分に対し４８（ｋＢ）の波形データが必要である。さらに、各サウンドの１０（ｋＢ）分の波形断片を「ブロック」と呼ぶことにする。サウンドのデータ長が１００（ｋＢ）であれば、このサウンドは１０個の（波形）ブロックに分けられる。キャッシュメモリ３０には、１０００個の（波形）ブロックを記録できるものとする。
【００３６】
ユーザーの操作等により信号処理部２１が「演奏プログラム指令」を受け取ると、信号処理部２１は、演奏プログラム指令をプログラム管理データ用エリア３１に書き込み、その後、演奏プログラムに含まれる総てのサウンドを列挙し、波形管理部２２に通知する。波形管理部２２は、通知された総てのサウンドを示す情報をサウンド管理データエリア４１に登録し、各サウンドの先頭部分（第１番目のブロック）を予め大容量記憶装置２３から読み出し、キャッシュメモリ３０に書き込む。キャッシュメモリ３０の利用状況は、メモリ管理データ用エリア４３に書き込まれる。なお、先頭部分として複数ブロックを予め読み出しても良い。
【００３７】
続いて、信号処理部２１が、例えばキーボード６等の入力装置から「発音指令」を受け取ると、発音指令に対応した楽音を生成するために、プログラム管理データ用エリア３１に記憶されているプログラム管理情報等からボイスが発音すべきサウンドを決定し、当該ボイスを示すボイス情報をボイス管理データＡ用エリア３２に登録する。続いて、信号処理部２１は、波形管理部２２に対し、当該ボイスが使用するサウンドと、波形データを消費する速度である「実効サンプリング周波数」とを通知する。信号処理部２１は、使用するボイスに対応するサウンドの波形データを先頭から順に処理して出力音を合成する。信号処理部２１が「音声合成指令」を受け取ると、ボイス管理データＡ用エリア３２に登録されている総てのボイスについて、波形管理部２２に対しサウンドの先頭からのオフセットを指定して波形データを要求し、楽音を合成して中間バッファ３３に書き込む処理を行う。さらに、信号処理部２１はこの中間バッファ３３に書き込まれた合成音に対してエフェクト等の後処理を行ってから、出力バッファ２５に対してこの後処理を施した合成音を出力する。なお、信号処理部２１はループ状波形に対応するため、一定のオフセット範囲に対するアクセス要求を繰り返すことがある。信号処理部２１は、離鍵指示、ピアノダンパーオフ等の消音指示を受け取ると、リリース音等の処理を行った後、該当するボイスに対する処理を終了する。以上が信号処理部２１の全体的な処理の概要である。
【００３８】
一方、波形管理部２２は、信号処理部２１からサウンドの使用通知を受け取ると、サウンドの先頭部分を大容量記憶装置メモリ２３から予め読み込んでキャッシュメモリ３０に書き込んでおく。続いて、信号処理部２１からボイスの作成通知を受け取ると、波形管理部２２は、信号処理部２１が次々に要求する波形データを遅滞なく供給する責任を負う。このため、波形管理部２２は、作成通知されたボイスを示すボイス情報をボイス管理データＢ用エリア４２の当該ボイス用エリアに記録する。信号処理部２１から供給可能な読み込み済み波形データを、メモリ管理データ用エリア４３を調べて求め、ボイス管理データＢ用エリア４２に登録する。信号処理部２１から波形データを要求された際には、この波形データを使用して応答する。
【００３９】
波形管理部２２は、総てのボイスに対する残存発音可能時間がゼロにならないように、大容量記憶装置２３に読み出し指令を発行して波形データを読み出す。このため、波形管理部２２はボイス管理データＢ用エリア４２に登録されている総てのボイスに対して、「残存データ量」と「実効サンプリング周波数」から「残存発音可能時間」を求め、この残存発音可能時間の少ないボイスが使用するサウンドについて読み出し指令を発行する。大容量記憶装置２３から波形データの応答があると、波形管理部２２は、この波形データをキャッシュメモリ３０に記憶し、このキャッシュメモリ３０に記憶されたデータの情報をメモリ管理データに保持する。キャッシュメモリ３０は小容量であるため、容量が不足する場合は必要のないデータを選択して消去する。そして、信号処理部２１および波形処理部２２がそれぞれ行う処理は並列に動作させることができる。場合によっては、信号処理部２１が行う動作と波形管理部２２が行う動作を交互とすることも可能である。
【００４０】
（動作詳細）
（信号処理部２１の動作：「演奏プログラム指令」が与えられた場合）
図３は信号処理部２１が「演奏プログラム指令」を与えられた場合の動作の説明図である。信号処理部２１はステップＳ３００〜ステップＳ３６０までの動作を行う。まず、ステップＳ３００において、「演奏プログラム指令」を受け取ると、ステップＳ３１０において、この「演奏プログラム指令」における演奏プログラムをプログラム管理データ用エリア３１に書き込み、ステップ３２０において、このプログラム管理データ用エリア３１に書き込まれた演奏プログラムに含まれる総てのサウンドを列挙し、これを波形管理部２２に通知する。ステップＳ３３０では、波形管理部２２に通知してないサウンドがあるか否かを判断する。波形管理部２２に通知してないサウンドがあると判断した場合（Ｙｅｓ）にはステップ３４０に進む一方、波形管理部２２に通知していないサウンドがないと判断した場合（Ｎｏ）には、ステップＳ３６０に進み、演奏準備が完了したとして、図３に示す一連の動作を終了する。ステップＳ３４０では、信号処理部２１が波形管理部２２に対してサウンドを一つ通知する。この通知後、信号処理部２１は待機状態に入る。この通知を受けた波形管理部２２は、通知されたサウンドをサウンド管理データ用エリア４１に登録し、次いでサウンドの先頭部を大容量記憶装置２３から読み出し、更に読み出した先頭部の波形データをキャッシュメモリ３０に書き込んで波形データの管理情報をメモリ管理データ用エリア４３に書き込む。これによって波形管理部２３は信号処理部２１に完了応答を行う。この完了応答を受けた信号処理部２１は、ステップＳ３５０において待機を終了してステップＳ３３０に戻る。かくして、「演奏プログラム指令」が与えられた時の信号処理部２１が行う演奏準備が完了する。
【００４１】
（信号処理部２１の動作：「発音指令」が与えられた場合）
図４は信号処理部２１が「発音指令」を与えられた場合の動作の説明図である。信号処理部２１はステップＳ４００〜ステップＳ４６０までの動作を行う。まず、ステップＳ４００において、「発音指令」を受け取ると、ステップＳ４１０において、新規にボイスの割り当てが可能か否かを判断する。新規に割り当て可能なボイスが無い（例えばボイスが総て使用されている等）と判断した場合（Ｎｏ）には何もしないで処理を終了する。この一方、新規にボイスの割り当てが可能であると判断した場合（Ｙｅｓ）には、ステップＳ４２０に進む。ステップＳ４２０においては、発音指示の音高、ベロシティ、演奏プログラムの情報等を参照して新規のボイスを準備する。次いで、ステップＳ４３０において、ボイス管理データＡ用エリア３２に、この新規ボイスを示す情報等を含むボイス情報を記憶して登録する。そして、ステップ４４０において、波形管理部２２に対して、サウンドと実効サンプリング周波数とを指定して新規ボイスを通知し、待機状態に入る。新規ボイスの通知を受けた波形管理部２２は、ボイスをボイス管理データＢ用エリア４２に登録し、次いで対応するサウンドの読み込み済み波形データの情報をボイス管理データＢ用エリア４２の当該ボイス用エリアに記録し、信号処理部２１に対して完了応答する。この完了応答を受けた信号処理部２１は、ステップＳ４５０において待機状態を終了し、ステップ４６０において作業を完了する。かくして、「発音指令」が与えられた時の信号処理部２１が行う処理が終了する。
【００４２】
（信号処理部２１の動作：「音声合成指令」が与えられた場合）
図５は信号処理部２１が「音声合成指令」を与えられた場合の動作の説明図である。信号処理部２１はステップＳ５００〜ステップＳ５８０までの動作を行う。まず、ステップＳ５００において、「音声合成指令」を受け取ると、ステップＳ５１０において、ボイス管理データＡ用エリア３２に登録されている総てのボイスを未処理とする。次に、ステップＳ５２０において、未処理のボイスが有るか否かを判断する。未処理のボイスが有ると判断した場合（ステップＳ５２０のＹｅｓ）には、その内の一つのボイスを選択し（ステップＳ５３０）、ステップＳ５４０において、波形管理部２２に当該音声合成に必要な波形データを要求する。次いで、ステップＳ５５０において、必要な波形データを組み合わせる音声合成処理を行い、ステップＳ５６０において、これを中間バッファ３３に書き込む。一方、ステップＳ５２０において、未処理のボイスが無いと判断した場合（ステップＳ５２０のＹｅｓ）には、ステップＳ５７０に移って、中間バッファ３３に書き込んだ音声合成処理した信号に対して、残響処理等の演算を行って後処理を施す。そして、ステップＳ５８０において、中間バッファ３３に書き込んで後処理を行った信号を出力バッファ２５に書き込む。以降、この出力バッファ２５に書き込んだ信号を読み出してスピーカ１０等の出力装置に供給する。かくして、「音声合成指令」が与えられた時の信号処理部２１が行う処理が終了する。なお、この音声合成指令が与えられた場合においても、ステップＳ５４０等において、波形管理部２２が信号処理部２１との間で所要の情報をやりとりする。万一、ボイスの残存発音可能時間が零となった場合、波形管理部２２は読み出し完了まで応答を保留する、または、無音信号を返すなどの応急措置を取ることもできる。
【００４３】
（波形管理部２２の動作）
図６は波形管理部２２が行う処理を示すフローチャートである。まず、ステップＳ６００で波形データの読み出しが必要なボイスがあるか否かを判断する。ない（Ｎｏ）と判断した場合にはステップＳ６７０に移行して、一定時間または次の波形データ要求までウエイト状態になる。一方、ステップＳ６００において、波形データ読み出しが必要なボイス例えば発音中のボイスがあると判断した場合（Ｙｅｓ）にはステップＳ６１０に移行する。ステップＳ６１０では、この発音中の各ボイスの残存発音可能時間を計算する。この計算は、残存発音可能データ量（Ｄ）、即ち、「波形管理部２２が大容量記憶装置２３に対して追加読み出しを停止するとした場合に、その追加読み出し停止時点において信号処理部２１に供給可能な波形データのキャッシュメモリ３０上の残存量である残存発音可能データ量（Ｄ）」を、実効サンプリング周波数で除した値を残存発音可能時間として求めることによって実行する。この実効サンプリング周波数は、録音ピッチ（ｆ１）と再生ピッチ（ｆ２）とのピッチシフト量をｎ半音として「ｆ２＝ｆ１×２n/12（Ｈｚ）」となる周波数（ｆ２）である。つまり、残存発音可能時間を、（１）信号処理部２１で用いるボイスの波形データの再生ピッチ（ｆ２）と、（２）大容量記憶装置２３から追加読み出しをせずに信号処理部２１に供給することができるキャッシュメモリ３０上の残データである残存発音可能データ量（Ｄ）と、（３）波形データの録音時のサンプリング周波数（ｆ１）と、を含むパラメータを用いて求めることが可能となる。
【００４４】
そして、ステップＳ６２０において、各ボイスの優先順位を決める。例えばその時点での残存発音可能時間が短い順番に高い優先順位を付与する。かくして、一番短い残存発音可能時間には最も高い優先順位である「１」番が付与される。そして、ステップＳ６３０において、最も優先順位の高いボイスを選ぶ。ステップＳ６４０ではこのボイスが使用する波形データを得るべく、大容量記憶装置２３に対して読み出し指令を発行して、読み出された波形データを得る。ステップＳ６５０では、この読み出し指令の発行によって大容量記憶装置２３から読み出した波形データをキャッシュメモリ３０に書き込む。そして、ステップＳ６６０において、キャッシュメモリ３０のキャッシュ記憶内容管理情報をメモリ管理データ用エリア４３に書き込む。以上が、波形管理部２２が行う主たる動作である。
【００４５】
波形管理部２２は、発音中ボイスそれぞれに対する残存発音可能時間を求め（ステップ６１０：演算機能）、この求めた残存発音可能時間に基づいて発音中ボイスの優先順位を決め、この決めた優先順位に従ってボイスを選択する（ステップ６３０：選択機能）。そして、波形管理部２２は、この選択されたボイスの波形データを大容量記憶装置２３（メモリ）から読み出し（ステップ６４０：読み出し機能）、読み出した波形データをキャッシュメモリ３０に書き込む（ステップ６５０：書き込み機能）。したがって、波形管理部２２は、演算された残存発音可能時間というパラメータに対する優先順位付けを行い、この優先順位付けを参照して必要な波形データのみを大容量記憶装置２３から読み出すだけで良いので、必要なボイスの波形データを迅速に読み出すことが可能となる。更に信号処理部２１からの波形データの要求の際にはキャッシュメモリ３０を利用するので一層処理が迅速に行われる。
【００４６】
図７は本発明の実施形態の音源２０が行う動作の模式的説明図である。図７には、サウンド管理データ用エリア４１において記憶管理される「サウンド管理データ」、ボイス管理データＢ用エリア４２において記憶管理される「ボイス管理データＢ」、メモリ管理データ用エリア４３において記憶管理される「メモリ管理データ」および、キャッシュメモリ３０の具体的な記憶内容が模式的に記載されている。図２を参照すれば分かるように、「サウンド管理データ」、「ボイス管理データＢ」および「メモリ管理データ」はいずれも波形管理部２２によって管理されている。そして、図７では３段階での各データの変化の様子を示している。具体的には、１段階目が「演奏プログラムロード後の段階」、２段階目が「同時２音の発音指示がある段階」、３段階目が「それから０．１秒後の段階」である。今、サウンド１、サウンド３、およびサウンド５を使用する場合を想定する。また、各サウンドは複数のブロックで成る。例えばサウンド１は、「サウンド１ブロック１」、「サウンド１ブロック２」、…「サウンド１ブロック１０」から成る。
【００４７】
まず演奏プログラムをロードした後である（第１段階）。この演奏プログラムにはサウンド１、サウンド３、サウンド５の３つのサウンドが含まれている。波形管理部２２は、信号処理部２１からの通知により、サウンド管理データとしてサウンド１、サウンド３、サウンド５を示す情報を記憶管理する。この段階では使用するボイスが決まっていないため、ボイス管理データＢには何ら情報が記憶管理されていない。また、メモリ管理データとしては、各サウンドの先頭のブロックである「サウンド１ブロック１」、「サウンド３ブロック１」、「サウンド５ブロック１」を示すキャッシュ記憶管理情報が記憶管理され、対応するキャッシュメモリ３０の領域には対応する波形データが記憶される。
【００４８】
第２段階では、同時２音の発音指示が発行された段階であり、図７中の中央部に各データの変化の様子を示す。サウンド管理データの内容はサウンドの追加は生じないから変化しない。そして、ボイス管理データＢには、同時２音を使用する旨の通知を受けた波形管理部２２によって、２つのボイスであるボイス１、ボイス２を示すボイス情報を追加された。波形管理部２２の演算によって、ボイス１に割り当てた「サウンド１」は実効サンプリング周波数が４８（ｋＨｚ）、残存発音可能時間が０．２０８（ｓ）、ボイス２に割り当てた「サウンド３」は実効サンプリング周波数が５７（ｋＨｚ）、残存発音可能時間が０．１７５（ｓ）であることが求められる。なお、サウンド、残存発音可能時間の演算に必要な実効サンプリング周波数等の情報は信号処理部２１から渡される。
【００４９】
この演算結果によって波形管理部２２が発音中のボイスの残存発音可能時間に対して優先順位を決定すると、ボイス２の「サウンド３」が１位、ボイス１の「サウンド１」が２位となる。よって優先するのはボイス２の「サウンド３」であるので、サウンド３ブロック１に続く波形データであるサウンド３ブロック２を大容量記憶装置２３から読み出しキャッシュメモリ３０の空き領域に書き込む。この書き込み状態を示すために、キャッシュメモリ３０に読込中と記載している。かくして、ボイス２の発音遅れを防止して発音の途切れ等の支障がなくなる。
【００５０】
最後の３段階目の状態は、図７の右側部に記載しており、これは同時発音開始から０．１（ｓ）経過した段階である。この段階で再度、波形管理部２２が発音中ボイスのサウンド１、サウンド３の残存発音可能時間を演算によって求めると、ボイス１に割り当てた「サウンド１」の残存発音可能時間が０．１０８（ｓ）、ボイス２に割り当てた「サウンド３」の残存発音可能時間が０．２５１（ｓ）であると求められる。すると、今度は、サウンド１の残存発音可能時間の方が短いのでサウンド１の方が優先度が高くなる。この結果、この段階では、サウンド１のデータを続けて読むようするべく、大容量記憶装置２３から波形データを読み込んで、キャッシュメモリ３０にサウンド１ブロック２を書き込んでメモリ管理データを更新する。
【００５１】
以上のように、本発明の実施形態によれば、波形管理部２２は、複数の発音中ボイスに割り当てる波形データが、信号処理部２１に供給され続けたと想定した時の当該発音中ボイスに対する残存発音可能時間を零としないように、大容量記憶装置（メモリ）２３から波形データを読み出し、この読み出した波形データをキャッシュメモリ３０に書き込む。この結果、ボイスに対する残存発音可能時間を参照することによって発音の遅延を防止することが可能となり、読み出し対象となる波形データのサンプリング周期が異なっていてもこの混在を支障とせずに発音開始までの遅延を低減して楽音発生することができる。
【００５２】
そして、以上述べてきたような音源２０の動作は、ＣＰＵが不図示のＲＯＭに記録された音源動作のための動作用プログラムを実行することによって実現することが可能である。
【００５３】
以上の実施形態において様々な変形例が挙げられる。例えば、キャッシュ機構をリングバッファや可変サイズのヒープアロケータ等に変更すること、様々なデータの付属データを変更すること等が挙げられる。
【産業上の利用可能性】
【００５４】
以上説明してきたように、本発明の楽音発生装置は、音楽分野、特に電子鍵盤楽器等に利用することができる。
【符号の説明】
【００５５】
１  ＣＰＵ
３  ＲＯＭ
４  ＲＡＭ
５  ＭＩＤＩインターフェイス
６  キーボード
７  ＨＤ（ハードディスク）
８  ディスプレイ
９  Ｄ／Ａ変換器
１０  スピーカ
１１  マウス
１５  バス
２０  音源
２１  信号処理部
２２  波形管理部
２３  大容量記憶装置
２５  出力バッファ
３０  キャッシュメモリ
１００  楽音発生装置
【図１】
0006452234.tif 000002
【図２】
0006452234.tif 000003
【図３】
0006452234.tif 000004
【図４】
0006452234.tif 000005
【図５】
0006452234.tif 000006
【図６】
0006452234.tif 000007
【図７】
0006452234.tif 000008