JP2006196003A - ボイス処理方法、オーディオプロセッサ、ボイス処理プログラム、およびボイス処理プログラムを記録した記録媒体 - Google Patents

ボイス処理方法、オーディオプロセッサ、ボイス処理プログラム、およびボイス処理プログラムを記録した記録媒体 Download PDF

Info

Publication number
JP2006196003A
JP2006196003A JP2006005663A JP2006005663A JP2006196003A JP 2006196003 A JP2006196003 A JP 2006196003A JP 2006005663 A JP2006005663 A JP 2006005663A JP 2006005663 A JP2006005663 A JP 2006005663A JP 2006196003 A JP2006196003 A JP 2006196003A
Authority
JP
Japan
Prior art keywords
voice
processor
resource
voices
parameter
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2006005663A
Other languages
English (en)
Inventor
John S Cooper
エス. ジョン クーパー,
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Korg Inc
Original Assignee
Korg Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Korg Inc filed Critical Korg Inc
Publication of JP2006196003A publication Critical patent/JP2006196003A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G10MUSICAL INSTRUMENTS; ACOUSTICS
    • G10LSPEECH ANALYSIS TECHNIQUES OR SPEECH SYNTHESIS; SPEECH RECOGNITION; SPEECH OR VOICE PROCESSING TECHNIQUES; SPEECH OR AUDIO CODING OR DECODING
    • G10L13/00Speech synthesis; Text to speech systems
    • G10L13/02Methods for producing synthetic speech; Speech synthesisers
    • G10L13/04Details of speech synthesis systems, e.g. synthesiser structure or memory management
    • G10L13/047Architecture of speech synthesisers

