(57)【要約】【課題】フレーム間のタイミングを満たさないために生じる不具合なしに、タスクを完了できるようにする。【解決手段】ベクトル方式のボイス生成アルゴリズムの少なくとも１つのインスタンスは、Ｎ個のボイスを生成するように設定する。イベントに応答して実行される新しいボイスを識別する。新しいボイスおよび発音中のボイスに割り当てられる必要があるプロセッサリソースを判定する処理では、新しいボイスが、少なくとも１つのインスタンスによって生成されることができるかどうかを解明する。必要とされるプロセッサリソースを満たすプロセッサリソースが利用できる場合は、新しいボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、プロセッサリソースが利用できない場合は、少なくとも１つの発音中のボイスに割り当て済みプロセッサリソースの割り当てを解除する。【選択図】図１５
2006196003.tif 000002
【特許請求の範囲】
【請求項１】
複数のボイスを生成するオーディオプロセッサのために、複数のボイスを実行中にプロセッサリソースに動的にボイスを割り当てるボイス処理方法であって、
前記オーディオプロセッサのプロセッサリソースを利用して、ベクトル方式のボイス生成アルゴリズムの少なくとも１つのインスタンスを含み、ボイスを発音させるデータ処理ステップであって、前記ベクトル方式のボイス生成アルゴリズムの少なくとも１つのインスタンスは、Ｎ個のボイスを生成するように設定することができ、Ｎは、２以上の整数であるデータ処理ステップと、
イベントに応答して実行される新しいボイスを識別するボイス識別ステップと、
前記新しいボイスおよび発音中のボイスに割り当てられる必要があるプロセッサリソースを判定するリソース判定ステップであって、前記判定は、前記新しいボイスが、前記少なくとも１つのインスタンスによって生成されることができるかどうかを解明することを含むリソース判定ステップと、
前記必要とされるプロセッサリソースを満たすプロセッサリソースが利用できる場合は、前記新しいボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、プロセッサリソースが利用できない場合は、少なくとも１つの発音中のボイスに割り当て済みプロセッサリソースの割り当てを解除するリソース割り当てステップと
を有するボイス処理方法。
【請求項２】
請求項１記載のボイス処理方法であって、
前記リソース割り当てステップの割り当ての解除の後、前記リソース判定ステップを繰り返す
ことを特徴とするボイス処理方法。
【請求項３】
請求項１または２記載のボイス処理方法であって、
開始待ち行列と遅延待ち行列を管理する待ち行列管理ステップも有し、
前記リソース割り当てステップは、前記開始待ち行列に前記新しいボイスを加えることを含み、プロセッサリソースが利用できない場合は、前記新しいボイスを前記遅延待ち行列に加え、遅延の後に前記新しいボイスを前記遅延待ち行列から前記開始待ち行列に移動する
ことを特徴とするボイス処理方法。
【請求項４】
請求項１〜３のいずれかに記載のボイス処理方法であって、
前記少なくとも１つのインスタンスは、単一命令多重データである
ことを特徴とするボイス処理方法。
【請求項５】
請求項１〜４のいずれかに記載のボイス処理方法であって、
前記ボイス識別ステップは、前記新しいボイスを含むボイスクラスタを識別することを含み、
前記リソース判定ステップは、前記ボイスクラスタにプロセッサリソースが利用できるかどうかを判定することを含む
ことを特徴とするボイス処理方法。
【請求項６】
請求項５記載のボイス処理方法であって、
前記リソース割り当てステップは、前記少なくとも１つの発音中のボイスを含む発音中のボイスクラスタに割り当て済みプロセッサリソースの割り当てを解除することを含む
ことを特徴とするボイス処理方法。
【請求項７】
請求項１〜６のいずれかに記載のボイス処理方法であって、
前記プロセッサリソースは、複数のボイスを実行しているベクトル方式ボイス生成アルゴリズムの複数のインスタンスを含み、前記複数のインスタンスの各インスタンスは、前記複数のボイスのうちＮ個のボイスを実行するように設定することができ、かつ、前記割り当ての解除により、前記複数のインスタンスの１つから前記発音中のボイスが解放される場合は、前記複数のインスタンスのうち多くとも１つがＮ個未満のボイスを実行するように設定されるように、前記複数のインスタンスを再構成するインスタンス再構成ステップ
も有するボイス処理方法。
【請求項８】
請求項１〜７のいずれかに記載のボイス処理方法であって、
前記少なくとも１つのインスタンスはＮ個のボイスを実行するように設定することができ、前記新しいボイスは前記少なくとも１つのインスタンスによって実行することができ、かつ、前記少なくとも１つのインスタンスがＮ個未満のボイスを実行するように設定される場合は、前記リソース割り当てステップでは、前記少なくとも１つのインスタンスに前記新しいボイスを割り当てる
ことを特徴とするボイス処理方法。
【請求項９】
請求項１〜４のいずれかに記載のボイス処理方法であって、
ボイスへ割り当てられるプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、発音中のボイスおよび効果に割り当て済みのリソースを示す割り当て済みプロセッサリソースパラメータを計算するパラメータ取得ステップも有し、
前記リソース判定ステップは、前記割り当て済みプロセッサリソースパラメータと前記新しいボイスのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することも含む
ことを特徴とするボイス処理方法。
【請求項１０】
請求項５または６記載のボイス処理方法であって、
ボイスクラスタのためのプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、割り当て済みのプロセッサリソースパラメータを計算するパラメータ取得ステップも有し、
前記リソース判定ステップは、前記割り当て済みプロセッサリソースパラメータと、前記ボイスクラスタのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することを含む
ことを特徴とするボイス処理方法。
【請求項１１】
請求項１０記載のボイス処理方法であって、
前記リソース判定ステップの結果に応じて、前記ボイスクラスタからボイスを取り除くボイス取り除きステップ
も有するボイス処理方法。
【請求項１２】
請求項９〜１１のいずれかに記載のボイス処理方法であって、
前記リソース判定ステップの結果に応じて、前記最大プロセッサリソースパラメータを変更する最大プロセッサリソースパラメータ変更ステップ
も有するボイス処理方法。
【請求項１３】
請求項１〜１２のいずれかに記載のボイス処理方法であって、
前記ベクトル方式のボイス生成アルゴリズムは、ＳＩＭＤプロセッサのためのＰＣＭボイスモデルアルゴリズムである
ことを特徴とするボイス処理方法。
【請求項１４】
請求項１〜１２のいずれかに記載のボイス処理方法であって、
前記ベクトル方式のボイス生成アルゴリズムは、ＳＩＭＤプロセッサのためのアナログボイスモデルアルゴリズムである
ことを特徴とするボイス処理方法。
【請求項１５】
複数のボイスを生成するオーディオプロセッサであって、
ベクトルボイス生成アルゴリズムの少なくとも１つのインスタンスを含み、ボイスを発音させるボイス生成アルゴリズムを実行するプロセッサリソースを有し、前記ベクトル方式ボイス生成アルゴリズムの少なくとも１つのインスタンスは、Ｎ個のボイスを生成するように設定でき、Ｎは２以上の整数であるデータ処理手段と、
イベントに応答して実行される新しいボイスを識別するボイス識別手段と、
前記新しいボイスが前記少なくとも１つのインスタンスによって生成されることができるかどうかを解明することを含めて、前記新しいボイスと前記発音中のボイスに割り当てられる必要があるプロセッサリソースを判定するリソース判定手段と、
前記必要とされるリソースを満たすプロセッサリソースが利用できる場合は、前記選択されたボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、プロセッサリソースが利用できない場合は、少なくとも１つの発音中のボイスに割り当てられたプロセッサリソースの割り当てを解除するリソース割り当て手段と
を備えるオーディオプロセッサ。
【請求項１６】
請求項１５記載のオーディオプロセッサであって、
前記リソース割り当て手段でのプロセッサリソースの割り当て解除の後に、前記リソース判定手段の処理を繰り返す
をことを特徴とするオーディオプロセッサ。
【請求項１７】
請求項１５または１６記載のオーディオプロセッサであって、
開始待ち行列と遅延待ち行列を記録し、管理する待ち行列管理手段も有し、
前記リソース割り当て手段は、前記開始待ち行列に前記新しいボイスを加えることを含み、プロセッサリソースが利用できない場合は、前記新しいボイスを前記遅延待ち行列に加え、遅延の後に前記新しいボイスを前記遅延待ち行列から前記開始待ち行列に移動する
をことを特徴とするオーディオプロセッサ。
【請求項１８】
請求項１５〜１７のいずれかに記載のオーディオプロセッサであって、
前記少なくとも１つのインスタンスは、単一命令多重データである
をことを特徴とするオーディオプロセッサ。
【請求項１９】
請求項１５〜１８のいずれかに記載のオーディオプロセッサであって、
前記ボイス識別手段の処理には、前記新しいボイスを含むボイスクラスタを識別することを含み、
前記リソース判定手段の処理には、前記ボイスクラスタにプロセッサリソースが利用できるかどうかを判定することを含む
ことを特徴とするオーディオプロセッサ。
【請求項２０】
請求項１９記載のオーディオプロセッサであって、
前記リソース割り当て手段の処理には、前記少なくとも１つの発音中のボイスを含む発音中のボイスクラスタに割り当て済みプロセッサリソースの割り当てを解除することを含む
ことを特徴とするオーディオプロセッサ。
【請求項２１】
請求項１５〜２０のいずれかに記載のオーディオプロセッサであって、
前記プロセッサリソースは、複数のボイスを実行しているベクトル方式ボイス生成アルゴリズムの複数のインスタンスを含み、前記複数のインスタンスの各インスタンスは、前記複数のボイスのうちＮ個のボイスを実行するように設定することができ、かつ、前記割り当ての解除により、前記複数のインスタンスの１つから前記発音中のボイスが解放される場合は、前記複数のインスタンスのうち多くとも１つがＮ個未満のボイスを実行するように設定されるように、前記複数のインスタンスを再構成するインスタンス再構成手段
も備えるオーディオプロセッサ。
【請求項２２】
請求項１５〜２１のいずれかに記載のオーディオプロセッサであって、
前記少なくとも１つのインスタンスはＮ個のボイスを実行するように設定することができ、前記新しいボイスは前記少なくとも１つのインスタンスによって実行することができ、かつ、前記少なくとも１つのインスタンスがＮ個未満のボイスを実行するように設定される場合は、前記リソース割り当て手段では、前記少なくとも１つのインスタンスに前記新しいボイスを割り当てる
ことを特徴とするオーディオプロセッサ。
【請求項２３】
請求項１５〜１８のいずれかに記載のオーディオプロセッサであって、
ボイスへ割り当てられるプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、発音中のボイスおよび効果に割り当て済みのリソースを示す割り当て済みプロセッサリソースパラメータを計算するパラメータ取得手段も有し、
前記リソース判定手段の処理には、前記割り当て済みプロセッサリソースパラメータと前記新しいボイスのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することも含む
ことを特徴とするオーディオプロセッサ。
【請求項２４】
請求項１９または２０記載のオーディオプロセッサであって、
ボイスクラスタのためのプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、割り当て済みのプロセッサリソースパラメータを計算するパラメータ取得手段も有し、
前記リソース判定手段の処理には、前記割り当て済みプロセッサリソースパラメータと、前記ボイスクラスタのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することを含む
ことを特徴とするオーディオプロセッサ。
【請求項２５】
請求項２４記載のオーディオプロセッサであって、
前記リソース判定手段の処理結果に応じて、前記ボイスクラスタからボイスを取り除くボイス取り除き手段
も備えるオーディオプロセッサ。
【請求項２６】
請求項２３〜２５のいずれかに記載のオーディオプロセッサであって、
前記リソース判定手段の処理結果に応じて、前記最大プロセッサリソースパラメータを変更する最大プロセッサリソースパラメータ変更手段
も備えるオーディオプロセッサ。
【請求項２７】
請求項１５〜２６のいずれかに記載のオーディオプロセッサであって、
前記ベクトル方式のボイス生成アルゴリズムは、ＳＩＭＤプロセッサのためのＰＣＭボイスモデルアルゴリズムである
ことを特徴とするオーディオプロセッサ。
【請求項２８】
請求項１５〜２６のいずれかに記載のオーディオプロセッサであって、
前記ベクトル方式のボイス生成アルゴリズムは、ＳＩＭＤプロセッサのためのアナログボイスモデルアルゴリズムである
ことを特徴とするオーディオプロセッサ。
【請求項２９】
請求項１〜１４のいずれかに記載のボイス処理方法をコンピュータにより実行させるボイス処理プログラム。
【請求項３０】
請求項２９記載のボイス処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、各アルゴリズムがベクトル処理を用いて複数のボイスを同時に計算する汎用プロセッサを使用して、複数のボイス生成アルゴリズムを実行するミュージックシンセサイザに関する。詳細には、そのようなミュージックシンセサイザにおける動的なボイス割り当てとリソース割り当ての方法に関する。
【背景技術】
【０００２】
汎用ＣＰＵまたはＤＳＰを使用して、ユーザ入力に応答して音楽音を生成する音声生成プログラムを実行することは、ミュージックシンセサイザ業界でよく知られている。複数の波形を並行して計算する並行命令セットを含む汎用ＣＰＵまたはＤＳＰの使用もよく知られている。典型的なソフトウェアシンセサイザ内には、サンプルレートクロックと、サンプルレートクロックのＮ倍（例えば１６、３２、６４、１２８倍など）であるフレームレートクロックがある。フレームごとに、コードが実行され、Ｎ個のオーディオサンプルからなるオーディオバッファが満たされる。それらのサンプルはその後バッファから読み出され、音声として次のフレーム周期に出力される。読み出される時までにバッファが完全に満たされることができない場合（例えばＣＰＵがバッファを満たすのに必要とされるコードをすべて実行する時間がなかったなど）は、不完全なバッファのために出力波形にエラーが生じる。多くのソフトウェアシンセサイザは、この問題への対処が不十分であるか、あるいは全く対処しない。例えば、多くのソフトウェア合成システムでは、ユーザは、「過度に多くの音」を再生しないように気をつけなければならず、そうでないと、出力バッファが満たされるのが間に合わなかった時に、オーディオに「クリックノイズ」や「ポップノイズ」が聞こえる。この問題に対処するために、ボイス割り当てとリソース管理にロバストな方法が必要とされる。
【０００３】
電子音楽機器の動的なボイス割り当ては、そのリソースが現在利用可能であるか否かに関係なく、必要とされる音生成リソース（メモリ、プロセッサ、バスサイクルなど）を使用して、任意の音をアクティブにする能力を意味する。これは、リソースが利用可能であれば、そのリソースが直ちに使用され、リソースが利用可能でない場合は、現在そのリソースを使用しているボイス（または他のプロセス）からそのリソースを「回収」し、新しいボイスに再割り当てしなければならないことを意味する。また、ボイスアロケータは、処理リソースとメモリの制限を超えないように、既存のボイスと新しいボイスを管理しなければならない。
【０００４】
特許文献１は、単純なボイス割り当て機構を伴う、汎用ＣＰＵを利用したソフトウェアシンセサイザを記載している。ノートオンイベントに応答して、ボイスは、コストの影響を考慮せずに、即座に計算のために初期化され、準備される。処理フレームごとに、ＣＰＵの負荷が調べられて、そのフレームでいくつのボイスが計算されることができるかを判定する。要求されるボイスの数が計算できる数より多い場合は、現在のフレームで一部のボイスがミュートされる。ミュートされるボイスの優先順位を決める方法は記載されない。特許文献１の別の実施形態では、ＣＰＵの負荷が高くて要求される計算をすべて行うことができない時には、サンプルレートが下げられるか、より単純なアルゴリズムに置き換えられる。こうした方法はすべて、忠実度の低下と、音声品質の低下につながる。
【０００５】
別のソフトウェアシンセサイザが、特許文献２に記載される。このソフトウェアシンセサイザは、ベクトル処理を用いて複数のボイスを並行して計算する汎用ＣＰＵに基づく。ボイス割り当てとリソース管理のためのベクトル処理の関与については論じられない。１フレームに計算できるボイスより多くのボイスが要求される事例に対処する措置は、この文献にはない。
特許文献３は、動的なボイス割り当てのためのソフトウェアシンセサイザおよびシステムを記載する。記載されるシステムは、そのシンセサイザの特定のアーキテクチャに非常に固有のものである。しかし、同特許は、メモリとＣＰＵ処理の固定された制限を前提とした、新しいリソースの割り当ての基本と、ボイスの減少を伴うボイス回収の基本について述べている（特許文献３の図１４〜１７参照）。同特許は、ベクトル処理およびボイス割り当ての関与については記載していない。また、イベントのコスト（要求されるボイスの数以外）を求める方法も、回収されるボイスの階層的な優先順位付けについても、１つのフレーム内の過度のコスト影響を回避するための時間差開始についても論じていない。
【特許文献１】米国特許第５，９８１，８６０号明細書
【特許文献２】米国特許第５，９５５，６９１号明細書
【特許文献３】米国特許第５，３７６，７５２号明細書
【発明の開示】
【発明が解決しようとする課題】
【０００６】
リアルタイムシステムでは、各種のボイスモデルに必要とされるすべての計算と、各フレームで発音データに用いられる効果アルゴリズムは、基本的にそのフレームで完了されなければならない。総計算負荷が１フレームで完了するには大きすぎる場合、そのタスクは、サイズを縮小して時間内に完了できるようにしなければならない。リアルタイムシステムで、各種のボイスモデルと効果アルゴリズムすべての間でデータ処理リソースを割り当てて、合成される出力が、フレーム間のタイミングを満たさないために生じる不具合なしに、良好に聞こえるようにする方法が必要とされる。
【課題を解決するための手段】
【０００７】
本発明の方法は、プロセッサリソースを利用して、ボイスを発音させるボイス生成アルゴリズムを実行することを含む。ボイス生成アルゴリズムは、ＳＩＭＤアーキテクチャのプロセッサや他のベクトルプロセッサアーキテクチャを使用して実行されるアルゴリズムなど、ベクトル方式のボイス生成アルゴリズムからなる。割り当てられるベクトル方式のボイス生成アルゴリズムのインスタンスは、Ｎ個のボイスを生成するように設定することができる（Ｎは２以上の整数）。動的なボイス割り当てプロセスは、シンセサイザのキーボードのキーを押すことによって発生するノートオンイベントなどのイベントに応答して実行される新しいボイスまたは新しいボイスクラスタを識別する。新しいボイスあるいは新しいクラスタと、現在発音中のボイスに割り当てられる必要がある、プロセッサリソースの合計が判定される。求められるリソースの合計を満たすプロセッサリソースが利用できる場合は、新しいボイスあるいは新しいボイスクラスタのためのボイス生成アルゴリズムにプロセッサリソースが割り当てられる。プロセッサリソースが利用できない場合は、ボイスが回収される。ボイスを回収するには、少なくとも１つの発音中のボイスまたは発音中のボイスクラスタからプロセッサリソースの割り当てが解除される。ボイス割り当て処理は、新しいボイスまたは新しいクラスタの割り当てが成功するまで反復する。
【０００８】
ボイスアロケータでは、必要とされるプロセッサリソースを判定する処理は、新しいボイスまたは新しいクラスタの新しいボイスが、ベクトル方式のボイス生成アルゴリズムのすでに割り当てられたインスタンスで生成されることができるかどうかを解明することを含む。例えば、ベクトル方式のボイス生成アルゴリズムの割り当てられたインスタンスが、現在一部だけ満たされている場合は、Ｎ個未満のベクトルを実行し、すると割り当てられたインスタンス中の空いたベクトルを新しいボイスに使用することができる。プロセッサリソースが、特定のボイス方式のボイス生成アルゴリズムの複数のインスタンスを実行する場合は、各インスタンスは、Ｎ個のボイスを実行するように設定することができ、動的ボイスアロケータは、ボイスを解放した後に、ベクトル方式ボイス生成アルゴリズムの複数のインスタンスを再構成することにより、プロセッサリソースの断片化を解消し、そのため、多くとも、複数のインスタンスの１つがＮ個未満のボイスを実行するように設定される。
【０００９】
ボイスアロケータは、ボイスまたはボイスクラスタのための開始待ち行列と遅延待ち行列を保持することもできる。新しいボイスまたは新しいクラスタをプロセッサリソースに割り当てると、新しいボイスまたはクラスタは、開始待ち行列に加えられる。しかし、ノートオンイベント時にプロセッサリソースが利用できない場合は、新しいボイスまたはクラスタは、遅延待ち行列に加えられる。ボイス回収プロセスが十分なプロセッサリソースを解放することを可能にするように構成された遅延の後に、新しいボイスまたは新しいクラスタは、遅延待ち行列から開始待ち行列に移される。
【００１０】
動的ボイスアロケータは、ボイスと効果へ割り当てられるプロセッサリソースを示すリソースコストパラメータを求め、アンダーランや他のグリッチが発生する恐れがあるシステム過負荷の危険性の指示を提供する最大プロセッサリソースパラメータを求める。動的ボイスアロケータは、ボイスおよび効果によって使用中のプロセッサリソース量を示す割り当て済みプロセッサリソースパラメータも計算する。開始すべき新しいボイスが識別されると、動的ボイスアロケータは、割り当て済みプロセッサリソースパラメータと、新しいボイスまたは新しいボイスクラスタのためのリソースコストパラメータとの合計が、最大プロセッサリソースパラメータを超えるかどうかを判定することにより、新しいボイスにプロセッサリソースが利用できるかどうかを判定する。最大プロセッサリソースパラメータを超える場合、動的ボイスアロケータは、発音中のボイスを回収してリソースを解放する。
【００１１】
最大プロセッサリソースパラメータは、最大プロセッサリソースパラメータを超えるかどうかの判定結果に応答して変更される。例えば、プロセッサリソースの割り当ての測定結果が、リソースの閾値を超えるリソースが使用されていることを示す場合、最大プロセッサリソースパラメータを一時的に下げてシステムの過負荷を回避することができる。
最大プロセッサリソースパラメータが、新しく割り当てられたボイスクラスタのコストの基準としても用いられる実施形態が本明細書に記載される。新たに割り当てられたボイスクラスタが、最大プロセッサリソースパラメータを超えるリソースコストパラメータを有する場合は、新たに割り当てられたクラスタを削減することができる。
【００１２】
動的ボイスアロケータを使用して、各効果および各ボイスのコストを測定または推定する。全コストの合計は、リアルタイムの演奏のために必要とされる制限以下に保たれる。ロードされる効果がない場合は、すべての利用可能プロセッサリソースをボイスモデルに使用することができる。効果が加えられる場合は、ボイスモデルに利用することができるプロセッサリソースが、効果リソースのコストの分だけ減らされる。
合計コストをリアルタイムの制限を超えさせる新しいボイスまたは効果が要求される時には、ボイスの回収が必要となる。新しい効果またはボイスの追加は、アルゴリズムが異なるサイズである場合には、２つ以上のボイスの回収を必要とする可能性がある。
【００１３】
動的なリソース管理では、音を出すために必要なリソースが現在利用できるかできないかに関係なく、任意の音をアクティブにすることを可能にする。効果間およびボイス間の柔軟な割り当てにより、効果が最大限に利用されていない時に、データプロセッサリソースのより多くの部分をボイスの計算に使用することができる。プロセッサリソースの使用の評価に基づいて、別のボイスモデル（アナログなど）を実行しているボイスを回収することによって解放され、ボイスモデル（ＰＣＭなど）にリソースを割り当てることができる。さらに、本発明は、ベクトル方式のボイス生成アルゴリズムならびにベクトル方式でないボイス生成アルゴリズムに適用することができる。
【発明の効果】
【００１４】
本発明によって、各種のボイスモデルに必要とされるすべての計算と、各フレームで発音データに用いられる効果アルゴリズムを、そのフレームで完了されることができる。総計算負荷が１フレームで完了するには大きすぎる場合、タスクはサイズを縮小して時間内に完了できる。したがって、各種のボイスモデルと効果アルゴリズムすべての間でデータ処理リソースを割り当てて、合成される出力が、フレーム間のタイミングを満たさないために生じる不具合なしに、良好に聞こえるようにできる。
【発明を実施するための最良の形態】
【００１５】
以下に、図１〜１５を参照して本発明の実施形態の詳細な説明を提供する。
［第１実施形態］
図１は、音声シンセサイザとして構成された基本コンピュータシステム１００を表すブロック図である。コンピュータシステム１００は、データ処理リソースによる実行に適合されたプログラムを記録するメモリを含む。コンピュータシステム１００は、単一命令多重データＳＩＭＤ  ＣＰＵなど、ベクトル処理のために構成された１つまたは複数の中央演算処理部ＣＰＵ１１０、プログラム記録部１０１、データ記録部１０２、オーディオ部１０３、英数文字キーボード、マウス、音楽用キーボードなどのユーザ入力部１０４、グラフィカルユーザインタフェースや他のユーザ対話に対応するディスプレイ１０５、ＭＩＤＩインタフェース１０６、ディスクドライブ１０７または他の不揮発性大容量メモリ、および、コンピュータとミュージックシンセサイザの技術分野でよく知られる他のコンポーネント１０８からなる。プログラム記録部１０１は、ランダムアクセスメモリ、不揮発性フラッシュメモリ、磁気ディスクドライブメモリ、磁気テープメモリ、他のデータ記憶媒体、または各種の取り外し可能および取り外し不能の記憶媒体の組合せなど、機械可読データ記憶媒体からなる。プログラム記録部１０１は、ＣＰＵ１１０によって実行されるコンピュータプログラムを記録する。図１では、プログラム記録部１０１は、シンセサイザインタフェースプロセス、ボイス生成アルゴリズムＶＧＡ（Voice Generation Algorithm）、特定の音声のためにＶＧＡを設定するパッチ、および他のシンセサイザプロセスのためのコンピュータ命令を記録している。ボイス生成アルゴリズムは、ＰＣＭ、アナログ、はじかれた弦、オルガンなどの個々の音源モデルを実現する。
【００１６】
生成されたデジタル出力波形をアナログ波形および／または音声に変換する処理、デジタル出力波形を他の波形と混合する処理、デジタル出力波形を記録するなどの、オーディオ部を管理する処理も、プログラム記録部１０１のコンピュータプログラムを使用する。本発明の方法を実行するコンピュータシステム中の処理には、システム中の他のデータ処理手段のＣＰＵ１１０、特殊目的回路、プロセッサによる処理と、ＣＰＵ１１０、特殊目的回路、プロセッサの処理の組み合わせがある。
また、図１のプログラム記録部１０１は、動的ボイス割り当て（ボイスアロケータ）のコンピュータプログラムおよび、リアルタイムオーディオ合成のための他のデータ処理リソース管理のためのコンピュータプログラムを含む。ボイスアロケータは、ここに記載されるリソースコスト管理、リソース割り当て、ボイス回収のアルゴリズムを行うルーチンを含む。ボイスアロケータは、一部の実施形態では、ポリフォニー／モノフォニー、ユニゾン、弱音ペダルおよびダンパーペダル、ポリリトリッガ（ｐｏｌｙ  ｒｅｔｒｉｇｇｅｒ）、排他的グループなどを含む、あらゆるシンセサイザボイスモードを管理するように構成される。
【００１７】
ボイス生成アルゴリズムＶＧＡは、ボイスモデルを実現する処理を含む、音を生成する処理を含む。ボイスモデルは、音を生成するための特定の合成アルゴリズムである。本明細書の実施形態では、ボイスモデルは、ＣＰＵのＳＩＭＤ命令アーキテクチャまたは他のベクトル処理アーキテクチャに依拠して、ベクトル処理を使用してオーディオ信号を計算して、一度にいくつかの別個のボイスを１つのベクトルグループとして生成する。ベクトルグループの個々のボイスはすべて、そのモデルの異なるパッチ、すなわちパラメータ化を再生することができる。ここに記載されるベクトル処理で実装されるボイスモデルには次の例が含まれる。（１）２つの低周波発振器ＬＦＯ、マルチモードフィルタ、増幅器などを有するＰＣＭシンセサイザ。（２）２つの鋸歯状波発振器、サブ発振器、４つのＬＦＯ、フィルタ等を有する仮想アナログシンセサイザ。（３）ギターのような種類の音のための共鳴する弦の物理的モデル。および当技術分野で知られる他のモデル。
【００１８】
ここに記載されるＳＩＭＤシステムを含むベクトル処理システムでは、複数のボイス生成アルゴリズムを用いた複数音色シンセサイザでの動的なボイス割り当てが実現される。ここで、各アルゴリズムは、ベクトル処理を用いて複数のボイスを同時に計算する。固定されたメモリと処理リソースのセットを前提として、ボイスアロケータは、システムの制約内で既存のボイスと新規のボイスを管理する。新しいイベントが、複数のボイスアルゴリズムに複数のボイスを要求する可能性がある。ボイスデータは、アルゴリズム固有のベクトルグループに編成され、ボイスアロケータは、新しいイベントについてのコストを考慮する際、および既存のリソースを回収する際には、既存のベクトルグループの構成を考慮しなければならない。ここに記載される一実施形態では、新しいイベントの全リソースへの影響が事前に求められる。その結果、システムの制約を超える場合は、階層的な優先順位システムを使用して既存のリソースが回収されて、新しいイベントのための余裕を作るために最小限のリソースのみが回収される。また、１つのイベントによって開始される複数のボイスのコストへの影響は、複数のサブレートティックにわたって償却されて、１ティック（ｔｉｃｋ）への過度のコスト影響を回避する。しかし、位相の精度を保証するために特定のボイスは同じティックにともに開始することが保証されるようにする手段が提供される。ベクトル化されたボイスデータを継続的に断片化解消して、常に最小限の数のベクトルだけが処理されるようにし、また、ベクトル化システムでのボイス回収のための最適なシステムを可能にする機構が記載される。
【００１９】
図２に、ボイス生成アルゴリズムのインスタンス１つにつき４つのベクトルを有する、ＳＩＭＤベクトルプロセッサの音源モデルのためのデータの編成を示す。図の編成では、このシステムによって実装される各ボイスモデルのボイスモデルレコードが、ボイスアロケータに保持される。したがって、ボイスモデルＡはレコード１２０で表され、ボイスモデルＢはレコード１２１で表され、ボイスモデルＣはレコード１２２で表される。ベクトルグループは、特定のボイスモデルについて同時に処理されるボイスのセットを指定する。ここに記載される例では、４つのベクトルからなるグループが用いられ、これをクワッド（ｑｕａｄ）と称する。しかし、これらの例および本発明一般は、どのようなサイズのベクトルグループにも適合するように拡張できることは明らかである。図２から、ＳＩＭＤベースのプロセッサは、各インスタンスにつきＮ個のボイスを生成するように構成することができるベクトルベースのボイス生成アルゴリズムのインスタンスを実行することが理解できる。ここで、Ｎは１より大きい整数であり、図２ではＮ＝４である。
【００２０】
図２は、３つのクワッド（ＱＤ０、ＱＤ１、ＱＤ３）に対応するデータ構造１２５を示す。パッチと称されるパラメータ値のセットＰ０〜ＰＭＡＸが、あるボイスモデルの特定のインスタンスについて、クワッドの各ベクトルＶ０、Ｖ１、Ｖ２、Ｖ３に関連付けられる。ボイスモデルのレコードは、そのモデルのボイス生成アルゴリズムに従ってボイスを実行する発音中のクワッドへのポインタを含む。図２では、ボイスモデルＡを使用して２つのクワッド（ＱＤ０およびＱＤ２）を実行する。ボイスモデルＢは実行されておらず、したがってどの発音中のクワッドにも関連付けられない。ボイスモデルＣは、発音中のクワッドＱＤ１に関連付けられる。特定のボイスモデルについての発音中のボイスが、クワッド中のベクトルに割り当てられる。例えば、ボイスモデルＡの発音中ボイスの１つが、クワッドＱＤ０のベクトルＶ１に割り当てられる。ボイスを発音させるために割り当てられる処理リソースは、対応するクワッドとそのクワッドの中の対応するベクトルを含む。ＳＩＭＤベクトル処理環境では、ＣＰＵサイクルの点から見て、１つのボイスを実行するコストは、基本的に、１つのクワッドの４つのボイスを実行するコストと同じである。モデルの中には、他のモデルより処理にコストがかかるモデルがある。そのため、例えば、ボイスモデルＢの１つのクワッドが、ボイスモデルＡの１つのクワッドの２倍のプロセッサリソースコストを必要とする場合があることに留意されたい。
【００２１】
この実施形態のボイスアロケータは、各ボイスモデルレコード１２０〜１２２に関連付けられた部分的なクワッドパラメータＰＱ（ＰＴＲおよびＣＯＵＮＴ）を保持する。上記の断片化解消処理の結果、１つのボイスモデルについて常に１つまたはゼロの部分クワッドのみがある。部分クワッドパラメータは、そのボイスモデルに関連付けられた発音中のクワッドがないことを示すヌルであるか、すべての発音中のクワッドが、対応する発音中ボイスのために実行されている４つのベクトルですべてが満たされている。部分クワッドパラメータがヌルでない場合、パラメータは、一部が割り当てられたクワッドを示すポインタＰＴＲと、割り当てられたベクトルの数や空いているベクトルの数など、クワッドで利用することができる空ベクトルの数を示すＣＯＵＮＴ値を含む。
【００２２】
図３に、ボイスアロケータによって保持される追加的情報を示す。ボイスアロケータは、システム中のすべてのボイスレコードのリスト１５０を、それらのレコードへのポインタとともに保持する。図３では、ボイスレコード０〜５がブロック１５１〜１５６で表される。ボイスレコードは、番号、ボイスモデルタイプ、速度、プログラムスロット、親ボイスクラスタなどを含む、割り当てられたボイスについての情報を保持する。ボイスアロケータのボイスリストは、ボイスが移動される際に入れ替えを助けるためにボイスレコードへのポインタを含む。したがって、図の例の各ボイスレコードは、ボイス番号、そのボイスがシンセサイザ内で関連付けられたボイス、ボイスに関連付けられた速度、ＭＩＤＩチャンネルにおけるその対応するプログラムの位置を示すスロットポインタを、他のパラメータとともに含む。ボイス番号は、ボイスが発音リストに加えられ、リストから回収される際に割り当てとクワッドの断片化解消を管理する目的で、クワッド間のボイスおよびクワッド内のベクトルを移動するためにボイスアロケータのアルゴリズムによって利用される。各ボイスは、本質的に、そのボイス番号でサブレートベクトルデータとオーディオレートベクトルデータの特定のスライスに結び付けられる。ボイスレコードは、対応するボイスに割り当てられたクワッド中の割り当てられたベクトルへのポインタも保持する。したがって、いくつかの例として、ボイスレコード０のボイスレコード１５１は、クワッドＱＤ０のベクトルＶ０に関連付けられる１５７。ボイスレコード３のボイスレコード１５４は、クワッドＱＤ０のベクトルＶ３に関連付けられる１５８。ボイスレコード５のボイスレコード１５６は、クワッドＱＤ１のベクトルＶ１に関連付けられる１５９。ボイスは、そのボイス番号を解放されたボイスレコードのボイス番号と交換し、ボイスリスト１５０を更新し、サブレートおよびオーディオレートベクトルのデータを１つのスライスから別のスライスにコピーすることにより、１つのベクトル位置から別のベクトル位置に、そして１つのクワッドから別のクワッドに移動されることができる。与えられたボイスモデルに割り当てられたボイスの数を与えられて、「モジュロＸ」演算により、部分クワッドの空いたボイスの数を求めることができる。ここで、Ｘは、１つのクワッド当たりのベクトル数であり、これは、ボイスリストのボイスに必要とされるベクトルの数をＸで割った剰余に等しい。
【００２３】
図４に、ボイスアロケータによって保持される追加的なリストを示す。これは、遅延リスト１８０、時間差開始リスト１８１、および発音リストのセット１８２、１８３、１８４を含む。図４に示すリストの使用については、後述することとし、まず、レコードの特定の態様を説明する。遅延リスト１８０は、クラスタを実行するためにリソースの割り当てまでボイスクラスタを保持し、そのクラスタの保留ボイスレコードをポイントするために利用される。遅延リスト１８０は、例えばリンクされたリスト構造を使用することにより、クラスタ単位でリストのボイスを関連付ける。したがって、図の遅延リスト１８０は、ボイス番号０〜５を含む。遅延リスト１８０のボイス番号０〜３は、リンク構造１８５により１つのクラスタに関連付けられる。遅延リスト１８０のボイス４および５は、リンク構造１８６で別のクラスタに関連付けられる。
【００２４】
時間差開始リスト１８１は、リソースがすでに割り当てられ、１フレーム当たりの開始ボイスの数がシステムの制限を超えなければ、現在のフレームに開始されるべきボイスクラスタを保持するために利用される。時間差開始リスト１８１のボイスも、リンク構造によってクラスタに関連付けられる。また、時間差開始リスト１８１のボイスは、常に同期して発音されるステレオのボイス対など、音声が同時に開始されなければならない時には、標識によっても関連付けられる。発音リスト１８２〜１８４は、リソースの割り当てと回収のために、また発音中のボイス間の優先順位を維持するために、ボイスアロケータによって利用される。発音リスト１８２〜１８４は、リンク構造でクラスタにリンクされたボイスのリストも含む。ボイスアロケータでは、リソースは、クラスタに対して割り当てられたり、回収されたりする。そのため、１つのクラスタのボイスは、一度にプロセッサリソースに割り当てられる、または回収される。開始するために新しいクラスタが割り当てられるたびに、その新しいクラスタは、次の発音リストの１つに加えられる。
【００２５】
１．１つの演奏の変化にわたって保持されるボイス。
２．ＡｍｐＥＧがリリース段階にあるボイス。これらのボイスにはノートオフが受け取られており、ＡｍｐＥＧがリリース中である。
３．ダンパーペダルまたはホールド機能によって保持されているボイス。これらのボイスにはノートオフが受け取られているが、このボイスは、ダンパーペダルまたはホールド機能によって維持されている。
４．「アクティブ」なボイス。これらのボイスにはノートオフは受け取られていない。
【００２６】
一部の実施形態は、優先順位付け機構を有する。その場合は、上記のリスト２、３および４が、より優先度の高いボイスに繰り返され、各優先度について、さらに３つのリスト（例えばリスト２、３、４に対応するリスト）が使用される。
イベントが発生する、あるいは他の変化が生じると、ボイスクラスタあるいはボイスが、リストからリストへ移動される。リストは、新しいクラスタのために余地を作るために回収するクラスタを決定するために下記のように使用される。
ボイスのクラスタは、プログラムスロットの特定のノートオンイベントに対応するボイスまたは保留ボイスレコードのセットからなる。ボイスをクラスタとしてグループ化することにより、複数のボイス層からなる複雑な音が、１つのグループとして開始、停止、および回収される。このようにして、シンセサイザによっていくつかの成分の合計として作られた複雑な音は、他の成分が発音し続けている間に、一部の成分を回収させない。ある組み合わせについての１つのノートオンイベントは、複数のクラスタを作り出すことができ、各クラスタは、その組み合わせ中の１つのスロットに対応する。
【００２７】
図５に、動的なボイス割り当てを用いる基本的なシンセサイザエンジンプロセスの一例を示す。このプロセスは、図１に示すようなプロセッサにより、１フレームにつき一回、または１サブレートティックにつき一回実行される。例えば、１フレームは、３２、６４、または１２８のオーディオレートサンプルを含み、オーディオレートは例えば４４．１ｋＨｚ、４８ｋＨｚ、または９６ｋＨｚである。そのため、複数サンプル（３２、６４、または１２８サンプル）の1フレームが、サブレートティックごとに生成され、出力バッファに書き込まれる。このメインループは、以下を達成するタスクを実行する。
【００２８】
１．受け取る演奏の制御に応答し、必要に応じてボイスを割り当て、除去、または更新する。
２．ボイスを計算する。フレームごとに、エンジンは、そのフレームで発音するすべてのボイスを計算し、その後行われる可能性のあるさらなる効果処理のために、結果をバッファに書きこまなければならない。
３．効果処理を計算する。フレームごとに、エンジンは、そのフレームについての計算されたボイスデータを含むバッファを読み取り、ユーザによって選択された効果設定に応じて、そのデータを処理しなければならない。処理された音声データは、次いで出力バッファに書き込まれる。
【００２９】
ここに記載される動的ボイス割り当ての方法は、複数のボイス生成アルゴリズムを用いる複数音色シンセサイザで実行される。また、各アルゴリズムは、ベクトル処理を使用して複数のボイスを同時に計算する。
ボイスアロケータは、固定されたリソースのセットを前提として、利用可能なリソースの制限内で発音中のボイスと新しいボイスを管理する。制限のあるリソースには、ＣＰＵ速度とメモリの両方が含まれる。つまり、以下が含まれる。
【００３０】
１．制限のあるＣＰＵ速度。
２．総キャッシュ使用量を制限するための制限された数のボイスクワッド。
３．任意の１ティックに開始することができる限られた数のボイス。
ノートオンイベントのコストは、そのイベントに関連付けられたボイスクラスタの割り当てに先立って計算され、現在のコストおよび最大コストと比較される。コストが過大の場合には、そのノートオンイベントに関連付けられたクラスのためにリソースを解放するためにボイスを回収することができる。そのイベントで必要とされる各ボイスについて、ボイスアロケータは、そのボイスを開始するコストを求める。ボイスのボイスモデルが部分クワッドを有する場合は、新しいクワッドを割り当てるコストなしに、その部分クワッドがあるボイスを使用することができる。しかし、利用できる部分クワッドボイスがない場合は、モデルクワッドコストによって指定されるコストで、新しいクワッドを割り当てられなければならない。また、各ボイスが、モデルクワッドコストに含まれない追加的なコストを指定する場合があり、イベントの総コストを計算する際にはそのコストも計算に入れられる。
【００３１】
ボイスモデルの基準として使用されるコストパラメータの値は、様々な状況でボイスを実行する際のボイスモデルのパフォーマンスを調べ、経験的にコストを割り振ることにより、事前に求めることができる。コスト基準は、通例、負荷のある状況（例えば、すべてのキャッシュが無効のようなシミュレートされる最悪の条件下）での再生中のＣＰＵ使用率の指標である。数値は、任意の単位（例えば基準モデルと比較した相対数）であっても、何らかのより具体的な単位（１ティックに使用される実際のＣＰＵサイクルなど）であってもよい。あるいは、このコスト基準は、動作中のボイスモデルのパフォーマンスを監視し、正規化式を適用してコストパラメータの値を求めることにより、実行時に求めることもできる。
【００３２】
例えば、ある時間にサブレート手順が開始し、その時間が記録される（Ｓ２００）。次に、遅延リストにあるクラスタが、同じティック内で実行可能な場合には、ステップＳ２０３で開始するように時間差開始リストにそのクラスタを移動する。または、遅延リストに残しておくか、その他の方法でクラスタを処理する（Ｓ２０１）。次のステップで、ノートオンイベント、ノートオフイベント、およびボイスの割り当てまたは解放の必要性を生じさせる可能性のある他のイベントを含む、ユーザインタフェースまたはＭＩＤＩチャネルからのメッセージが処理される（Ｓ２０２）。ノートオンイベントを処理する典型的な手順は、図６Ａ、図６Ｂおよび図７Ａ、図７Ｂを用いて説明する。この手順は、必要に応じてボイス割り当てとボイスの回収を伴う。次のステップで、所与のサブレートティックに開始することが許される時間差開始リストにあるいくつかのボイスを、発音リストに移動し、それらのボイスを開始することにより、時間差開始リストにあるクラスタが処理される（Ｓ２０３）。次いで、エンベローププロセスやＬＦＯプロセスなどのボイスモデルサブレートプロセスが実行される（Ｓ２０４）。次のステップで、ボイスモデルのオーディオレートプロセスが実行されて、そのサンプルレートのオーディオサンプルを生成する（Ｓ２０５）。ステップＳ２０６で、クワッドの断片化と動的ボイス割り当てに伴う他のハウスキーピングプロセスを含めて、保留中の空きボイスがボイスアロケータによって処理される（各自の解放を完了したサブレートアンプエンベロープから解放される）。ステップＳ２０７で、オーディオ入力ミキサプロセスがオーディオレートで実行される。ステップＳ２０８でオーディオレート効果が実行される。ステップＳ２０９でハードディスクへの記録またはハードディスクからの読出しがオーディオレートで実行される。オーディオデータは、ステップＳ２１０で出力バッファに書き込まれる。ステップＳ２１１で、ボイスアロケータがシステム過負荷防御ルーチンを実行する。その例は、図８との関連で下記でより詳細に説明する。ステップＳ２１１のシステム過負荷防御の後、サブレートプロセスループは終了する（Ｓ２１２）。
【００３３】
最適なボイス処理を保証するために、発音中のボイスは、断片化が解消されたクワッドのセットとして保持されなければならない。そのボイスが解放または回収された後にベクトルが解放されると、ボイスアロケータは、ステップＳ２０６で、必要に応じて発音中のボイスを移動して、完全に断片化が解消された発音中ボイスクワッドの配列を保持する。
すべてのボイスモデルは常に、以下の状況の１つにある。
１．発音中のクワッドがない。
２．満たされた、または部分的に満たされた１つのみの発音中クワッドがある。
３．１つまたは複数の満たされたクワッドがあり、部分クワッドはない。
４．１つまたは複数の満たされたクワッドと正確に１つの部分クワッドがある。
ボイスが解放されるときには、図９に示す処理を行う。
【００３４】
ボイスを移動するプロセスは以下の通りである。
１．ボイスアロケータ自身のボイスリスト中の２つのボイス構造を入れ替え、それらのボイス構造中の内部ボイス番号を入れ替える。
２．サブレートおよびオーディオレート両方のベクトルデータについて、ベクトルデータのソーススライスからターゲットスライスにコピーする。
３．古いスライスから新しいスライスまでの距離だけアドレスをオフセットすることにより、ベクトルデータに含まれる内部構造ポインタのアドレスを修正する。
４．クワッドが現在空いていれば、それを解放する。
【００３５】
ボイスが解放されるサブレートサイクルと同じサブレートサイクルでボイスを移動する際の考慮事項の１つは、ボイスは、サブレートプロセスの結果解放される可能性があることである（アンプエンベロープの実行など、解放の終わりにボイスを解放させる）。サブレートプロセスが、１つのボイスリストにわたって反復し、その反復の途中で、ボイスが解放され、ボイスを再配置する場合、リストの残りの整合性が無効になる可能性がある。そのため、好ましい実施形態では、保留空きリストを設定する。ボイスが空くと、そのボイスは必ずそのリストに加えられる。実際の移動と断片化解消は、図５のステップＳ２０６のように、サブレートとオーディオレートの処理が完了した後に、サブレートティックの最後に行われるべきである。
【００３６】
ボイスを開始することは、ＣＰＵにとって、かなり高コストな動作なので、ここに記載される実施形態では、任意の１ティックに何らかの最大数以上のボイスが開始しないように、ボイスは時間差をもって開始される。ステレオのボイスは、位相を正確にするために、同じティックで開始することが保証される。
ノートオンイベントが見つかると、ボイスアロケータは、そのノートオンイベントに応答して必要となる各ボイスモデルのボイスの数を判定し、総イベントコストを計算する。新しいノートオンイベントを開始するために必要な処理力が利用可能な処理力を上回る場合には、ボイスは、必要に応じて回収される。新しいボイスクラスタが構築されると、時間差開始リストに入れられるか、ボイスが回収された場合には遅延開始リストに入れられる。ボイスは、経過時間と優先度の順に回収される。ただし、ここに記載される実施形態では、ボイスモデルは優先されない。モデルＢのための余裕を作るために、モデルＡのボイスを回収することができる。好ましい実施形態では、新しいイベントのボイスの必要条件のための余裕を生むために、最小限の数のボイスが回収される。好ましい実施形態では、ボイスのクラスタは常にともに回収される。
【００３７】
ボイスモデルアルゴリズムは、特殊なベクトル処理命令（ＳＩＭＤなど）を使用して、上記のようにベクトルのサブレートおよびオーディオレート処理を行う。クワッド処理システムの場合は、一度に４つのボイスが計算される。したがって、モデルＡについての１つのボイスは、基本的に、処理するのに４つのボイスと同じ量の全システムコストを要する。９つのボイスは３つのクワッドコスト単位を用い、一方、６つのボイスは２つのクワッドコスト単位を用いることになる。ボイス割り当て機構は、システムコスト、回収などを計算する際にこのことを考慮しなければならない。
【００３８】
図６Ａと図６Ｂに、図５のステップＳ２０２で行われるような、新しいクラスタについてのノートオンイベントを処理する流れ図を示す。この処理は、ノートオンイベントに対して、ボイスアロケータがプロセスを開始する（Ｓ３００）。最初のステップで、ボイスアロケータは、１つまたは複数の新しいクラスタを含む、現在の組み合わせについてのスロットごとのボイス要件を判定する（Ｓ３０１）。ボイスアロケータは次いで、存在する場合にはモデル部分クワッドで利用できるボイスを考慮に入れて、モデルごとのボイス要件の概要を構築する（Ｓ３０２）。クワッドの数を含む、イベントに必要とされるリソースの量が判定される（Ｓ３０３）。イベントに必要とされるリソースの量とその時点での発音中ボイスに基づいて、総イベントコストが計算される（Ｓ３０４）。ステップＳ３０５で、そのノートオンイベントに応答して開始されるボイスの組み合わせについての総要件が、他の発音中ボイスを考慮せずに最大のシステムコストパラメータを超えると判定される場合は、ステップＳ３０６に進む。ステップＳ３０６では、ノートオンイベントに関連付けられたクラスタのボイスの数を優先順位付け方式に従って削減し、ステップＳ３０２に戻る。ステップＳ３０５で、ノートオンイベントが最大システムコストを超えるコストを必要としないと判定される場合は、ステップＳ３０７に進む。ステップＳ３０７では、計算されたイベントコストが利用可能なシステムコストと比較される。ステップＳ３０７で計算されたイベントコストが利用可能なシステムコストを超えない場合、図６Ｂの点Ａに分岐する。ステップＳ３０７で計算されたイベントコストが利用可能なシステムコストパラメータを超える場合は、図６Ｂの点Ｂに分岐する。
【００３９】
イベントコストが利用可能なシステムコストのパラメータを超えない場合、図６Ｂの点Ａから、ステップＳ３０８に進む。ボイスアロケータは、ボイスクラスタのデータ構造を構築する（Ｓ３０８）。そして、ボイスを割り当て（Ｓ３０９）、新しいクラスタのボイスを時間差開始リストに移動し（Ｓ３１０）、終了する（Ｓ３１１）。そして、図５のプロセスのステップＳ２０３に進む。
イベントコストが利用可能システムコストパラメータを超える場合、図６Ｂの点Ｂから、ステップＳ３１２に進む。ボイスアロケータは、１つまたは複数の発音中クラスタを回収し、新しいクラスタに必要とされるリソースを解放するプロセスを開始する（Ｓ３１２）。次に、ボイスアロケータは、保留ボイスレコードを使用してボイスクラスタのデータ構造を構築する（Ｓ３１３）。そして、新しいクラスタのボイスを遅延リストに移す（Ｓ３１４）。遅延リストの新しいクラスタのボイスレコードは、遅延パラメータに関連付けられ、その遅延パラメータは、図５のプロセスを通じて次のサイクルで調べられる。遅延パラメータが終了すると、クラスタのボイスは、上記のように遅延リストから時間差開始リストに移される。遅延パラメータは、ボイスアロケータがステップＳ３１２のクラスタを回収するプロセスを完了するのに十分な時間を持てるような長さに設定される。新しいクラスタを遅延リストに入れると、終了する（Ｓ３１１）。
【００４０】
図６Ａ、図６Ｂから理解できるように、特定のＭＩＤＩチャンネルにノートオンが到着すると、ボイスアロケータは、現在の組み合わせを調べ、そのチャンネルに設定されたプログラムスロットごとに、ボイス要件の指定を要求する。例えば、「プログラムスロット１のピアノプログラムにはいくつのボイスが必要か」という質問がノートオンイベントに関連付けられたプログラムごとに解決される。プログラムは、プログラムパラメータに応じて、ゼロを含む任意数のボイスを指定することができる。ボイスは、どのボイスモデルのものでもよい。仕様は、ボイス要求レコードの形式である。この仕様は、プログラムによって特定され、１つのボイス当たりの追加コストなどボイスについてのさらなる情報を含むことができる。基本的に、ステップＳ３０１の処理は、図１０に示す擬似コードのような処理である。
【００４１】
この反復を完了すると、ボイスアロケータは、スロットごとのボイス要件のセットを得ている。「スロット１はモデルＡに２つのボイスを必要とし、スロット２は０個のボイスを必要とし、スロット３はモデルＡに２つのボイスおよびモデルＢに６つのボイスを必要とする」。ボイスの追加コストの合計もある。
次に、ステップＳ３０２で表すように、ボイスアロケータがこのリストに繰り返されて、ボイスモデル別に構成された、イベント要件の第２の概要を構築する。「モデルＡは４つのボイスを必要とし、モデルＢは６つのボイスを必要とする。」
ここで、モデルごとに処理される必要がある新しいクワッドの数を求め、その数に各ボイスモデルのクワッドコストを乗算することにより、実際のイベントコストを計算することができる。モデルコストの合計とすべてのボイス追加コストの合計が、ステップＳ３０４の総イベントコストになる。
【００４２】
上記の例では、３つのＰＣＭボイスと６つのアナログボイスでは、ＰＣＭに１つの新しいクワッド、アナログに２つの新しいクワッドが必要となる。ＰＣＭのクワッドコストが４０００で、アナログのクワッドコストが８０００である場合は、総イベントコストは４０００＋１６０００、すなわち２００００（ボイス追加コストがないものと想定する）になる。
ボイスアロケータは、イベントの要件をシステムの最大コストと比較することができる。イベントが、システムが行うことができるボイスクワッドより多くのボイスクワッド（発音している他のボイスがない場合であっても）を必要とするか、または、ＣＰＵが処理できるより多くのコストを必要とする場合は、イベントは、縮小されなければならない。一例は、システムの最大コスト制限を超える何百ものボイスを必要とする複雑な組み合わせの場合である。この縮小は、プログラムスロットごとに行われて、イベントコストがシステムの制限より小さくなるまで要件を減らす。
【００４３】
ステップＳ３０６に相当する過大なイベント要件を縮小する擬似コードを、図１１に示す。ここで、ノートオンイベントについての要件と現在の発音コストの合計を含むイベントコストが利用可能なシステムコストと比較される。これはステップＳ３０７に一致する。イベントコストが利用可能なシステムコストを超える場合は、ステップＳ３１２に示されるように、発音中ボイスの一部が回収されなければならない。
ステップＳ３１２で音声が回収されており、ステップＳ３１３で新しいノートオンイベントについてボイスクラスタが構築されるとき、そのクラスタは、ステップＳ３１４で遅延リストに移されて、回収アルゴリズムが完了するための時間に対処する。ボイスが回収されるときには、そのオーディオは、いくらかの期間にわたって減少される。ボイスが直ちに解放された場合は、可聴の「プチッ」という音が生じる可能性がある。この回収の減少のために、減少期間の後までは、ボイスレコードは解放されず、回収を必要とした新しいイベントに利用できるようにならない。新しいボイスレコードは、減少期間の終わりまで割り当てられることができない。リズミカルなパターンでは、一部のイベントが回収を必要とし、一部のイベントは必要としない場合は、ジッタの恐れがあり、その場合一部のボイスは即座に開始し、他のボイスは（回収のために）遅延の後開始する。
【００４４】
ジッタを防ぐための解決法の１つは、すべてのノートオンイベントを、回収を必要とするか否かに関わらず、回収の時間まで遅延させるものである。このようにして、回収を必要とするイベントは、遅延時間を使用して回収されるボイスを減少させ、回収を必要としないイベントは、単に待機する。リズミカルなパターンでは、リズムパターンが保たれ、ジッタが最小に抑えられる。この解決法の欠点は、すべてのノートオンイベントの待ち時間が、回収時間だけ増すことである。明らかに、回収減少時間は可能な限り短くなければならない。
【００４５】
新しいノートオンイベントが回収を必要とする場合、新しいボイスは、回収されたボイスが完全に解放されるまで割り当てられることができない。この場合、ボイスアロケータは、いくらかの遅延の後に割り当てられるボイスのプレースホルダとして、保留ボイスレコードを確立する。保留ボイスレコードを含んでいるクラスタは、遅延を示すタイムスタンプとともに遅延リストに入れられる。
遅延時間が完了すると、ボイスアロケータは、クラスタにある保留レコードを処理し、実際のボイスを割り当て、そしてクラスタを遅延リストから時間差開始リストに移す。すべてのサブレートティック（図５のステップＳ２０１参照）で、遅延されたボイスは、図１２ように処理される。
【００４６】
ボイスを開始することは、プロセッサリソースの点から見て高コストの動作なので、ボイスアロケータは、時間差開始リストを使用して、各ティックに開始されるボイスの数を制限する（図５のステップＳ２０３参照）。ノートオンイベントが６つのボイスを必要とし、１ティックに開始する最大のボイスが２つである場合、そのイベントは、完全に開始するのに３ティックを要する。
時間差開始機構は、ステレオのボイス対が同じティックに開始することを保証する。上記の例では、リスト中の２番目と３番目のボイスがステレオの対である場合は、最初のティックに１つのボイスのみが開始する。そして、次のティックに２番目と３番目のボイスがともに開始することができる。結果として、全イベントは、完全に開始するために４ティックを要することになる。時間差リスト処理のための典型的な擬似コードを、図１３に示す。
【００４７】
時間差開始リストにあるボイスを処理するためにかかる時間が非確定的な場合は、ボイスを開始するために必要とされる総時間を求める機構を導入することができる。次のボイスを開始するのに必要な時間量が何らかの閾値を超える場合、時間差開始アルゴリズムは、単に、次のティックまで（あるいは必要な場合はさらに長く）待機してから、次のボイスを開始することができる。
図６ＢのステップＳ３１２に対応するボイス回収アルゴリズムの基本的な流れを、図７Ａ、図７Ｂに示す。このアルゴリズムの最初のステップは、発音中のボイスの優先順位リストからクラスタを選択することである（Ｓ４００）。発音中のボイスは、図４を参照して説明したように、優先順位リスト中ではクラスタ別に編成されている。
【００４８】
選択されたクラスタと、そのクラスタ中のボイスモデルに対して、１つのモデル当たりの空ベクトルの数ＦＶｍを求める（Ｓ４０１）。「回収コスト」パラメータがゼロに設定される（Ｓ４０２）。次に、選択されたクラスタにあるボイスが回収され、回収されたボイスのボイスモデルについてパラメータＦＶｍが増分される（Ｓ４０３）。ステップＳ４０４では、空ベクトルの数ＦＶｍが４に等しいかどうかを判定する（クワッドベースのベクトルプロセッサの場合）。ステップＳ４０４で空ベクトルの数が４である場合は、回収コストが、現在のモデルのクワッドのコストだけ更新し、ステップＳ４０６に進む（Ｓ４０５）。ステップＳ４０４で、空ベクトルの数が４未満の場合はステップＳ４０６に進む。ステップＳ４０６では、現在のクラスタのすべてのボイスが回収されたかどうかを判定する。すべてのボイスが回収されてはいない場合、プロセスはステップＳ４０３に戻る。ステップＳ４０６でクラスタのすべてのボイスが回収されている場合、プロセスは、図７Ｂの点Ａに進む。
【００４９】
図７ＢのステップＳ４０７では、新たに解放されたベクトルに基づいて、回収される必要のあるコストを調整する。この処理では、新しいクワッドが解放されていなくとも、発音中のクワッド内で１つまたは複数のベクトルが解放される場合にはイベントの要件を減らすことができ、追加的なクワッドを必要とせずに、解放されたそのベクトルを満たすことにより、ボイスモデルの新しいイベントの要件を減らすことができることを考慮に入れる。次に、回収されるコストが、回収プロセスに必要とされるコスト以上であるかどうかを判定する（Ｓ４０８）。回収されるコストが回収プロセスに必要とされるコストより少ない場合、優先順位リストから次のクラスタを選択し、図７Ａの点Ｂに戻る（Ｓ４０９）。そこで次のクラスタからの音声が回収される。ステップＳ４０８で、回収されるコストが、回収プロセスに必要とされるコスト以上の場合、プロセスは完了する（Ｓ４１０）。
【００５０】
ボイスが回収される際には、実行エンジンで空ベクトルを扱う断片化解消プロセスにより、そのボイスが解放される時に、モデルボイスは、部分クワッドがないか、または正確に１つの部分クワッドがある完全に断片化解消された状態を保つものと想定することができる。そのため、モデルコストのクワッドを解放するために、回収プロセスは、単に、モデルから任意の４つのボイスを回収することができる。実行エンジンは、ボイスレコードを移動し、クワッドを断片化解消して、所与のモデルから４つのボイスを除去することで１クワッド分のベクトル処理がなくなるようにする。
【００５１】
回収が必要な時、イベントの要件は、上記のようにボイスの数でモデルごとに分割される。
新しいイベントのコストを判定する手法の１つは、モデルごとの、必須のベクトル数と追加コストの配列を含んだＭｏｄｅｌＲｅｑｕｉｒｅｍｅｎｔｓクラスを確立することに基づく。このクラスは、総コスト要件（すべてのモデルクワッドコスト＋追加コスト）も保持する。初期の要件は、モデル部分クワッドの空ベクトルの現在の数で調整されない。モデルＡが３つのボイスを必要し、モデルコストが４０００である場合、そのモデルは、４０００のコストを有し、３つのボイスを必要とする。回収アルゴリズムは、ステップＳ４０７に対応するプロセスによって、必要に応じてこの要件を調整する。
【００５２】
代表的なコスト判定アルゴリズムは、最初に、ｎｕｍＦｒｅｅＭｏｄｅｌＶｏｉｃｅｓ［ｎｕｍＭｏｄｅｌｓ］の配列を、各モデルのＰａｒｔｉａｌＱｕａｄにある空きボイスベクトルの数に初期化するか、またはＰａｒｔｉａｌＱｕａｄがない場合は０に初期化する。この配列の初期化は、ステップＳ４０１で、１ティックにつき１回のみ行われるべきである。
回収の際に、プロセスは、０で開始するｓｔｏｌｅｎＣｏｓｔを追跡する。あるモデルについてボイスが回収されるたびに、解放されたボイスベクトルの数だけｎｕｍＦｒｅｅＭｏｄｅｌＶｏｉｃｅｓ［ｍｏｄｅｌ］を増す。ｎｕｍＦｒｅｅＭｏｄｅｌＶｏｉｃｅｓ［ｍｏｄｅｌ］が４に達した場合は、ｓｔｏｌｅｎＣｏｓｔをｍｏｄｅｌＱｕａｄＣｏｓｔだけ増す。
【００５３】
各クラスタを回収した後に、モデルごとのｆｒｅｅＶｏｉｃｅＣｏｕｎｔを決定し、それを用いて、回収が完了したかどうかを判定する際に、必要とされる総コストを一時的にオフセットする。このプロセスは、そのモデルについて解放されたボイスベクトルの数が、新しいクラスタについて回収される必要がある、４を法とする（またはｘを法とする。ｘはクワッドのベクトル数である。）そのモデルのボイスの数以上であるかどうかを調べることにより、必要とされるコストが、回収される必要のあるモデルごとの必須コストを減らすことができるかどうかを調べる。必須コストを減らすことができる場合は、そのモデルの新しいボイスの一部またはすべてを、残りの部分クワッドに割り当てることができ、回収される必要のあるコストをクワッドコストだけ減らすことができる。ｓｔｏｌｅｎＣｏｓｔ≧ｒｅｑｕｉｒｅｄＣｏｓｔである場合、回収サイクルは完了する。典型的な回収処理の擬似コードを図１４に示す。
【００５４】
本明細書に記載されるボイス割り当ての回収優先順位は、発音しているボイスがない条件から開始し、下記の７つのイベントと上記の発音中リストを含む例を参照して理解することができる。この単純な例では、システムで利用可能なボイスの総数は、４ボイスである。
１．ノートオンＣ４。リスト４がアクティブなボイスなので、発音リスト４に新しいクラスタを追加する。
２．ノートオンＤ４。リスト４がアクティブなボイスなので、発音リスト４に新しいクラスタを追加する。
３．ノートオンＥ４。リスト４がアクティブなボイスなので、発音リスト４に新しいクラスタを追加する。
４．ノートオンＦ４。リスト４がアクティブなボイスなので、発音リスト４に新しいクラスタを追加する。
５．ノートオンＧ４。コスト＞最大コストなので回収しなければならない。
６．ノートオフＥ４。発音リスト４から発音中リスト２にクラスタが移される。
７．ノートオンＡ４。再度コスト＞最大コストなので回収しなければならない。
【００５５】
イベント５の回収では初めにリスト１を調べるが、リスト１は空であり、２および３も空である。リスト４は、再生された順序、すなわちＣ４、Ｄ４、Ｅ４、Ｆ４でアクティブなボイスのクラスタのリストを有する。そのため、新しいコストが最大コスト以下になるまで、その順序でそれらのリストを回収する。この場合は、最初のリストＣ４だけを回収すればよい。
したがって、Ｃ４のクラスタが回収され、Ｇ４がアクティブなリスト４の最後に追加される。この例における次のイベントを考えてみたい。
【００５６】
イベント６で、Ｅ４のボイスがアクティブなリストから取り出され、ノートオフを受け取った音声についてリスト２に入れられるが、増幅器のエンベロープ関数「Ａｍｐ  ＥＧ」がなおリリース段階にある。すなわち、ノートオフを処理しているものの、Ａｍｐ  ＥＧのリリース時間のためにボイスはまだ発音している。この例では、Ａｍｐ  ＥＧが長いリリース時間を有するものと想定する。
この時点でリスト２（音声をリリースしている）は、１つの項目Ｅ４のみを有する。アクティブボイスのリスト４は、Ｄ４、Ｆ４、Ｇ４を有する。
【００５７】
イベント７で、再びコスト＞最大コストになるため、回収しなければならない。
回収アルゴリズムはまずリスト１を調べるが、リスト１は空である。しかし、リスト２には１つの項目Ｅ４がある。このボイスが回収され、新しい音Ａ４がアクティブリスト４に加えられる。
この時点で、Ｄ４、Ｆ４、Ｇ４、Ａ４を有するアクティブボイスリスト以外は、すべてのリストが空になっている。
Ｄ４がより古いボイスであったとしても、Ａ４に対する要求が処理された時にＥ４が回収されたことに留意されたい。Ｅ４はリリース段階にあったので、Ｅ４には、より低い回収の優先順位が与えられ、そのため最初に回収された。Ｅ４のボイスがリリース段階を完了している場合、そのボイスは、リスト２から取り除かれている。そして新しいノートオン要求は、回収を全く必要としない。
【００５８】
回収が必要とされる時には、リスト１を調べ、必要とするだけのボイスを回収する。より多くのボイスが回収される必要がある場合（リスト１が空であったか、リスト１に十分なボイスがなかったため）は、リスト２に移る。ここでも、リスト２から必要とするだけのボイスを回収する。まだ十分なボイスがない場合は、次のリスト、そしてまた次のリストへと進む。すべての発音中ボイスはそれらのリストのうち正確に１つなので、最終的には必要とするボイスがすべて取得される。
ユーザは、特定のスロットを優先度で特徴付けることができることに留意されたい。これは単に、そのスロットのボイスクラスタを、番号が高い回収リスト５〜７（または８〜１０など）にロードさせ、それらのクラスタがより回収の対象にされないようにする。
【００５９】
図５のシステム過負荷防御ステップＳ２１１は、図８に示すように実施することができる。好ましいシステムのオーディオプロセッサは、多重バッファリングされて、システムが一時的な過負荷を吸収できるようにする（シンセサイザが必要とされる作業をすべて完了していない場合は、別のオーディオ割り込みが到着する時まで）。しかし、連続した過度に多くのティックにわたってシステムが時間を超過して稼動する可能性が、なおある。
過負荷防御アルゴリズムは、各サブレートティックにおける全ＣＰＵ使用率を監視し、長期間にわたる移動平均と、割り込みの失敗に基づく短期間の指標の両方を監視する。これは、ＵＩのアクティビティ、ネットワーキングの割り込みなど、ボイスアロケータに考慮されない要因がバッファのアンダーランや可聴のグリッチを発生させないことを保証するためである。
【００６０】
図８に、基本的なシステム過負荷処理の流れを示す。各ティックに、処理を開始する前のＣＰＵ時間を読み出し、完了後に再度ＣＰＵ時間を読み出す。その差を総システムＣＰＵコストと見なすことにより、総システムＣＰＵコストが判定される。この処理では初めに、総ＣＰＵシステムコストが、最大システムコストパラメータによって設定される閾値以上であるかどうかを判定する（Ｓ５０１）。総システムコストが高くなり過ぎている場合は、最大システムコストパラメータが減らされ（Ｓ５０２）、終了する（Ｓ５０３）。このようにして、実行エンジンを通じた次のサイクルでは、下げられた最大システムコストパラメータが利用されて、実装されるリソースの総数を減少させる。ステップＳ５０１で、総システムコストが閾値より大きくない場合、前回最大システムコストパラメータが減らされた時から遅延パラメータが終了したかどうかを判定する（Ｓ５０４）。遅延パラメータが終了している場合は、デフォルトの最大システムコストパラメータが回復され（Ｓ５０５）、終了する（Ｓ５０３）。ステップＳ５０４で遅延パラメータが終了していない場合は、終了して（Ｓ５０３）、遅延パラメータが終了するまで、エンジンが、減らされた最大システムコストパラメータで動作できるようにする。この遅延パラメータは、最大システムコストパラメータを変更するルーチンにヒステレシスを生じさせる。
【００６１】
したがって、利用率が特定の閾値（利用可能な全最大ＣＰＵサイクルの何らかの高い百分率）を上回る場合、アルゴリズムは、
１．ボイスアロケータがいくらかのコストを回収して、発音システムのコストを下げるように要求する。ボイスアロケータは、通常の経過時間／優先順位に従って、総クワッドコストが要求されるコストになる、または要求されるコストを上回るボイスモデルのクワッドを解放するまで回収する。
２．ある期間にわたり少しだけ音声アロケータの総システム最大コストを下げて、発音コストが通常よりわずかに低く保たれる「回復」期間を保証する。最大コストは、元の値に戻されるまで、再びいくらかの時間にわたって上げられる。
【００６２】
システム過負荷アルゴリズムは、ティック単位の全システムＣＰＵコストの長期間の稼動平均も保持する。この長期間の平均が高い閾値を上回ると、上記のステップ１と２が発生し、最大コストは、長期間の平均が低い閾値未満まで下げられるまで、再び上げられることはない。例えば、デフォルトの閾値は、例えばＣＰＵの９５％であり、低い閾値は８５％である。
短期間の過負荷の急上昇に対して、上記のステップ１および２が発生し、ボイスアロケータの最大コストが回復されるまで、最大コストが数ティックにわたり全ティックで少量だけ上げられる。長期間の過負荷については、より長い期間にわたって最大コストが下げられて、システムが回復できるようにする。
【００６３】
汎用プロセッサを使用して複数のボイス生成アルゴリズムを計算する音声生成装置が記載され、各アルゴリズムは、パフォーマンス情報に応答してベクトル処理を使用して複数のボイスを同時に計算する。ボイスアロケータモジュールは、処理リソースとメモリの制限を超えないように、アルゴリズム固有のベクトルグループとして既存のボイスと新しいボイスを管理する。新しいパフォーマンスイベントが要求されると、その新しいイベントの全リソース影響、すなわちコストが判定され、現在の合計コストに加えられる。その要件がシステムの制限を超える場合は、階層的な優先順位付けシステムを使用して既存のリソースが回収されて、新しいイベントのための余裕を作る。また、１つのイベントによって開始される複数のボイスのコスト影響が複数の処理フレームにわたって償却されて、どのフレームにおいても過度なコスト影響を回避する。位相の精度のために、特定のボイスが同じティックにともに開始することを保証する手段が提供される。ベクトル化されたボイスデータを継続的に断片化解消して、常に最小限の数のベクトルのみが処理されることを保証する機構が含められる。
［第２実施形態］
本実施形態では、第１実施形態で示した発明を、異なる視点から説明する。本発明のボイス生成アルゴリズムは、オーディオ用のプロセッサ内で実行される。図１５に、オーディオプロセッサの機能構成例を示す。オーディオプロセッサ６００は、少なくともデータ処理手段６１０、ボイス識別手段６２０、リソース判定手段６３０、リソース割り当て手段６４０から構成される。
【００６４】
ノートオンイベントなどのイベントが発生すると、ボイス識別手段６２０は、イベントに応答して実行される新しいボイス（または新しいボイスクラスタ）を識別する（ステップＳ６２０）。リソース判定手段６３０は、新しいボイス（または新しいボイスクラスタ）と発音中のボイスに割り当てられる必要があるプロセッサリソースを判定する（ステップＳ６３０）。なお、リソース判定手段６３０での処理には、データ処理手段６１０で行うベクトルボイス生成アルゴリズムの１つのインスタンスによって、新しいボイスが生成できるか解明することも含まれる。リソース割り当て手段６４０は、必要とされるリソースが利用できる（割り当てできる）場合は、前記選択されたボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当てる。必要とされるリソースを割り当てることができない場合は、少なくとも１つの発音中のボイス（または発音中のボイスを含む発音中のボイスクラスタ）に割り当てられたプロセッサリソースの割り当てを解除する（ステップＳ６４０）。データ処理手段６１０は、ベクトル方式ボイス生成アルゴリズムを実行する手段である。そして、ボイス生成アルゴリズムの少なくとも１つのインスタンスは、Ｎ個のボイスを生成するように設定できる。ただし、Ｎは２以上の整数である。データ処理手段６１０は、前記の割り当てにしたがって、データを処理し、ボイスを発音する（ステップＳ６１０）。なお、ステップＳ６４０で、必要とされるリソースを割り当てることができない場合は、ステップＳ６４０のプロセッサリソースの割り当て解除の後に、ステップＳ６３０のリソース判定手段６３０の処理を繰り返してもよい。
【００６５】
また、オーディオプロセッサ６００は、行列管理手段６５０を備えてもよい。行列管理手段は、開始待ち行列と遅延待ち行列を記録し、管理する。行列管理手段６５０を備えた場合は、ステップＳ６４０は次のようになる。リソース割り当て手段６４０は、必要とされるリソースを割り当てできる場合は、前記選択されたボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、開始待ち行列に新しいボイスを加える。また、プロセッサリソースが割り当てられない場合は、前記新しいボイスを前記遅延待ち行列に加え、遅延の後に新しいボイスを遅延待ち行列から開始待ち行列に移動する（ステップＳ６４０’）。
【００６６】
データ処理手段のプロセッサリソースが、複数のボイスを実行しているベクトル方式ボイス生成アルゴリズムの複数のインスタンスを含み、複数のインスタンスの各インスタンスは、複数のボイスのうちＮ個のボイスを実行するように設定することができる場合には、次のような変更も可能である。オーディオプロセッサ６００にインスタンス再構成手段６５５（または６５５’）を備えさせる。ここで、インスタンス再構成手段６５５は、新しいボイスにリソースを割り当てられなかった場合に、繰り返し処理を行う場合に追加するインスタンス再構成手段を示している。また、インスタンス再構成手段６５５’は、新しいボイスにリソースを割り当てられなかった場合にも、繰り返し処理を行わない場合に追加するインスタンス再構成手段を示している。ステップＳ６４０（ステップＳ６４０’）の割り当ての解除により、複数のインスタンスの１つから発音中のボイスが解放された場合は、複数のインスタンスのうち多くとも１つがＮ個未満のボイスを実行するように設定されるように、複数のインスタンスを再構成する（ステップＳ６５５またはＳ６５５’）。
【００６７】
なお、データ処理手段のプロセッサリソースが、少なくとも１つのインスタンスはＮ個のボイスを実行するように設定することができる場合には、次のような処理が可能である。新しいボイスが少なくとも１つのインスタンスによって実行することができ、かつ、少なくとも１つのインスタンスがＮ個未満のボイスを実行するように設定されている場合は、リソース割り当て手段６４０では、少なくとも１つのインスタンスに新しいボイスを割り当てることができる（ステップＳ６４０、Ｓ６４０’）。
次に、パラメータ取得手段６２５を追加した場合の変更例を示す。パラメータ取得手段６２５は、ボイス（またはボイスクラスタ）へ割り当てるために必要なプロセッサリソースの量を示すパラメータ（リソースコストパラメータ）と、プロセッサが割り当てられる最大値を示すパラメータ（最大プロセッサリソースパラメータ）を求める。なお、最大プロセッサリソースパラメータは、物理的な最大値である必要はなく、リソースを多少残すように設定した値を最大値としてもよい。パラメータ取得手段６２５は、さらに、発音中のボイス（またはボイスクラスタ）および効果に割り当て済みのリソースを示すパラメータ（割り当て済みプロセッサリソースパラメータ）を計算する（ステップＳ６２５）。ステップＳ６２５の処理の後、リソース判定手段６３０は、割り当て済みプロセッサリソースパラメータとリソースコストパラメータとの合計が、最大プロセッサリソースパラメータを超えるかどうかも判定する（ステップＳ６３０’）。そして、ボイス取り除き手段６３２を追加すれば、ステップＳ６３０’の結果に応じて、ボイスクラスタからボイスを取り除くことができる（ステップＳ６３２）。また、最大プロセッサリソースパラメータ変更手段６３４を追加すれば、最大プロセッサリソースパラメータの設定値を変更することができる（ステップＳ６３４）。
【００６８】
このように処理することで、各種のボイスモデルに必要とされるすべての計算と、各フレームで発音データに用いられる効果アルゴリズムを、そのフレームで完了されることができる。総計算負荷が１フレームで完了するには大きすぎる場合、タスクはサイズを縮小して時間内に完了できる。したがって、各種のボイスモデルと効果アルゴリズムすべての間でデータ処理リソースを割り当てて、合成される出力が、フレーム間のタイミングを満たさないために生じる不具合なしに、良好に聞こえるようにできる。
ここに記載されるボイス割り当ては、最新技術を用いたＳＩＭＤプロセッサ、または他のベクトルプロセッサを利用したアーキテクチャを利用する、固有のミュージックシンセサイザに適用される。
【００６９】
ここに記載される技術の実施形態は、ここに記載される機能を行うために実行可能な、磁気媒体または他の機械可読データ記憶媒体に記憶されたコンピュータプログラムを含む。
上記で詳述した好ましい実施形態と例を参照して本発明を開示したが、これらの例は制限的な意味ではなく例示的な意味であることを理解されたい。
【図面の簡単な説明】
【００７０】
【図１】ベクトルプロセッサを使用し、動的ボイス割り当ての手順を実施するロジックを含んだ合成システムを示す図である。
【図２】システムで実行されるベクトルプロセッサに基づくボイスモデルを説明する図である。
【図３】ベクトルに基づくボイスモデルの動的ボイス割り当てを管理するデータ構造を示す図である。
【図４】システムの動的ボイス割り当てのために編成されたボイスのリストを説明する図である。
【図５】オーディオプロセッサの動的ボイス割り当てを伴う実行エンジンの処理の流れを示す図である。
【図６Ａ】新しいイベントの処理の中で、コストの比較を行う処理の流れを示す図である。
【図６Ｂ】新しいイベントの処理の中で、ボイスの回収とボイスの割り当ての処理の流れを示す図である。
【図７Ａ】動的ボイス割り当て処理での、ボイスの回収の流れを示す図である。
【図７Ｂ】動的ボイス割り当て処理での、コストの比較を行う処理の流れを示す図である。
【図８】システム過負荷の回避を行う流れを示す図である。
【図９】ボイスが解放されるとき行う処理の擬似コードを示す図である。
【図１０】新しいクラスタを含む、現在の組合せについてのスロットごとのボイス要件を判定する処理の擬似コードを示す図である。
【図１１】過大なイベント要件を縮小する処理の擬似コードを示す図である。
【図１２】すべてのサブレートティックで、遅延されたボイスの処理の擬似コードを示す図である。
【図１３】時間差リスト処理のための典型的な擬似コードを示す図である。
【図１４】典型的な回収処理の擬似コードを示す図である。
【図１５】オーディオプロセッサの機能構成例を示す図である。
【図１】
2006196003.tif 000003
【図２】
2006196003.tif 000004
【図３】
2006196003.tif 000005
【図４】
2006196003.tif 000006
【図５】
2006196003.tif 000007
【図６Ａ】
2006196003.tif 000008
【図６Ｂ】
2006196003.tif 000009
【図７Ａ】
2006196003.tif 000010
【図７Ｂ】
2006196003.tif 000011
【図８】
2006196003.tif 000012
【図９】
2006196003.tif 000013
【図１０】
2006196003.tif 000014
【図１１】
2006196003.tif 000015
【図１２】
2006196003.tif 000016
【図１３】
2006196003.tif 000017
【図１４】
2006196003.tif 000018
【図１５】
2006196003.tif 000019