Landscapes

  • Engineering & Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • Acoustics & Sound (AREA)
  • Multimedia (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Electrophonic Musical Instruments (AREA)

Abstract

【課題】フレーム間のタイミングを満たさないために生じる不具合なしに、タスクを完了できるようにする。
【解決手段】ベクトル方式のボイス生成アルゴリズムの少なくとも1つのインスタンスは、N個のボイスを生成するように設定する。イベントに応答して実行される新しいボイスを識別する。新しいボイスおよび発音中のボイスに割り当てられる必要があるプロセッサリソースを判定する処理では、新しいボイスが、少なくとも1つのインスタンスによって生成されることができるかどうかを解明する。必要とされるプロセッサリソースを満たすプロセッサリソースが利用できる場合は、新しいボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、プロセッサリソースが利用できない場合は、少なくとも1つの発音中のボイスに割り当て済みプロセッサリソースの割り当てを解除する。
【選択図】図15

Description

本発明は、各アルゴリズムがベクトル処理を用いて複数のボイスを同時に計算する汎用プロセッサを使用して、複数のボイス生成アルゴリズムを実行するミュージックシンセサイザに関する。詳細には、そのようなミュージックシンセサイザにおける動的なボイス割り当てとリソース割り当ての方法に関する。
汎用CPUまたはDSPを使用して、ユーザ入力に応答して音楽音を生成する音声生成プログラムを実行することは、ミュージックシンセサイザ業界でよく知られている。複数の波形を並行して計算する並行命令セットを含む汎用CPUまたはDSPの使用もよく知られている。典型的なソフトウェアシンセサイザ内には、サンプルレートクロックと、サンプルレートクロックのN倍(例えば16、32、64、128倍など)であるフレームレートクロックがある。フレームごとに、コードが実行され、N個のオーディオサンプルからなるオーディオバッファが満たされる。それらのサンプルはその後バッファから読み出され、音声として次のフレーム周期に出力される。読み出される時までにバッファが完全に満たされることができない場合(例えばCPUがバッファを満たすのに必要とされるコードをすべて実行する時間がなかったなど)は、不完全なバッファのために出力波形にエラーが生じる。多くのソフトウェアシンセサイザは、この問題への対処が不十分であるか、あるいは全く対処しない。例えば、多くのソフトウェア合成システムでは、ユーザは、「過度に多くの音」を再生しないように気をつけなければならず、そうでないと、出力バッファが満たされるのが間に合わなかった時に、オーディオに「クリックノイズ」や「ポップノイズ」が聞こえる。この問題に対処するために、ボイス割り当てとリソース管理にロバストな方法が必要とされる。
電子音楽機器の動的なボイス割り当ては、そのリソースが現在利用可能であるか否かに関係なく、必要とされる音生成リソース(メモリ、プロセッサ、バスサイクルなど)を使用して、任意の音をアクティブにする能力を意味する。これは、リソースが利用可能であれば、そのリソースが直ちに使用され、リソースが利用可能でない場合は、現在そのリソースを使用しているボイス(または他のプロセス)からそのリソースを「回収」し、新しいボイスに再割り当てしなければならないことを意味する。また、ボイスアロケータは、処理リソースとメモリの制限を超えないように、既存のボイスと新しいボイスを管理しなければならない。
特許文献1は、単純なボイス割り当て機構を伴う、汎用CPUを利用したソフトウェアシンセサイザを記載している。ノートオンイベントに応答して、ボイスは、コストの影響を考慮せずに、即座に計算のために初期化され、準備される。処理フレームごとに、CPUの負荷が調べられて、そのフレームでいくつのボイスが計算されることができるかを判定する。要求されるボイスの数が計算できる数より多い場合は、現在のフレームで一部のボイスがミュートされる。ミュートされるボイスの優先順位を決める方法は記載されない。特許文献1の別の実施形態では、CPUの負荷が高くて要求される計算をすべて行うことができない時には、サンプルレートが下げられるか、より単純なアルゴリズムに置き換えられる。こうした方法はすべて、忠実度の低下と、音声品質の低下につながる。
別のソフトウェアシンセサイザが、特許文献2に記載される。このソフトウェアシンセサイザは、ベクトル処理を用いて複数のボイスを並行して計算する汎用CPUに基づく。ボイス割り当てとリソース管理のためのベクトル処理の関与については論じられない。1フレームに計算できるボイスより多くのボイスが要求される事例に対処する措置は、この文献にはない。
特許文献3は、動的なボイス割り当てのためのソフトウェアシンセサイザおよびシステムを記載する。記載されるシステムは、そのシンセサイザの特定のアーキテクチャに非常に固有のものである。しかし、同特許は、メモリとCPU処理の固定された制限を前提とした、新しいリソースの割り当ての基本と、ボイスの減少を伴うボイス回収の基本について述べている(特許文献3の図14〜17参照)。同特許は、ベクトル処理およびボイス割り当ての関与については記載していない。また、イベントのコスト(要求されるボイスの数以外)を求める方法も、回収されるボイスの階層的な優先順位付けについても、1つのフレーム内の過度のコスト影響を回避するための時間差開始についても論じていない。
米国特許第5,981,860号明細書 米国特許第5,955,691号明細書 米国特許第5,376,752号明細書
リアルタイムシステムでは、各種のボイスモデルに必要とされるすべての計算と、各フレームで発音データに用いられる効果アルゴリズムは、基本的にそのフレームで完了されなければならない。総計算負荷が1フレームで完了するには大きすぎる場合、そのタスクは、サイズを縮小して時間内に完了できるようにしなければならない。リアルタイムシステムで、各種のボイスモデルと効果アルゴリズムすべての間でデータ処理リソースを割り当てて、合成される出力が、フレーム間のタイミングを満たさないために生じる不具合なしに、良好に聞こえるようにする方法が必要とされる。
本発明の方法は、プロセッサリソースを利用して、ボイスを発音させるボイス生成アルゴリズムを実行することを含む。ボイス生成アルゴリズムは、SIMDアーキテクチャのプロセッサや他のベクトルプロセッサアーキテクチャを使用して実行されるアルゴリズムなど、ベクトル方式のボイス生成アルゴリズムからなる。割り当てられるベクトル方式のボイス生成アルゴリズムのインスタンスは、N個のボイスを生成するように設定することができる(Nは2以上の整数)。動的なボイス割り当てプロセスは、シンセサイザのキーボードのキーを押すことによって発生するノートオンイベントなどのイベントに応答して実行される新しいボイスまたは新しいボイスクラスタを識別する。新しいボイスあるいは新しいクラスタと、現在発音中のボイスに割り当てられる必要がある、プロセッサリソースの合計が判定される。求められるリソースの合計を満たすプロセッサリソースが利用できる場合は、新しいボイスあるいは新しいボイスクラスタのためのボイス生成アルゴリズムにプロセッサリソースが割り当てられる。プロセッサリソースが利用できない場合は、ボイスが回収される。ボイスを回収するには、少なくとも1つの発音中のボイスまたは発音中のボイスクラスタからプロセッサリソースの割り当てが解除される。ボイス割り当て処理は、新しいボイスまたは新しいクラスタの割り当てが成功するまで反復する。
ボイスアロケータでは、必要とされるプロセッサリソースを判定する処理は、新しいボイスまたは新しいクラスタの新しいボイスが、ベクトル方式のボイス生成アルゴリズムのすでに割り当てられたインスタンスで生成されることができるかどうかを解明することを含む。例えば、ベクトル方式のボイス生成アルゴリズムの割り当てられたインスタンスが、現在一部だけ満たされている場合は、N個未満のベクトルを実行し、すると割り当てられたインスタンス中の空いたベクトルを新しいボイスに使用することができる。プロセッサリソースが、特定のボイス方式のボイス生成アルゴリズムの複数のインスタンスを実行する場合は、各インスタンスは、N個のボイスを実行するように設定することができ、動的ボイスアロケータは、ボイスを解放した後に、ベクトル方式ボイス生成アルゴリズムの複数のインスタンスを再構成することにより、プロセッサリソースの断片化を解消し、そのため、多くとも、複数のインスタンスの1つがN個未満のボイスを実行するように設定される。
ボイスアロケータは、ボイスまたはボイスクラスタのための開始待ち行列と遅延待ち行列を保持することもできる。新しいボイスまたは新しいクラスタをプロセッサリソースに割り当てると、新しいボイスまたはクラスタは、開始待ち行列に加えられる。しかし、ノートオンイベント時にプロセッサリソースが利用できない場合は、新しいボイスまたはクラスタは、遅延待ち行列に加えられる。ボイス回収プロセスが十分なプロセッサリソースを解放することを可能にするように構成された遅延の後に、新しいボイスまたは新しいクラスタは、遅延待ち行列から開始待ち行列に移される。
動的ボイスアロケータは、ボイスと効果へ割り当てられるプロセッサリソースを示すリソースコストパラメータを求め、アンダーランや他のグリッチが発生する恐れがあるシステム過負荷の危険性の指示を提供する最大プロセッサリソースパラメータを求める。動的ボイスアロケータは、ボイスおよび効果によって使用中のプロセッサリソース量を示す割り当て済みプロセッサリソースパラメータも計算する。開始すべき新しいボイスが識別されると、動的ボイスアロケータは、割り当て済みプロセッサリソースパラメータと、新しいボイスまたは新しいボイスクラスタのためのリソースコストパラメータとの合計が、最大プロセッサリソースパラメータを超えるかどうかを判定することにより、新しいボイスにプロセッサリソースが利用できるかどうかを判定する。最大プロセッサリソースパラメータを超える場合、動的ボイスアロケータは、発音中のボイスを回収してリソースを解放する。
最大プロセッサリソースパラメータは、最大プロセッサリソースパラメータを超えるかどうかの判定結果に応答して変更される。例えば、プロセッサリソースの割り当ての測定結果が、リソースの閾値を超えるリソースが使用されていることを示す場合、最大プロセッサリソースパラメータを一時的に下げてシステムの過負荷を回避することができる。
最大プロセッサリソースパラメータが、新しく割り当てられたボイスクラスタのコストの基準としても用いられる実施形態が本明細書に記載される。新たに割り当てられたボイスクラスタが、最大プロセッサリソースパラメータを超えるリソースコストパラメータを有する場合は、新たに割り当てられたクラスタを削減することができる。
動的ボイスアロケータを使用して、各効果および各ボイスのコストを測定または推定する。全コストの合計は、リアルタイムの演奏のために必要とされる制限以下に保たれる。ロードされる効果がない場合は、すべての利用可能プロセッサリソースをボイスモデルに使用することができる。効果が加えられる場合は、ボイスモデルに利用することができるプロセッサリソースが、効果リソースのコストの分だけ減らされる。
合計コストをリアルタイムの制限を超えさせる新しいボイスまたは効果が要求される時には、ボイスの回収が必要となる。新しい効果またはボイスの追加は、アルゴリズムが異なるサイズである場合には、2つ以上のボイスの回収を必要とする可能性がある。
動的なリソース管理では、音を出すために必要なリソースが現在利用できるかできないかに関係なく、任意の音をアクティブにすることを可能にする。効果間およびボイス間の柔軟な割り当てにより、効果が最大限に利用されていない時に、データプロセッサリソースのより多くの部分をボイスの計算に使用することができる。プロセッサリソースの使用の評価に基づいて、別のボイスモデル(アナログなど)を実行しているボイスを回収することによって解放され、ボイスモデル(PCMなど)にリソースを割り当てることができる。さらに、本発明は、ベクトル方式のボイス生成アルゴリズムならびにベクトル方式でないボイス生成アルゴリズムに適用することができる。
本発明によって、各種のボイスモデルに必要とされるすべての計算と、各フレームで発音データに用いられる効果アルゴリズムを、そのフレームで完了されることができる。総計算負荷が1フレームで完了するには大きすぎる場合、タスクはサイズを縮小して時間内に完了できる。したがって、各種のボイスモデルと効果アルゴリズムすべての間でデータ処理リソースを割り当てて、合成される出力が、フレーム間のタイミングを満たさないために生じる不具合なしに、良好に聞こえるようにできる。
以下に、図1〜15を参照して本発明の実施形態の詳細な説明を提供する。
[第1実施形態]
図1は、音声シンセサイザとして構成された基本コンピュータシステム100を表すブロック図である。コンピュータシステム100は、データ処理リソースによる実行に適合されたプログラムを記録するメモリを含む。コンピュータシステム100は、単一命令多重データSIMD CPUなど、ベクトル処理のために構成された1つまたは複数の中央演算処理部CPU110、プログラム記録部101、データ記録部102、オーディオ部103、英数文字キーボード、マウス、音楽用キーボードなどのユーザ入力部104、グラフィカルユーザインタフェースや他のユーザ対話に対応するディスプレイ105、MIDIインタフェース106、ディスクドライブ107または他の不揮発性大容量メモリ、および、コンピュータとミュージックシンセサイザの技術分野でよく知られる他のコンポーネント108からなる。プログラム記録部101は、ランダムアクセスメモリ、不揮発性フラッシュメモリ、磁気ディスクドライブメモリ、磁気テープメモリ、他のデータ記憶媒体、または各種の取り外し可能および取り外し不能の記憶媒体の組合せなど、機械可読データ記憶媒体からなる。プログラム記録部101は、CPU110によって実行されるコンピュータプログラムを記録する。図1では、プログラム記録部101は、シンセサイザインタフェースプロセス、ボイス生成アルゴリズムVGA(Voice Generation Algorithm)、特定の音声のためにVGAを設定するパッチ、および他のシンセサイザプロセスのためのコンピュータ命令を記録している。ボイス生成アルゴリズムは、PCM、アナログ、はじかれた弦、オルガンなどの個々の音源モデルを実現する。
生成されたデジタル出力波形をアナログ波形および/または音声に変換する処理、デジタル出力波形を他の波形と混合する処理、デジタル出力波形を記録するなどの、オーディオ部を管理する処理も、プログラム記録部101のコンピュータプログラムを使用する。本発明の方法を実行するコンピュータシステム中の処理には、システム中の他のデータ処理手段のCPU110、特殊目的回路、プロセッサによる処理と、CPU110、特殊目的回路、プロセッサの処理の組み合わせがある。
また、図1のプログラム記録部101は、動的ボイス割り当て(ボイスアロケータ)のコンピュータプログラムおよび、リアルタイムオーディオ合成のための他のデータ処理リソース管理のためのコンピュータプログラムを含む。ボイスアロケータは、ここに記載されるリソースコスト管理、リソース割り当て、ボイス回収のアルゴリズムを行うルーチンを含む。ボイスアロケータは、一部の実施形態では、ポリフォニー/モノフォニー、ユニゾン、弱音ペダルおよびダンパーペダル、ポリリトリッガ(poly retrigger)、排他的グループなどを含む、あらゆるシンセサイザボイスモードを管理するように構成される。
ボイス生成アルゴリズムVGAは、ボイスモデルを実現する処理を含む、音を生成する処理を含む。ボイスモデルは、音を生成するための特定の合成アルゴリズムである。本明細書の実施形態では、ボイスモデルは、CPUのSIMD命令アーキテクチャまたは他のベクトル処理アーキテクチャに依拠して、ベクトル処理を使用してオーディオ信号を計算して、一度にいくつかの別個のボイスを1つのベクトルグループとして生成する。ベクトルグループの個々のボイスはすべて、そのモデルの異なるパッチ、すなわちパラメータ化を再生することができる。ここに記載されるベクトル処理で実装されるボイスモデルには次の例が含まれる。(1)2つの低周波発振器LFO、マルチモードフィルタ、増幅器などを有するPCMシンセサイザ。(2)2つの鋸歯状波発振器、サブ発振器、4つのLFO、フィルタ等を有する仮想アナログシンセサイザ。(3)ギターのような種類の音のための共鳴する弦の物理的モデル。および当技術分野で知られる他のモデル。
ここに記載されるSIMDシステムを含むベクトル処理システムでは、複数のボイス生成アルゴリズムを用いた複数音色シンセサイザでの動的なボイス割り当てが実現される。ここで、各アルゴリズムは、ベクトル処理を用いて複数のボイスを同時に計算する。固定されたメモリと処理リソースのセットを前提として、ボイスアロケータは、システムの制約内で既存のボイスと新規のボイスを管理する。新しいイベントが、複数のボイスアルゴリズムに複数のボイスを要求する可能性がある。ボイスデータは、アルゴリズム固有のベクトルグループに編成され、ボイスアロケータは、新しいイベントについてのコストを考慮する際、および既存のリソースを回収する際には、既存のベクトルグループの構成を考慮しなければならない。ここに記載される一実施形態では、新しいイベントの全リソースへの影響が事前に求められる。その結果、システムの制約を超える場合は、階層的な優先順位システムを使用して既存のリソースが回収されて、新しいイベントのための余裕を作るために最小限のリソースのみが回収される。また、1つのイベントによって開始される複数のボイスのコストへの影響は、複数のサブレートティックにわたって償却されて、1ティック(tick)への過度のコスト影響を回避する。しかし、位相の精度を保証するために特定のボイスは同じティックにともに開始することが保証されるようにする手段が提供される。ベクトル化されたボイスデータを継続的に断片化解消して、常に最小限の数のベクトルだけが処理されるようにし、また、ベクトル化システムでのボイス回収のための最適なシステムを可能にする機構が記載される。
図2に、ボイス生成アルゴリズムのインスタンス1つにつき4つのベクトルを有する、SIMDベクトルプロセッサの音源モデルのためのデータの編成を示す。図の編成では、このシステムによって実装される各ボイスモデルのボイスモデルレコードが、ボイスアロケータに保持される。したがって、ボイスモデルAはレコード120で表され、ボイスモデルBはレコード121で表され、ボイスモデルCはレコード122で表される。ベクトルグループは、特定のボイスモデルについて同時に処理されるボイスのセットを指定する。ここに記載される例では、4つのベクトルからなるグループが用いられ、これをクワッド(quad)と称する。しかし、これらの例および本発明一般は、どのようなサイズのベクトルグループにも適合するように拡張できることは明らかである。図2から、SIMDベースのプロセッサは、各インスタンスにつきN個のボイスを生成するように構成することができるベクトルベースのボイス生成アルゴリズムのインスタンスを実行することが理解できる。ここで、Nは1より大きい整数であり、図2ではN=4である。
図2は、3つのクワッド(QD0、QD1、QD3)に対応するデータ構造125を示す。パッチと称されるパラメータ値のセットP0〜PMAXが、あるボイスモデルの特定のインスタンスについて、クワッドの各ベクトルV0、V1、V2、V3に関連付けられる。ボイスモデルのレコードは、そのモデルのボイス生成アルゴリズムに従ってボイスを実行する発音中のクワッドへのポインタを含む。図2では、ボイスモデルAを使用して2つのクワッド(QD0およびQD2)を実行する。ボイスモデルBは実行されておらず、したがってどの発音中のクワッドにも関連付けられない。ボイスモデルCは、発音中のクワッドQD1に関連付けられる。特定のボイスモデルについての発音中のボイスが、クワッド中のベクトルに割り当てられる。例えば、ボイスモデルAの発音中ボイスの1つが、クワッドQD0のベクトルV1に割り当てられる。ボイスを発音させるために割り当てられる処理リソースは、対応するクワッドとそのクワッドの中の対応するベクトルを含む。SIMDベクトル処理環境では、CPUサイクルの点から見て、1つのボイスを実行するコストは、基本的に、1つのクワッドの4つのボイスを実行するコストと同じである。モデルの中には、他のモデルより処理にコストがかかるモデルがある。そのため、例えば、ボイスモデルBの1つのクワッドが、ボイスモデルAの1つのクワッドの2倍のプロセッサリソースコストを必要とする場合があることに留意されたい。
この実施形態のボイスアロケータは、各ボイスモデルレコード120〜122に関連付けられた部分的なクワッドパラメータPQ(PTRおよびCOUNT)を保持する。上記の断片化解消処理の結果、1つのボイスモデルについて常に1つまたはゼロの部分クワッドのみがある。部分クワッドパラメータは、そのボイスモデルに関連付けられた発音中のクワッドがないことを示すヌルであるか、すべての発音中のクワッドが、対応する発音中ボイスのために実行されている4つのベクトルですべてが満たされている。部分クワッドパラメータがヌルでない場合、パラメータは、一部が割り当てられたクワッドを示すポインタPTRと、割り当てられたベクトルの数や空いているベクトルの数など、クワッドで利用することができる空ベクトルの数を示すCOUNT値を含む。
図3に、ボイスアロケータによって保持される追加的情報を示す。ボイスアロケータは、システム中のすべてのボイスレコードのリスト150を、それらのレコードへのポインタとともに保持する。図3では、ボイスレコード0〜5がブロック151〜156で表される。ボイスレコードは、番号、ボイスモデルタイプ、速度、プログラムスロット、親ボイスクラスタなどを含む、割り当てられたボイスについての情報を保持する。ボイスアロケータのボイスリストは、ボイスが移動される際に入れ替えを助けるためにボイスレコードへのポインタを含む。したがって、図の例の各ボイスレコードは、ボイス番号、そのボイスがシンセサイザ内で関連付けられたボイス、ボイスに関連付けられた速度、MIDIチャンネルにおけるその対応するプログラムの位置を示すスロットポインタを、他のパラメータとともに含む。ボイス番号は、ボイスが発音リストに加えられ、リストから回収される際に割り当てとクワッドの断片化解消を管理する目的で、クワッド間のボイスおよびクワッド内のベクトルを移動するためにボイスアロケータのアルゴリズムによって利用される。各ボイスは、本質的に、そのボイス番号でサブレートベクトルデータとオーディオレートベクトルデータの特定のスライスに結び付けられる。ボイスレコードは、対応するボイスに割り当てられたクワッド中の割り当てられたベクトルへのポインタも保持する。したがって、いくつかの例として、ボイスレコード0のボイスレコード151は、クワッドQD0のベクトルV0に関連付けられる157。ボイスレコード3のボイスレコード154は、クワッドQD0のベクトルV3に関連付けられる158。ボイスレコード5のボイスレコード156は、クワッドQD1のベクトルV1に関連付けられる159。ボイスは、そのボイス番号を解放されたボイスレコードのボイス番号と交換し、ボイスリスト150を更新し、サブレートおよびオーディオレートベクトルのデータを1つのスライスから別のスライスにコピーすることにより、1つのベクトル位置から別のベクトル位置に、そして1つのクワッドから別のクワッドに移動されることができる。与えられたボイスモデルに割り当てられたボイスの数を与えられて、「モジュロX」演算により、部分クワッドの空いたボイスの数を求めることができる。ここで、Xは、1つのクワッド当たりのベクトル数であり、これは、ボイスリストのボイスに必要とされるベクトルの数をXで割った剰余に等しい。
図4に、ボイスアロケータによって保持される追加的なリストを示す。これは、遅延リスト180、時間差開始リスト181、および発音リストのセット182、183、184を含む。図4に示すリストの使用については、後述することとし、まず、レコードの特定の態様を説明する。遅延リスト180は、クラスタを実行するためにリソースの割り当てまでボイスクラスタを保持し、そのクラスタの保留ボイスレコードをポイントするために利用される。遅延リスト180は、例えばリンクされたリスト構造を使用することにより、クラスタ単位でリストのボイスを関連付ける。したがって、図の遅延リスト180は、ボイス番号0〜5を含む。遅延リスト180のボイス番号0〜3は、リンク構造185により1つのクラスタに関連付けられる。遅延リスト180のボイス4および5は、リンク構造186で別のクラスタに関連付けられる。
時間差開始リスト181は、リソースがすでに割り当てられ、1フレーム当たりの開始ボイスの数がシステムの制限を超えなければ、現在のフレームに開始されるべきボイスクラスタを保持するために利用される。時間差開始リスト181のボイスも、リンク構造によってクラスタに関連付けられる。また、時間差開始リスト181のボイスは、常に同期して発音されるステレオのボイス対など、音声が同時に開始されなければならない時には、標識によっても関連付けられる。発音リスト182〜184は、リソースの割り当てと回収のために、また発音中のボイス間の優先順位を維持するために、ボイスアロケータによって利用される。発音リスト182〜184は、リンク構造でクラスタにリンクされたボイスのリストも含む。ボイスアロケータでは、リソースは、クラスタに対して割り当てられたり、回収されたりする。そのため、1つのクラスタのボイスは、一度にプロセッサリソースに割り当てられる、または回収される。開始するために新しいクラスタが割り当てられるたびに、その新しいクラスタは、次の発音リストの1つに加えられる。
1.1つの演奏の変化にわたって保持されるボイス。
2.AmpEGがリリース段階にあるボイス。これらのボイスにはノートオフが受け取られており、AmpEGがリリース中である。
3.ダンパーペダルまたはホールド機能によって保持されているボイス。これらのボイスにはノートオフが受け取られているが、このボイスは、ダンパーペダルまたはホールド機能によって維持されている。
4.「アクティブ」なボイス。これらのボイスにはノートオフは受け取られていない。
一部の実施形態は、優先順位付け機構を有する。その場合は、上記のリスト2、3および4が、より優先度の高いボイスに繰り返され、各優先度について、さらに3つのリスト(例えばリスト2、3、4に対応するリスト)が使用される。
イベントが発生する、あるいは他の変化が生じると、ボイスクラスタあるいはボイスが、リストからリストへ移動される。リストは、新しいクラスタのために余地を作るために回収するクラスタを決定するために下記のように使用される。
ボイスのクラスタは、プログラムスロットの特定のノートオンイベントに対応するボイスまたは保留ボイスレコードのセットからなる。ボイスをクラスタとしてグループ化することにより、複数のボイス層からなる複雑な音が、1つのグループとして開始、停止、および回収される。このようにして、シンセサイザによっていくつかの成分の合計として作られた複雑な音は、他の成分が発音し続けている間に、一部の成分を回収させない。ある組み合わせについての1つのノートオンイベントは、複数のクラスタを作り出すことができ、各クラスタは、その組み合わせ中の1つのスロットに対応する。
図5に、動的なボイス割り当てを用いる基本的なシンセサイザエンジンプロセスの一例を示す。このプロセスは、図1に示すようなプロセッサにより、1フレームにつき一回、または1サブレートティックにつき一回実行される。例えば、1フレームは、32、64、または128のオーディオレートサンプルを含み、オーディオレートは例えば44.1kHz、48kHz、または96kHzである。そのため、複数サンプル(32、64、または128サンプル)の1フレームが、サブレートティックごとに生成され、出力バッファに書き込まれる。このメインループは、以下を達成するタスクを実行する。
1.受け取る演奏の制御に応答し、必要に応じてボイスを割り当て、除去、または更新する。
2.ボイスを計算する。フレームごとに、エンジンは、そのフレームで発音するすべてのボイスを計算し、その後行われる可能性のあるさらなる効果処理のために、結果をバッファに書きこまなければならない。
3.効果処理を計算する。フレームごとに、エンジンは、そのフレームについての計算されたボイスデータを含むバッファを読み取り、ユーザによって選択された効果設定に応じて、そのデータを処理しなければならない。処理された音声データは、次いで出力バッファに書き込まれる。
ここに記載される動的ボイス割り当ての方法は、複数のボイス生成アルゴリズムを用いる複数音色シンセサイザで実行される。また、各アルゴリズムは、ベクトル処理を使用して複数のボイスを同時に計算する。
ボイスアロケータは、固定されたリソースのセットを前提として、利用可能なリソースの制限内で発音中のボイスと新しいボイスを管理する。制限のあるリソースには、CPU速度とメモリの両方が含まれる。つまり、以下が含まれる。
1.制限のあるCPU速度。
2.総キャッシュ使用量を制限するための制限された数のボイスクワッド。
3.任意の1ティックに開始することができる限られた数のボイス。
ノートオンイベントのコストは、そのイベントに関連付けられたボイスクラスタの割り当てに先立って計算され、現在のコストおよび最大コストと比較される。コストが過大の場合には、そのノートオンイベントに関連付けられたクラスのためにリソースを解放するためにボイスを回収することができる。そのイベントで必要とされる各ボイスについて、ボイスアロケータは、そのボイスを開始するコストを求める。ボイスのボイスモデルが部分クワッドを有する場合は、新しいクワッドを割り当てるコストなしに、その部分クワッドがあるボイスを使用することができる。しかし、利用できる部分クワッドボイスがない場合は、モデルクワッドコストによって指定されるコストで、新しいクワッドを割り当てられなければならない。また、各ボイスが、モデルクワッドコストに含まれない追加的なコストを指定する場合があり、イベントの総コストを計算する際にはそのコストも計算に入れられる。
ボイスモデルの基準として使用されるコストパラメータの値は、様々な状況でボイスを実行する際のボイスモデルのパフォーマンスを調べ、経験的にコストを割り振ることにより、事前に求めることができる。コスト基準は、通例、負荷のある状況(例えば、すべてのキャッシュが無効のようなシミュレートされる最悪の条件下)での再生中のCPU使用率の指標である。数値は、任意の単位(例えば基準モデルと比較した相対数)であっても、何らかのより具体的な単位(1ティックに使用される実際のCPUサイクルなど)であってもよい。あるいは、このコスト基準は、動作中のボイスモデルのパフォーマンスを監視し、正規化式を適用してコストパラメータの値を求めることにより、実行時に求めることもできる。
例えば、ある時間にサブレート手順が開始し、その時間が記録される(S200)。次に、遅延リストにあるクラスタが、同じティック内で実行可能な場合には、ステップS203で開始するように時間差開始リストにそのクラスタを移動する。または、遅延リストに残しておくか、その他の方法でクラスタを処理する(S201)。次のステップで、ノートオンイベント、ノートオフイベント、およびボイスの割り当てまたは解放の必要性を生じさせる可能性のある他のイベントを含む、ユーザインタフェースまたはMIDIチャネルからのメッセージが処理される(S202)。ノートオンイベントを処理する典型的な手順は、図6A、図6Bおよび図7A、図7Bを用いて説明する。この手順は、必要に応じてボイス割り当てとボイスの回収を伴う。次のステップで、所与のサブレートティックに開始することが許される時間差開始リストにあるいくつかのボイスを、発音リストに移動し、それらのボイスを開始することにより、時間差開始リストにあるクラスタが処理される(S203)。次いで、エンベローププロセスやLFOプロセスなどのボイスモデルサブレートプロセスが実行される(S204)。次のステップで、ボイスモデルのオーディオレートプロセスが実行されて、そのサンプルレートのオーディオサンプルを生成する(S205)。ステップS206で、クワッドの断片化と動的ボイス割り当てに伴う他のハウスキーピングプロセスを含めて、保留中の空きボイスがボイスアロケータによって処理される(各自の解放を完了したサブレートアンプエンベロープから解放される)。ステップS207で、オーディオ入力ミキサプロセスがオーディオレートで実行される。ステップS208でオーディオレート効果が実行される。ステップS209でハードディスクへの記録またはハードディスクからの読出しがオーディオレートで実行される。オーディオデータは、ステップS210で出力バッファに書き込まれる。ステップS211で、ボイスアロケータがシステム過負荷防御ルーチンを実行する。その例は、図8との関連で下記でより詳細に説明する。ステップS211のシステム過負荷防御の後、サブレートプロセスループは終了する(S212)。
最適なボイス処理を保証するために、発音中のボイスは、断片化が解消されたクワッドのセットとして保持されなければならない。そのボイスが解放または回収された後にベクトルが解放されると、ボイスアロケータは、ステップS206で、必要に応じて発音中のボイスを移動して、完全に断片化が解消された発音中ボイスクワッドの配列を保持する。
すべてのボイスモデルは常に、以下の状況の1つにある。
1.発音中のクワッドがない。
2.満たされた、または部分的に満たされた1つのみの発音中クワッドがある。
3.1つまたは複数の満たされたクワッドがあり、部分クワッドはない。
4.1つまたは複数の満たされたクワッドと正確に1つの部分クワッドがある。
ボイスが解放されるときには、図9に示す処理を行う。
ボイスを移動するプロセスは以下の通りである。
1.ボイスアロケータ自身のボイスリスト中の2つのボイス構造を入れ替え、それらのボイス構造中の内部ボイス番号を入れ替える。
2.サブレートおよびオーディオレート両方のベクトルデータについて、ベクトルデータのソーススライスからターゲットスライスにコピーする。
3.古いスライスから新しいスライスまでの距離だけアドレスをオフセットすることにより、ベクトルデータに含まれる内部構造ポインタのアドレスを修正する。
4.クワッドが現在空いていれば、それを解放する。
ボイスが解放されるサブレートサイクルと同じサブレートサイクルでボイスを移動する際の考慮事項の1つは、ボイスは、サブレートプロセスの結果解放される可能性があることである(アンプエンベロープの実行など、解放の終わりにボイスを解放させる)。サブレートプロセスが、1つのボイスリストにわたって反復し、その反復の途中で、ボイスが解放され、ボイスを再配置する場合、リストの残りの整合性が無効になる可能性がある。そのため、好ましい実施形態では、保留空きリストを設定する。ボイスが空くと、そのボイスは必ずそのリストに加えられる。実際の移動と断片化解消は、図5のステップS206のように、サブレートとオーディオレートの処理が完了した後に、サブレートティックの最後に行われるべきである。
ボイスを開始することは、CPUにとって、かなり高コストな動作なので、ここに記載される実施形態では、任意の1ティックに何らかの最大数以上のボイスが開始しないように、ボイスは時間差をもって開始される。ステレオのボイスは、位相を正確にするために、同じティックで開始することが保証される。
ノートオンイベントが見つかると、ボイスアロケータは、そのノートオンイベントに応答して必要となる各ボイスモデルのボイスの数を判定し、総イベントコストを計算する。新しいノートオンイベントを開始するために必要な処理力が利用可能な処理力を上回る場合には、ボイスは、必要に応じて回収される。新しいボイスクラスタが構築されると、時間差開始リストに入れられるか、ボイスが回収された場合には遅延開始リストに入れられる。ボイスは、経過時間と優先度の順に回収される。ただし、ここに記載される実施形態では、ボイスモデルは優先されない。モデルBのための余裕を作るために、モデルAのボイスを回収することができる。好ましい実施形態では、新しいイベントのボイスの必要条件のための余裕を生むために、最小限の数のボイスが回収される。好ましい実施形態では、ボイスのクラスタは常にともに回収される。
ボイスモデルアルゴリズムは、特殊なベクトル処理命令(SIMDなど)を使用して、上記のようにベクトルのサブレートおよびオーディオレート処理を行う。クワッド処理システムの場合は、一度に4つのボイスが計算される。したがって、モデルAについての1つのボイスは、基本的に、処理するのに4つのボイスと同じ量の全システムコストを要する。9つのボイスは3つのクワッドコスト単位を用い、一方、6つのボイスは2つのクワッドコスト単位を用いることになる。ボイス割り当て機構は、システムコスト、回収などを計算する際にこのことを考慮しなければならない。
図6Aと図6Bに、図5のステップS202で行われるような、新しいクラスタについてのノートオンイベントを処理する流れ図を示す。この処理は、ノートオンイベントに対して、ボイスアロケータがプロセスを開始する(S300)。最初のステップで、ボイスアロケータは、1つまたは複数の新しいクラスタを含む、現在の組み合わせについてのスロットごとのボイス要件を判定する(S301)。ボイスアロケータは次いで、存在する場合にはモデル部分クワッドで利用できるボイスを考慮に入れて、モデルごとのボイス要件の概要を構築する(S302)。クワッドの数を含む、イベントに必要とされるリソースの量が判定される(S303)。イベントに必要とされるリソースの量とその時点での発音中ボイスに基づいて、総イベントコストが計算される(S304)。ステップS305で、そのノートオンイベントに応答して開始されるボイスの組み合わせについての総要件が、他の発音中ボイスを考慮せずに最大のシステムコストパラメータを超えると判定される場合は、ステップS306に進む。ステップS306では、ノートオンイベントに関連付けられたクラスタのボイスの数を優先順位付け方式に従って削減し、ステップS302に戻る。ステップS305で、ノートオンイベントが最大システムコストを超えるコストを必要としないと判定される場合は、ステップS307に進む。ステップS307では、計算されたイベントコストが利用可能なシステムコストと比較される。ステップS307で計算されたイベントコストが利用可能なシステムコストを超えない場合、図6Bの点Aに分岐する。ステップS307で計算されたイベントコストが利用可能なシステムコストパラメータを超える場合は、図6Bの点Bに分岐する。
イベントコストが利用可能なシステムコストのパラメータを超えない場合、図6Bの点Aから、ステップS308に進む。ボイスアロケータは、ボイスクラスタのデータ構造を構築する(S308)。そして、ボイスを割り当て(S309)、新しいクラスタのボイスを時間差開始リストに移動し(S310)、終了する(S311)。そして、図5のプロセスのステップS203に進む。
イベントコストが利用可能システムコストパラメータを超える場合、図6Bの点Bから、ステップS312に進む。ボイスアロケータは、1つまたは複数の発音中クラスタを回収し、新しいクラスタに必要とされるリソースを解放するプロセスを開始する(S312)。次に、ボイスアロケータは、保留ボイスレコードを使用してボイスクラスタのデータ構造を構築する(S313)。そして、新しいクラスタのボイスを遅延リストに移す(S314)。遅延リストの新しいクラスタのボイスレコードは、遅延パラメータに関連付けられ、その遅延パラメータは、図5のプロセスを通じて次のサイクルで調べられる。遅延パラメータが終了すると、クラスタのボイスは、上記のように遅延リストから時間差開始リストに移される。遅延パラメータは、ボイスアロケータがステップS312のクラスタを回収するプロセスを完了するのに十分な時間を持てるような長さに設定される。新しいクラスタを遅延リストに入れると、終了する(S311)。
図6A、図6Bから理解できるように、特定のMIDIチャンネルにノートオンが到着すると、ボイスアロケータは、現在の組み合わせを調べ、そのチャンネルに設定されたプログラムスロットごとに、ボイス要件の指定を要求する。例えば、「プログラムスロット1のピアノプログラムにはいくつのボイスが必要か」という質問がノートオンイベントに関連付けられたプログラムごとに解決される。プログラムは、プログラムパラメータに応じて、ゼロを含む任意数のボイスを指定することができる。ボイスは、どのボイスモデルのものでもよい。仕様は、ボイス要求レコードの形式である。この仕様は、プログラムによって特定され、1つのボイス当たりの追加コストなどボイスについてのさらなる情報を含むことができる。基本的に、ステップS301の処理は、図10に示す擬似コードのような処理である。
この反復を完了すると、ボイスアロケータは、スロットごとのボイス要件のセットを得ている。「スロット1はモデルAに2つのボイスを必要とし、スロット2は0個のボイスを必要とし、スロット3はモデルAに2つのボイスおよびモデルBに6つのボイスを必要とする」。ボイスの追加コストの合計もある。
次に、ステップS302で表すように、ボイスアロケータがこのリストに繰り返されて、ボイスモデル別に構成された、イベント要件の第2の概要を構築する。「モデルAは4つのボイスを必要とし、モデルBは6つのボイスを必要とする。」
ここで、モデルごとに処理される必要がある新しいクワッドの数を求め、その数に各ボイスモデルのクワッドコストを乗算することにより、実際のイベントコストを計算することができる。モデルコストの合計とすべてのボイス追加コストの合計が、ステップS304の総イベントコストになる。
上記の例では、3つのPCMボイスと6つのアナログボイスでは、PCMに1つの新しいクワッド、アナログに2つの新しいクワッドが必要となる。PCMのクワッドコストが4000で、アナログのクワッドコストが8000である場合は、総イベントコストは4000+16000、すなわち20000(ボイス追加コストがないものと想定する)になる。
ボイスアロケータは、イベントの要件をシステムの最大コストと比較することができる。イベントが、システムが行うことができるボイスクワッドより多くのボイスクワッド(発音している他のボイスがない場合であっても)を必要とするか、または、CPUが処理できるより多くのコストを必要とする場合は、イベントは、縮小されなければならない。一例は、システムの最大コスト制限を超える何百ものボイスを必要とする複雑な組み合わせの場合である。この縮小は、プログラムスロットごとに行われて、イベントコストがシステムの制限より小さくなるまで要件を減らす。
ステップS306に相当する過大なイベント要件を縮小する擬似コードを、図11に示す。ここで、ノートオンイベントについての要件と現在の発音コストの合計を含むイベントコストが利用可能なシステムコストと比較される。これはステップS307に一致する。イベントコストが利用可能なシステムコストを超える場合は、ステップS312に示されるように、発音中ボイスの一部が回収されなければならない。
ステップS312で音声が回収されており、ステップS313で新しいノートオンイベントについてボイスクラスタが構築されるとき、そのクラスタは、ステップS314で遅延リストに移されて、回収アルゴリズムが完了するための時間に対処する。ボイスが回収されるときには、そのオーディオは、いくらかの期間にわたって減少される。ボイスが直ちに解放された場合は、可聴の「プチッ」という音が生じる可能性がある。この回収の減少のために、減少期間の後までは、ボイスレコードは解放されず、回収を必要とした新しいイベントに利用できるようにならない。新しいボイスレコードは、減少期間の終わりまで割り当てられることができない。リズミカルなパターンでは、一部のイベントが回収を必要とし、一部のイベントは必要としない場合は、ジッタの恐れがあり、その場合一部のボイスは即座に開始し、他のボイスは(回収のために)遅延の後開始する。
ジッタを防ぐための解決法の1つは、すべてのノートオンイベントを、回収を必要とするか否かに関わらず、回収の時間まで遅延させるものである。このようにして、回収を必要とするイベントは、遅延時間を使用して回収されるボイスを減少させ、回収を必要としないイベントは、単に待機する。リズミカルなパターンでは、リズムパターンが保たれ、ジッタが最小に抑えられる。この解決法の欠点は、すべてのノートオンイベントの待ち時間が、回収時間だけ増すことである。明らかに、回収減少時間は可能な限り短くなければならない。
新しいノートオンイベントが回収を必要とする場合、新しいボイスは、回収されたボイスが完全に解放されるまで割り当てられることができない。この場合、ボイスアロケータは、いくらかの遅延の後に割り当てられるボイスのプレースホルダとして、保留ボイスレコードを確立する。保留ボイスレコードを含んでいるクラスタは、遅延を示すタイムスタンプとともに遅延リストに入れられる。
遅延時間が完了すると、ボイスアロケータは、クラスタにある保留レコードを処理し、実際のボイスを割り当て、そしてクラスタを遅延リストから時間差開始リストに移す。すべてのサブレートティック(図5のステップS201参照)で、遅延されたボイスは、図12ように処理される。
ボイスを開始することは、プロセッサリソースの点から見て高コストの動作なので、ボイスアロケータは、時間差開始リストを使用して、各ティックに開始されるボイスの数を制限する(図5のステップS203参照)。ノートオンイベントが6つのボイスを必要とし、1ティックに開始する最大のボイスが2つである場合、そのイベントは、完全に開始するのに3ティックを要する。
時間差開始機構は、ステレオのボイス対が同じティックに開始することを保証する。上記の例では、リスト中の2番目と3番目のボイスがステレオの対である場合は、最初のティックに1つのボイスのみが開始する。そして、次のティックに2番目と3番目のボイスがともに開始することができる。結果として、全イベントは、完全に開始するために4ティックを要することになる。時間差リスト処理のための典型的な擬似コードを、図13に示す。
時間差開始リストにあるボイスを処理するためにかかる時間が非確定的な場合は、ボイスを開始するために必要とされる総時間を求める機構を導入することができる。次のボイスを開始するのに必要な時間量が何らかの閾値を超える場合、時間差開始アルゴリズムは、単に、次のティックまで(あるいは必要な場合はさらに長く)待機してから、次のボイスを開始することができる。
図6BのステップS312に対応するボイス回収アルゴリズムの基本的な流れを、図7A、図7Bに示す。このアルゴリズムの最初のステップは、発音中のボイスの優先順位リストからクラスタを選択することである(S400)。発音中のボイスは、図4を参照して説明したように、優先順位リスト中ではクラスタ別に編成されている。
選択されたクラスタと、そのクラスタ中のボイスモデルに対して、1つのモデル当たりの空ベクトルの数FVmを求める(S401)。「回収コスト」パラメータがゼロに設定される(S402)。次に、選択されたクラスタにあるボイスが回収され、回収されたボイスのボイスモデルについてパラメータFVmが増分される(S403)。ステップS404では、空ベクトルの数FVmが4に等しいかどうかを判定する(クワッドベースのベクトルプロセッサの場合)。ステップS404で空ベクトルの数が4である場合は、回収コストが、現在のモデルのクワッドのコストだけ更新し、ステップS406に進む(S405)。ステップS404で、空ベクトルの数が4未満の場合はステップS406に進む。ステップS406では、現在のクラスタのすべてのボイスが回収されたかどうかを判定する。すべてのボイスが回収されてはいない場合、プロセスはステップS403に戻る。ステップS406でクラスタのすべてのボイスが回収されている場合、プロセスは、図7Bの点Aに進む。
図7BのステップS407では、新たに解放されたベクトルに基づいて、回収される必要のあるコストを調整する。この処理では、新しいクワッドが解放されていなくとも、発音中のクワッド内で1つまたは複数のベクトルが解放される場合にはイベントの要件を減らすことができ、追加的なクワッドを必要とせずに、解放されたそのベクトルを満たすことにより、ボイスモデルの新しいイベントの要件を減らすことができることを考慮に入れる。次に、回収されるコストが、回収プロセスに必要とされるコスト以上であるかどうかを判定する(S408)。回収されるコストが回収プロセスに必要とされるコストより少ない場合、優先順位リストから次のクラスタを選択し、図7Aの点Bに戻る(S409)。そこで次のクラスタからの音声が回収される。ステップS408で、回収されるコストが、回収プロセスに必要とされるコスト以上の場合、プロセスは完了する(S410)。
ボイスが回収される際には、実行エンジンで空ベクトルを扱う断片化解消プロセスにより、そのボイスが解放される時に、モデルボイスは、部分クワッドがないか、または正確に1つの部分クワッドがある完全に断片化解消された状態を保つものと想定することができる。そのため、モデルコストのクワッドを解放するために、回収プロセスは、単に、モデルから任意の4つのボイスを回収することができる。実行エンジンは、ボイスレコードを移動し、クワッドを断片化解消して、所与のモデルから4つのボイスを除去することで1クワッド分のベクトル処理がなくなるようにする。
回収が必要な時、イベントの要件は、上記のようにボイスの数でモデルごとに分割される。
新しいイベントのコストを判定する手法の1つは、モデルごとの、必須のベクトル数と追加コストの配列を含んだModelRequirementsクラスを確立することに基づく。このクラスは、総コスト要件(すべてのモデルクワッドコスト+追加コスト)も保持する。初期の要件は、モデル部分クワッドの空ベクトルの現在の数で調整されない。モデルAが3つのボイスを必要し、モデルコストが4000である場合、そのモデルは、4000のコストを有し、3つのボイスを必要とする。回収アルゴリズムは、ステップS407に対応するプロセスによって、必要に応じてこの要件を調整する。
代表的なコスト判定アルゴリズムは、最初に、numFreeModelVoices[numModels]の配列を、各モデルのPartialQuadにある空きボイスベクトルの数に初期化するか、またはPartialQuadがない場合は0に初期化する。この配列の初期化は、ステップS401で、1ティックにつき1回のみ行われるべきである。
回収の際に、プロセスは、0で開始するstolenCostを追跡する。あるモデルについてボイスが回収されるたびに、解放されたボイスベクトルの数だけnumFreeModelVoices[model]を増す。numFreeModelVoices[model]が4に達した場合は、stolenCostをmodelQuadCostだけ増す。
各クラスタを回収した後に、モデルごとのfreeVoiceCountを決定し、それを用いて、回収が完了したかどうかを判定する際に、必要とされる総コストを一時的にオフセットする。このプロセスは、そのモデルについて解放されたボイスベクトルの数が、新しいクラスタについて回収される必要がある、4を法とする(またはxを法とする。xはクワッドのベクトル数である。)そのモデルのボイスの数以上であるかどうかを調べることにより、必要とされるコストが、回収される必要のあるモデルごとの必須コストを減らすことができるかどうかを調べる。必須コストを減らすことができる場合は、そのモデルの新しいボイスの一部またはすべてを、残りの部分クワッドに割り当てることができ、回収される必要のあるコストをクワッドコストだけ減らすことができる。stolenCost≧requiredCostである場合、回収サイクルは完了する。典型的な回収処理の擬似コードを図14に示す。
本明細書に記載されるボイス割り当ての回収優先順位は、発音しているボイスがない条件から開始し、下記の7つのイベントと上記の発音中リストを含む例を参照して理解することができる。この単純な例では、システムで利用可能なボイスの総数は、4ボイスである。
1.ノートオンC4。リスト4がアクティブなボイスなので、発音リスト4に新しいクラスタを追加する。
2.ノートオンD4。リスト4がアクティブなボイスなので、発音リスト4に新しいクラスタを追加する。
3.ノートオンE4。リスト4がアクティブなボイスなので、発音リスト4に新しいクラスタを追加する。
4.ノートオンF4。リスト4がアクティブなボイスなので、発音リスト4に新しいクラスタを追加する。
5.ノートオンG4。コスト>最大コストなので回収しなければならない。
6.ノートオフE4。発音リスト4から発音中リスト2にクラスタが移される。
7.ノートオンA4。再度コスト>最大コストなので回収しなければならない。
イベント5の回収では初めにリスト1を調べるが、リスト1は空であり、2および3も空である。リスト4は、再生された順序、すなわちC4、D4、E4、F4でアクティブなボイスのクラスタのリストを有する。そのため、新しいコストが最大コスト以下になるまで、その順序でそれらのリストを回収する。この場合は、最初のリストC4だけを回収すればよい。
したがって、C4のクラスタが回収され、G4がアクティブなリスト4の最後に追加される。この例における次のイベントを考えてみたい。
イベント6で、E4のボイスがアクティブなリストから取り出され、ノートオフを受け取った音声についてリスト2に入れられるが、増幅器のエンベロープ関数「Amp EG」がなおリリース段階にある。すなわち、ノートオフを処理しているものの、Amp EGのリリース時間のためにボイスはまだ発音している。この例では、Amp EGが長いリリース時間を有するものと想定する。
この時点でリスト2(音声をリリースしている)は、1つの項目E4のみを有する。アクティブボイスのリスト4は、D4、F4、G4を有する。
イベント7で、再びコスト>最大コストになるため、回収しなければならない。
回収アルゴリズムはまずリスト1を調べるが、リスト1は空である。しかし、リスト2には1つの項目E4がある。このボイスが回収され、新しい音A4がアクティブリスト4に加えられる。
この時点で、D4、F4、G4、A4を有するアクティブボイスリスト以外は、すべてのリストが空になっている。
D4がより古いボイスであったとしても、A4に対する要求が処理された時にE4が回収されたことに留意されたい。E4はリリース段階にあったので、E4には、より低い回収の優先順位が与えられ、そのため最初に回収された。E4のボイスがリリース段階を完了している場合、そのボイスは、リスト2から取り除かれている。そして新しいノートオン要求は、回収を全く必要としない。
回収が必要とされる時には、リスト1を調べ、必要とするだけのボイスを回収する。より多くのボイスが回収される必要がある場合(リスト1が空であったか、リスト1に十分なボイスがなかったため)は、リスト2に移る。ここでも、リスト2から必要とするだけのボイスを回収する。まだ十分なボイスがない場合は、次のリスト、そしてまた次のリストへと進む。すべての発音中ボイスはそれらのリストのうち正確に1つなので、最終的には必要とするボイスがすべて取得される。
ユーザは、特定のスロットを優先度で特徴付けることができることに留意されたい。これは単に、そのスロットのボイスクラスタを、番号が高い回収リスト5〜7(または8〜10など)にロードさせ、それらのクラスタがより回収の対象にされないようにする。
図5のシステム過負荷防御ステップS211は、図8に示すように実施することができる。好ましいシステムのオーディオプロセッサは、多重バッファリングされて、システムが一時的な過負荷を吸収できるようにする(シンセサイザが必要とされる作業をすべて完了していない場合は、別のオーディオ割り込みが到着する時まで)。しかし、連続した過度に多くのティックにわたってシステムが時間を超過して稼動する可能性が、なおある。
過負荷防御アルゴリズムは、各サブレートティックにおける全CPU使用率を監視し、長期間にわたる移動平均と、割り込みの失敗に基づく短期間の指標の両方を監視する。これは、UIのアクティビティ、ネットワーキングの割り込みなど、ボイスアロケータに考慮されない要因がバッファのアンダーランや可聴のグリッチを発生させないことを保証するためである。
図8に、基本的なシステム過負荷処理の流れを示す。各ティックに、処理を開始する前のCPU時間を読み出し、完了後に再度CPU時間を読み出す。その差を総システムCPUコストと見なすことにより、総システムCPUコストが判定される。この処理では初めに、総CPUシステムコストが、最大システムコストパラメータによって設定される閾値以上であるかどうかを判定する(S501)。総システムコストが高くなり過ぎている場合は、最大システムコストパラメータが減らされ(S502)、終了する(S503)。このようにして、実行エンジンを通じた次のサイクルでは、下げられた最大システムコストパラメータが利用されて、実装されるリソースの総数を減少させる。ステップS501で、総システムコストが閾値より大きくない場合、前回最大システムコストパラメータが減らされた時から遅延パラメータが終了したかどうかを判定する(S504)。遅延パラメータが終了している場合は、デフォルトの最大システムコストパラメータが回復され(S505)、終了する(S503)。ステップS504で遅延パラメータが終了していない場合は、終了して(S503)、遅延パラメータが終了するまで、エンジンが、減らされた最大システムコストパラメータで動作できるようにする。この遅延パラメータは、最大システムコストパラメータを変更するルーチンにヒステレシスを生じさせる。
したがって、利用率が特定の閾値(利用可能な全最大CPUサイクルの何らかの高い百分率)を上回る場合、アルゴリズムは、
1.ボイスアロケータがいくらかのコストを回収して、発音システムのコストを下げるように要求する。ボイスアロケータは、通常の経過時間/優先順位に従って、総クワッドコストが要求されるコストになる、または要求されるコストを上回るボイスモデルのクワッドを解放するまで回収する。
2.ある期間にわたり少しだけ音声アロケータの総システム最大コストを下げて、発音コストが通常よりわずかに低く保たれる「回復」期間を保証する。最大コストは、元の値に戻されるまで、再びいくらかの時間にわたって上げられる。
システム過負荷アルゴリズムは、ティック単位の全システムCPUコストの長期間の稼動平均も保持する。この長期間の平均が高い閾値を上回ると、上記のステップ1と2が発生し、最大コストは、長期間の平均が低い閾値未満まで下げられるまで、再び上げられることはない。例えば、デフォルトの閾値は、例えばCPUの95%であり、低い閾値は85%である。
短期間の過負荷の急上昇に対して、上記のステップ1および2が発生し、ボイスアロケータの最大コストが回復されるまで、最大コストが数ティックにわたり全ティックで少量だけ上げられる。長期間の過負荷については、より長い期間にわたって最大コストが下げられて、システムが回復できるようにする。
汎用プロセッサを使用して複数のボイス生成アルゴリズムを計算する音声生成装置が記載され、各アルゴリズムは、パフォーマンス情報に応答してベクトル処理を使用して複数のボイスを同時に計算する。ボイスアロケータモジュールは、処理リソースとメモリの制限を超えないように、アルゴリズム固有のベクトルグループとして既存のボイスと新しいボイスを管理する。新しいパフォーマンスイベントが要求されると、その新しいイベントの全リソース影響、すなわちコストが判定され、現在の合計コストに加えられる。その要件がシステムの制限を超える場合は、階層的な優先順位付けシステムを使用して既存のリソースが回収されて、新しいイベントのための余裕を作る。また、1つのイベントによって開始される複数のボイスのコスト影響が複数の処理フレームにわたって償却されて、どのフレームにおいても過度なコスト影響を回避する。位相の精度のために、特定のボイスが同じティックにともに開始することを保証する手段が提供される。ベクトル化されたボイスデータを継続的に断片化解消して、常に最小限の数のベクトルのみが処理されることを保証する機構が含められる。
[第2実施形態]
本実施形態では、第1実施形態で示した発明を、異なる視点から説明する。本発明のボイス生成アルゴリズムは、オーディオ用のプロセッサ内で実行される。図15に、オーディオプロセッサの機能構成例を示す。オーディオプロセッサ600は、少なくともデータ処理手段610、ボイス識別手段620、リソース判定手段630、リソース割り当て手段640から構成される。
ノートオンイベントなどのイベントが発生すると、ボイス識別手段620は、イベントに応答して実行される新しいボイス(または新しいボイスクラスタ)を識別する(ステップS620)。リソース判定手段630は、新しいボイス(または新しいボイスクラスタ)と発音中のボイスに割り当てられる必要があるプロセッサリソースを判定する(ステップS630)。なお、リソース判定手段630での処理には、データ処理手段610で行うベクトルボイス生成アルゴリズムの1つのインスタンスによって、新しいボイスが生成できるか解明することも含まれる。リソース割り当て手段640は、必要とされるリソースが利用できる(割り当てできる)場合は、前記選択されたボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当てる。必要とされるリソースを割り当てることができない場合は、少なくとも1つの発音中のボイス(または発音中のボイスを含む発音中のボイスクラスタ)に割り当てられたプロセッサリソースの割り当てを解除する(ステップS640)。データ処理手段610は、ベクトル方式ボイス生成アルゴリズムを実行する手段である。そして、ボイス生成アルゴリズムの少なくとも1つのインスタンスは、N個のボイスを生成するように設定できる。ただし、Nは2以上の整数である。データ処理手段610は、前記の割り当てにしたがって、データを処理し、ボイスを発音する(ステップS610)。なお、ステップS640で、必要とされるリソースを割り当てることができない場合は、ステップS640のプロセッサリソースの割り当て解除の後に、ステップS630のリソース判定手段630の処理を繰り返してもよい。
また、オーディオプロセッサ600は、行列管理手段650を備えてもよい。行列管理手段は、開始待ち行列と遅延待ち行列を記録し、管理する。行列管理手段650を備えた場合は、ステップS640は次のようになる。リソース割り当て手段640は、必要とされるリソースを割り当てできる場合は、前記選択されたボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、開始待ち行列に新しいボイスを加える。また、プロセッサリソースが割り当てられない場合は、前記新しいボイスを前記遅延待ち行列に加え、遅延の後に新しいボイスを遅延待ち行列から開始待ち行列に移動する(ステップS640’)。
データ処理手段のプロセッサリソースが、複数のボイスを実行しているベクトル方式ボイス生成アルゴリズムの複数のインスタンスを含み、複数のインスタンスの各インスタンスは、複数のボイスのうちN個のボイスを実行するように設定することができる場合には、次のような変更も可能である。オーディオプロセッサ600にインスタンス再構成手段655(または655’)を備えさせる。ここで、インスタンス再構成手段655は、新しいボイスにリソースを割り当てられなかった場合に、繰り返し処理を行う場合に追加するインスタンス再構成手段を示している。また、インスタンス再構成手段655’は、新しいボイスにリソースを割り当てられなかった場合にも、繰り返し処理を行わない場合に追加するインスタンス再構成手段を示している。ステップS640(ステップS640’)の割り当ての解除により、複数のインスタンスの1つから発音中のボイスが解放された場合は、複数のインスタンスのうち多くとも1つがN個未満のボイスを実行するように設定されるように、複数のインスタンスを再構成する(ステップS655またはS655’)。
なお、データ処理手段のプロセッサリソースが、少なくとも1つのインスタンスはN個のボイスを実行するように設定することができる場合には、次のような処理が可能である。新しいボイスが少なくとも1つのインスタンスによって実行することができ、かつ、少なくとも1つのインスタンスがN個未満のボイスを実行するように設定されている場合は、リソース割り当て手段640では、少なくとも1つのインスタンスに新しいボイスを割り当てることができる(ステップS640、S640’)。
次に、パラメータ取得手段625を追加した場合の変更例を示す。パラメータ取得手段625は、ボイス(またはボイスクラスタ)へ割り当てるために必要なプロセッサリソースの量を示すパラメータ(リソースコストパラメータ)と、プロセッサが割り当てられる最大値を示すパラメータ(最大プロセッサリソースパラメータ)を求める。なお、最大プロセッサリソースパラメータは、物理的な最大値である必要はなく、リソースを多少残すように設定した値を最大値としてもよい。パラメータ取得手段625は、さらに、発音中のボイス(またはボイスクラスタ)および効果に割り当て済みのリソースを示すパラメータ(割り当て済みプロセッサリソースパラメータ)を計算する(ステップS625)。ステップS625の処理の後、リソース判定手段630は、割り当て済みプロセッサリソースパラメータとリソースコストパラメータとの合計が、最大プロセッサリソースパラメータを超えるかどうかも判定する(ステップS630’)。そして、ボイス取り除き手段632を追加すれば、ステップS630’の結果に応じて、ボイスクラスタからボイスを取り除くことができる(ステップS632)。また、最大プロセッサリソースパラメータ変更手段634を追加すれば、最大プロセッサリソースパラメータの設定値を変更することができる(ステップS634)。
このように処理することで、各種のボイスモデルに必要とされるすべての計算と、各フレームで発音データに用いられる効果アルゴリズムを、そのフレームで完了されることができる。総計算負荷が1フレームで完了するには大きすぎる場合、タスクはサイズを縮小して時間内に完了できる。したがって、各種のボイスモデルと効果アルゴリズムすべての間でデータ処理リソースを割り当てて、合成される出力が、フレーム間のタイミングを満たさないために生じる不具合なしに、良好に聞こえるようにできる。
ここに記載されるボイス割り当ては、最新技術を用いたSIMDプロセッサ、または他のベクトルプロセッサを利用したアーキテクチャを利用する、固有のミュージックシンセサイザに適用される。
ここに記載される技術の実施形態は、ここに記載される機能を行うために実行可能な、磁気媒体または他の機械可読データ記憶媒体に記憶されたコンピュータプログラムを含む。
上記で詳述した好ましい実施形態と例を参照して本発明を開示したが、これらの例は制限的な意味ではなく例示的な意味であることを理解されたい。
ベクトルプロセッサを使用し、動的ボイス割り当ての手順を実施するロジックを含んだ合成システムを示す図である。 システムで実行されるベクトルプロセッサに基づくボイスモデルを説明する図である。 ベクトルに基づくボイスモデルの動的ボイス割り当てを管理するデータ構造を示す図である。 システムの動的ボイス割り当てのために編成されたボイスのリストを説明する図である。 オーディオプロセッサの動的ボイス割り当てを伴う実行エンジンの処理の流れを示す図である。 新しいイベントの処理の中で、コストの比較を行う処理の流れを示す図である。 新しいイベントの処理の中で、ボイスの回収とボイスの割り当ての処理の流れを示す図である。 動的ボイス割り当て処理での、ボイスの回収の流れを示す図である。 動的ボイス割り当て処理での、コストの比較を行う処理の流れを示す図である。 システム過負荷の回避を行う流れを示す図である。 ボイスが解放されるとき行う処理の擬似コードを示す図である。 新しいクラスタを含む、現在の組合せについてのスロットごとのボイス要件を判定する処理の擬似コードを示す図である。 過大なイベント要件を縮小する処理の擬似コードを示す図である。 すべてのサブレートティックで、遅延されたボイスの処理の擬似コードを示す図である。 時間差リスト処理のための典型的な擬似コードを示す図である。 典型的な回収処理の擬似コードを示す図である。 オーディオプロセッサの機能構成例を示す図である。

Claims (30)

  1. 複数のボイスを生成するオーディオプロセッサのために、複数のボイスを実行中にプロセッサリソースに動的にボイスを割り当てるボイス処理方法であって、
    前記オーディオプロセッサのプロセッサリソースを利用して、ベクトル方式のボイス生成アルゴリズムの少なくとも1つのインスタンスを含み、ボイスを発音させるデータ処理ステップであって、前記ベクトル方式のボイス生成アルゴリズムの少なくとも1つのインスタンスは、N個のボイスを生成するように設定することができ、Nは、2以上の整数であるデータ処理ステップと、
    イベントに応答して実行される新しいボイスを識別するボイス識別ステップと、
    前記新しいボイスおよび発音中のボイスに割り当てられる必要があるプロセッサリソースを判定するリソース判定ステップであって、前記判定は、前記新しいボイスが、前記少なくとも1つのインスタンスによって生成されることができるかどうかを解明することを含むリソース判定ステップと、
    前記必要とされるプロセッサリソースを満たすプロセッサリソースが利用できる場合は、前記新しいボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、プロセッサリソースが利用できない場合は、少なくとも1つの発音中のボイスに割り当て済みプロセッサリソースの割り当てを解除するリソース割り当てステップと
    を有するボイス処理方法。
  2. 請求項1記載のボイス処理方法であって、
    前記リソース割り当てステップの割り当ての解除の後、前記リソース判定ステップを繰り返す
    ことを特徴とするボイス処理方法。
  3. 請求項1または2記載のボイス処理方法であって、
    開始待ち行列と遅延待ち行列を管理する待ち行列管理ステップも有し、
    前記リソース割り当てステップは、前記開始待ち行列に前記新しいボイスを加えることを含み、プロセッサリソースが利用できない場合は、前記新しいボイスを前記遅延待ち行列に加え、遅延の後に前記新しいボイスを前記遅延待ち行列から前記開始待ち行列に移動する
    ことを特徴とするボイス処理方法。
  4. 請求項1〜3のいずれかに記載のボイス処理方法であって、
    前記少なくとも1つのインスタンスは、単一命令多重データである
    ことを特徴とするボイス処理方法。
  5. 請求項1〜4のいずれかに記載のボイス処理方法であって、
    前記ボイス識別ステップは、前記新しいボイスを含むボイスクラスタを識別することを含み、
    前記リソース判定ステップは、前記ボイスクラスタにプロセッサリソースが利用できるかどうかを判定することを含む
    ことを特徴とするボイス処理方法。
  6. 請求項5記載のボイス処理方法であって、
    前記リソース割り当てステップは、前記少なくとも1つの発音中のボイスを含む発音中のボイスクラスタに割り当て済みプロセッサリソースの割り当てを解除することを含む
    ことを特徴とするボイス処理方法。
  7. 請求項1〜6のいずれかに記載のボイス処理方法であって、
    前記プロセッサリソースは、複数のボイスを実行しているベクトル方式ボイス生成アルゴリズムの複数のインスタンスを含み、前記複数のインスタンスの各インスタンスは、前記複数のボイスのうちN個のボイスを実行するように設定することができ、かつ、前記割り当ての解除により、前記複数のインスタンスの1つから前記発音中のボイスが解放される場合は、前記複数のインスタンスのうち多くとも1つがN個未満のボイスを実行するように設定されるように、前記複数のインスタンスを再構成するインスタンス再構成ステップ
    も有するボイス処理方法。
  8. 請求項1〜7のいずれかに記載のボイス処理方法であって、
    前記少なくとも1つのインスタンスはN個のボイスを実行するように設定することができ、前記新しいボイスは前記少なくとも1つのインスタンスによって実行することができ、かつ、前記少なくとも1つのインスタンスがN個未満のボイスを実行するように設定される場合は、前記リソース割り当てステップでは、前記少なくとも1つのインスタンスに前記新しいボイスを割り当てる
    ことを特徴とするボイス処理方法。
  9. 請求項1〜4のいずれかに記載のボイス処理方法であって、
    ボイスへ割り当てられるプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、発音中のボイスおよび効果に割り当て済みのリソースを示す割り当て済みプロセッサリソースパラメータを計算するパラメータ取得ステップも有し、
    前記リソース判定ステップは、前記割り当て済みプロセッサリソースパラメータと前記新しいボイスのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することも含む
    ことを特徴とするボイス処理方法。
  10. 請求項5または6記載のボイス処理方法であって、
    ボイスクラスタのためのプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、割り当て済みのプロセッサリソースパラメータを計算するパラメータ取得ステップも有し、
    前記リソース判定ステップは、前記割り当て済みプロセッサリソースパラメータと、前記ボイスクラスタのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することを含む
    ことを特徴とするボイス処理方法。
  11. 請求項10記載のボイス処理方法であって、
    前記リソース判定ステップの結果に応じて、前記ボイスクラスタからボイスを取り除くボイス取り除きステップ
    も有するボイス処理方法。
  12. 請求項9〜11のいずれかに記載のボイス処理方法であって、
    前記リソース判定ステップの結果に応じて、前記最大プロセッサリソースパラメータを変更する最大プロセッサリソースパラメータ変更ステップ
    も有するボイス処理方法。
  13. 請求項1〜12のいずれかに記載のボイス処理方法であって、
    前記ベクトル方式のボイス生成アルゴリズムは、SIMDプロセッサのためのPCMボイスモデルアルゴリズムである
    ことを特徴とするボイス処理方法。
  14. 請求項1〜12のいずれかに記載のボイス処理方法であって、
    前記ベクトル方式のボイス生成アルゴリズムは、SIMDプロセッサのためのアナログボイスモデルアルゴリズムである
    ことを特徴とするボイス処理方法。
  15. 複数のボイスを生成するオーディオプロセッサであって、
    ベクトルボイス生成アルゴリズムの少なくとも1つのインスタンスを含み、ボイスを発音させるボイス生成アルゴリズムを実行するプロセッサリソースを有し、前記ベクトル方式ボイス生成アルゴリズムの少なくとも1つのインスタンスは、N個のボイスを生成するように設定でき、Nは2以上の整数であるデータ処理手段と、
    イベントに応答して実行される新しいボイスを識別するボイス識別手段と、
    前記新しいボイスが前記少なくとも1つのインスタンスによって生成されることができるかどうかを解明することを含めて、前記新しいボイスと前記発音中のボイスに割り当てられる必要があるプロセッサリソースを判定するリソース判定手段と、
    前記必要とされるリソースを満たすプロセッサリソースが利用できる場合は、前記選択されたボイスのためのボイス生成アルゴリズムにプロセッサリソースを割り当て、プロセッサリソースが利用できない場合は、少なくとも1つの発音中のボイスに割り当てられたプロセッサリソースの割り当てを解除するリソース割り当て手段と
    を備えるオーディオプロセッサ。
  16. 請求項15記載のオーディオプロセッサであって、
    前記リソース割り当て手段でのプロセッサリソースの割り当て解除の後に、前記リソース判定手段の処理を繰り返す
    をことを特徴とするオーディオプロセッサ。
  17. 請求項15または16記載のオーディオプロセッサであって、
    開始待ち行列と遅延待ち行列を記録し、管理する待ち行列管理手段も有し、
    前記リソース割り当て手段は、前記開始待ち行列に前記新しいボイスを加えることを含み、プロセッサリソースが利用できない場合は、前記新しいボイスを前記遅延待ち行列に加え、遅延の後に前記新しいボイスを前記遅延待ち行列から前記開始待ち行列に移動する
    をことを特徴とするオーディオプロセッサ。
  18. 請求項15〜17のいずれかに記載のオーディオプロセッサであって、
    前記少なくとも1つのインスタンスは、単一命令多重データである
    をことを特徴とするオーディオプロセッサ。
  19. 請求項15〜18のいずれかに記載のオーディオプロセッサであって、
    前記ボイス識別手段の処理には、前記新しいボイスを含むボイスクラスタを識別することを含み、
    前記リソース判定手段の処理には、前記ボイスクラスタにプロセッサリソースが利用できるかどうかを判定することを含む
    ことを特徴とするオーディオプロセッサ。
  20. 請求項19記載のオーディオプロセッサであって、
    前記リソース割り当て手段の処理には、前記少なくとも1つの発音中のボイスを含む発音中のボイスクラスタに割り当て済みプロセッサリソースの割り当てを解除することを含む
    ことを特徴とするオーディオプロセッサ。
  21. 請求項15〜20のいずれかに記載のオーディオプロセッサであって、
    前記プロセッサリソースは、複数のボイスを実行しているベクトル方式ボイス生成アルゴリズムの複数のインスタンスを含み、前記複数のインスタンスの各インスタンスは、前記複数のボイスのうちN個のボイスを実行するように設定することができ、かつ、前記割り当ての解除により、前記複数のインスタンスの1つから前記発音中のボイスが解放される場合は、前記複数のインスタンスのうち多くとも1つがN個未満のボイスを実行するように設定されるように、前記複数のインスタンスを再構成するインスタンス再構成手段
    も備えるオーディオプロセッサ。
  22. 請求項15〜21のいずれかに記載のオーディオプロセッサであって、
    前記少なくとも1つのインスタンスはN個のボイスを実行するように設定することができ、前記新しいボイスは前記少なくとも1つのインスタンスによって実行することができ、かつ、前記少なくとも1つのインスタンスがN個未満のボイスを実行するように設定される場合は、前記リソース割り当て手段では、前記少なくとも1つのインスタンスに前記新しいボイスを割り当てる
    ことを特徴とするオーディオプロセッサ。
  23. 請求項15〜18のいずれかに記載のオーディオプロセッサであって、
    ボイスへ割り当てられるプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、発音中のボイスおよび効果に割り当て済みのリソースを示す割り当て済みプロセッサリソースパラメータを計算するパラメータ取得手段も有し、
    前記リソース判定手段の処理には、前記割り当て済みプロセッサリソースパラメータと前記新しいボイスのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することも含む
    ことを特徴とするオーディオプロセッサ。
  24. 請求項19または20記載のオーディオプロセッサであって、
    ボイスクラスタのためのプロセッサリソースを示すリソースコストパラメータを求め、最大プロセッサリソースパラメータを求め、割り当て済みのプロセッサリソースパラメータを計算するパラメータ取得手段も有し、
    前記リソース判定手段の処理には、前記割り当て済みプロセッサリソースパラメータと、前記ボイスクラスタのためのリソースコストパラメータとの合計が、前記最大プロセッサリソースパラメータを超えるかどうかを判定することを含む
    ことを特徴とするオーディオプロセッサ。
  25. 請求項24記載のオーディオプロセッサであって、
    前記リソース判定手段の処理結果に応じて、前記ボイスクラスタからボイスを取り除くボイス取り除き手段
    も備えるオーディオプロセッサ。
  26. 請求項23〜25のいずれかに記載のオーディオプロセッサであって、
    前記リソース判定手段の処理結果に応じて、前記最大プロセッサリソースパラメータを変更する最大プロセッサリソースパラメータ変更手段
    も備えるオーディオプロセッサ。
  27. 請求項15〜26のいずれかに記載のオーディオプロセッサであって、
    前記ベクトル方式のボイス生成アルゴリズムは、SIMDプロセッサのためのPCMボイスモデルアルゴリズムである
    ことを特徴とするオーディオプロセッサ。
  28. 請求項15〜26のいずれかに記載のオーディオプロセッサであって、
    前記ベクトル方式のボイス生成アルゴリズムは、SIMDプロセッサのためのアナログボイスモデルアルゴリズムである
    ことを特徴とするオーディオプロセッサ。
  29. 請求項1〜14のいずれかに記載のボイス処理方法をコンピュータにより実行させるボイス処理プログラム。
  30. 請求項29記載のボイス処理プログラムを記録したコンピュータ読み取り可能な記録媒体。
JP2006005663A 2005-01-13 2006-01-13 ボイス処理方法、オーディオプロセッサ、ボイス処理プログラム、およびボイス処理プログラムを記録した記録媒体 Pending JP2006196003A (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US64353205P 2005-01-13 2005-01-13
US11/187,070 US20060155543A1 (en) 2005-01-13 2005-07-22 Dynamic voice allocation in a vector processor based audio processor

Publications (1)

Publication Number Publication Date
JP2006196003A true JP2006196003A (ja) 2006-07-27

Family

ID=36654357

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2006005663A Pending JP2006196003A (ja) 2005-01-13 2006-01-13 ボイス処理方法、オーディオプロセッサ、ボイス処理プログラム、およびボイス処理プログラムを記録した記録媒体

Country Status (2)

Country Link
US (1) US20060155543A1 (ja)
JP (1) JP2006196003A (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010256408A (ja) * 2009-04-21 2010-11-11 Yamaha Corp 電子打楽器

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7778822B2 (en) * 2006-05-19 2010-08-17 Sony Ericsson Mobile Communications Ab Allocating audio processing among a plurality of processing units with a global synchronization pulse
US8594816B2 (en) * 2008-06-11 2013-11-26 Qualcomm Incorporated Method and system for measuring task load
US9002713B2 (en) 2009-06-09 2015-04-07 At&T Intellectual Property I, L.P. System and method for speech personalization by need

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6134633A (ja) * 1984-07-27 1986-02-18 Hitachi Ltd 情報処理システムにおけるタイミング方式
JPH04264947A (ja) * 1990-10-26 1992-09-21 Internatl Business Mach Corp <Ibm> マルチタスキング・データ処理システム
JPH05268286A (ja) * 1992-03-19 1993-10-15 Hitachi Ltd 通信データ情報処理方式
JPH05336032A (ja) * 1992-06-03 1993-12-17 Kokusai Electric Co Ltd コードレス電話器システム及びその呼出方法
JPH06308966A (ja) * 1993-02-10 1994-11-04 Korugu:Kk 動的ボイス割当をおこなうオープンアーキテクチャー構成のミュージックシンセサイザー
JPH10105175A (ja) * 1996-08-05 1998-04-24 Yamaha Corp 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JP2000330959A (ja) * 1999-05-18 2000-11-30 Nec Corp 問合せ並列処理システム及びプログラムを記録した機械読み取り可能な記録媒体
JP2005005926A (ja) * 2003-06-11 2005-01-06 Mitsubishi Electric Corp 情報処理システム及び資源利用制御方法

Family Cites Families (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5197130A (en) * 1989-12-29 1993-03-23 Supercomputer Systems Limited Partnership Cluster architecture for a highly parallel scalar/vector multiprocessor system
US5657476A (en) * 1993-02-10 1997-08-12 Korg, Inc. Signal processor with delay line management logic
JP2998612B2 (ja) * 1995-06-06 2000-01-11 ヤマハ株式会社 楽音発生装置
US5596159A (en) * 1995-11-22 1997-01-21 Invision Interactive, Inc. Software sound synthesis system
JP2970526B2 (ja) * 1996-01-17 1999-11-02 ヤマハ株式会社 コンピュータソフトウェアを用いた音源システム
DE69704996T2 (de) * 1996-08-05 2002-04-04 Yamaha Corp Software-Tonerzeuger
SG67993A1 (en) * 1996-08-30 1999-10-19 Yamaha Corp Sound source system based on computer software and method of generating acoustic waveform data
US5744739A (en) * 1996-09-13 1998-04-28 Crystal Semiconductor Wavetable synthesizer and operating method using a variable sampling rate approximation
US5930158A (en) * 1997-07-02 1999-07-27 Creative Technology, Ltd Processor with instruction set for audio effects
US7096471B2 (en) * 2001-06-01 2006-08-22 Texas Instruments Incorporated Apparatus for resource management in a real-time embedded system
US6912648B2 (en) * 2001-12-31 2005-06-28 Intel Corporation Stick and spoke replay with selectable delays
US7003461B2 (en) * 2002-07-09 2006-02-21 Renesas Technology Corporation Method and apparatus for an adaptive codebook search in a speech processing system
US7389508B2 (en) * 2003-09-25 2008-06-17 International Business Machines Corporation System and method for grouping processors and assigning shared memory space to a group in heterogeneous computer environment
JP4186851B2 (ja) * 2004-03-18 2008-11-26 ヤマハ株式会社 演奏情報表示装置およびプログラム

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS6134633A (ja) * 1984-07-27 1986-02-18 Hitachi Ltd 情報処理システムにおけるタイミング方式
JPH04264947A (ja) * 1990-10-26 1992-09-21 Internatl Business Mach Corp <Ibm> マルチタスキング・データ処理システム
JPH05268286A (ja) * 1992-03-19 1993-10-15 Hitachi Ltd 通信データ情報処理方式
JPH05336032A (ja) * 1992-06-03 1993-12-17 Kokusai Electric Co Ltd コードレス電話器システム及びその呼出方法
JPH06308966A (ja) * 1993-02-10 1994-11-04 Korugu:Kk 動的ボイス割当をおこなうオープンアーキテクチャー構成のミュージックシンセサイザー
JPH10105175A (ja) * 1996-08-05 1998-04-24 Yamaha Corp 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JP2000330959A (ja) * 1999-05-18 2000-11-30 Nec Corp 問合せ並列処理システム及びプログラムを記録した機械読み取り可能な記録媒体
JP2005005926A (ja) * 2003-06-11 2005-01-06 Mitsubishi Electric Corp 情報処理システム及び資源利用制御方法

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2010256408A (ja) * 2009-04-21 2010-11-11 Yamaha Corp 電子打楽器

Also Published As

Publication number Publication date
US20060155543A1 (en) 2006-07-13

Similar Documents

Publication Publication Date Title
EP2369581B1 (en) Tone generation apparatus
US6140566A (en) Music tone generating method by waveform synthesis with advance parameter computation
US8035021B2 (en) Tone generation apparatus
KR101166735B1 (ko) 악기 디지털 인터페이스 하드웨어 명령
US8450589B2 (en) Nonvolatile storage module, access module, musical sound data file generation module and musical sound generation system
JP2006196003A (ja) ボイス処理方法、オーディオプロセッサ、ボイス処理プログラム、およびボイス処理プログラムを記録した記録媒体
JPWO2010137312A1 (ja) 不揮発性記憶システムおよび楽音生成システム
KR101120968B1 (ko) 악기 디지털 인터페이스 하드웨어 명령 세트
JP4036233B2 (ja) 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JP3918817B2 (ja) 楽音生成装置
JP4089688B2 (ja) 楽音信号生成装置
JP2000276172A (ja) 楽音生成装置および記憶媒体
WO2010010646A1 (ja) アクセスモジュール、記憶モジュール、楽音生成システム、及びデータ書き込みモジュール
JP5510813B2 (ja) 楽音生成装置
JP5839156B2 (ja) 楽音信号発生装置
JP3852634B2 (ja) 楽音発生装置および楽音発生方法、並びに該方法に係るプログラムを記憶した記憶媒体
JP2004093732A (ja) 楽音発生装置及び楽音発生処理のプログラム
JP3050779B2 (ja) 信号処理装置
JP5360474B2 (ja) 楽音生成装置
JP3915725B2 (ja) 楽音合成装置
JP5510814B2 (ja) 楽音生成装置
JP5510815B2 (ja) 楽音生成装置
JP3760905B2 (ja) 発音割当プログラム
JPH03113499A (ja) 電子楽器
JP2011186262A (ja) 楽音信号発生装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20080924

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20100423

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20100511

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20100709

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20100810