(57)【要約】【課題】誤って遅延を含まないフィードバックループが作成された場合に対処することができる信号処理装置を提供する。【解決手段】複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置である。信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個を接続して回路を構成し、その回路構成情報を、回路構成情報格納管理部に保持して管理する。回路構成情報格納管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段を設ける。経路探索手段において、複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、ユーザに対して警告を送出するようにする。【選択図】図１
2006201988.tif 000002
【特許請求の範囲】
【請求項１】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個と、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段と、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段と、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理手段と、
前記回路構成情報格納管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段と、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段と、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、ユーザに対して警告を送出するようにする手段と、
を備えることを特徴とする信号処理装置。
【請求項２】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個と、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段と、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段と、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理部と、
前記回路構成情報記憶管理部に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段と、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段と、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記フィードバックループに遅延素子を追加挿入する手段と、
を備えることを特徴とする信号処理装置。
【請求項３】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個と、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段と、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段と、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理部と、
前記回路構成情報記憶管理部に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段と、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段と、
前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記フィードバックループに遅延素子を自動的に追加挿入するかどうかのプリセット設定入力を受け付けるプリセット手段と、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記プリセット手段による前記プリセット設定入力を参照し、前記フィードバックループに遅延素子を自動的に追加挿入すると設定されているときに、前記フィードバックループに遅延素子を追加挿入する手段と、
を備えることを特徴とする信号処理装置。
【請求項４】
請求項３または請求項４に記載の信号処理装置において、
前記追加挿入される前記遅延素子の遅延量として、予めプリセットされた値を保持する手段を備え、
前記遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記フィードバックループ中に前記プリセットされた遅延量の遅延素子を追加挿入することを特徴とする信号処理装置。
【請求項５】
請求項３または請求項４に記載の信号処理装置において、
前記追加挿入される前記遅延素子の挿入位置として、予めプリセットされた位置の情報を保持する手段を備え、
前記遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記フィードバックループ中の前記プリセットされた位置に遅延素子を追加挿入することを特徴とする信号処理装置。
【請求項６】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なうためにコンピュータを、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理手段、
前記回路構成情報記憶管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、ユーザに対して警告を送出するようにする手段、
として機能させるための信号処理プログラム。
【請求項７】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なうためにコンピュータを、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理手段、
前記回路構成情報記憶管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記フィードバックループに遅延素子を追加挿入する手段、
として機能させるための信号処理プログラム。
【請求項８】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なうためにコンピュータを、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理手段、
前記回路構成情報記憶管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段、
前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記フィードバックループに遅延素子を自動的に追加挿入するかどうかのプリセット設定入力を受け付けるプリセット手段、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記プリセット手段による前記プリセット設定入力を参照し、前記フィードバックループに遅延素子を自動的に追加挿入すると設定されているときに、前記フィードバックループに遅延素子を追加挿入する手段、
として機能させるための信号処理プログラム。
【請求項９】
請求項６〜８のいずれかの信号処理プログラムを記録したコンピュータ読取可能な記録媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
この発明は、複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置およびその信号処理プログラム、さらには、その信号処理プログラムを記録した記録媒体に関する。
【背景技術】
【０００２】
近年の市販のコンピュータは性能が著しく向上し、従来では難しかった動画や音楽のコンピュータ上での再生が可能となってきた。特に、動画や音声の信号処理を行なうアプリケーションに関しては、従来のＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等の専用信号処理デバイスや専用ハードウエアを用いなくとも、ソフトウエア処理にて、容易にリアルタイム信号処理が可能となってきた。
【０００３】
これらの信号処理アプリケーションを支える技術として、各種の信号処理ミドルウエアが存在している。例えば、Ｍｉｃｒｏｓｏｆｔ（登録商標）社製のＤｉｒｅｃｔＳｈｏｗ（非特許文献１参照）や、Ｔｈｅ  ＭａｔｈＷｏｒｋｓ（登録商標）社製のＭＡＴＬＡＢ（非特許文献２参照）、Ｃｙｃｌｉｎｇ‘７４社製のＭａｘ／ＭＳＰ（非特許文献３参照）などがある。
【０００４】
信号処理アプリケーションは、これらのミドルウエアを利用することにより、高度な機能を比較的容易に実現することができる。例えば、音声について言えば、録音・再生、入出力、ミキシング、特殊効果等が、信号処理アプリケーションにより実現されている。また、動画について言えば、ノンリニア編集等の高度な編集機能を有する信号処理アプリケーションが実現されている。
【０００５】
また、この種のミドルウエアとして、プラグイン構造を有するものも提案されている（特許文献１（特開２００１−１０９６２８公報）および特許文献２（特開平７−３０２１９５号公報）参照）。ここで、プラグインとは、機能をモジュール化したものであり、ソフトウエアアプリケーションである。なお、この明細書では、信号処理を扱うので、プラグインは、信号処理ソフトウエアモジュールを構成するソフトウエアアプリケーションのことを指す。
【０００６】
このプラグインを用いることにより、ユーザは、必要なときに必要な信号処理ソフトウエアモジュールをアドオンして利用することができる。プラグインは、単体で使われることが多いが、近年、これらのプラグインを複数組み合わせて、複合的な機能を作り出すことのできる新たなシステムがいくつか存在してきている。この複合プラグインシステムは、新たな付加価値を生み出すシステムとして今後の主流となって行くものと予想される。
【０００７】
上記の特許文献は以下の通りである。また、非特許文献は、次に示すアドレスのサイトにおいて説明されている。
【特許文献１】特開２００１−１０９６２８公報
【特許文献２】特開平７−３０２１９５号公報
【非特許文献１】http://msdn.microsoft.com/library/defalt.asp?url=/library/en-us/directx9_c/directX/htm/directshow.asp
【非特許文献２】http://www.mathworks.com/
【非特許文献３】http://www.cycling74.com/products/maxmsp.html
【発明の開示】
【発明が解決しようとする課題】
【０００８】
しかしながら、現在存在している複合プラグインシステムには、以下のようないくつかの欠点がある。
【０００９】
（ａ）プラグインを多段に結線すると処理遅延（レーテンシー）が比例して増大する。
【００１０】
（ｂ）プラグイン間の結線に制限があり、フィードバックループの結線ができない。
【００１１】
（ｃ）信号処理動作中にプラグイン間の結線状態を変更できない。
【００１２】
（ｄ）処理速度が遅いために多くの機能をリアルタイムで実行する事が難しい。
【００１３】
（ｅ）音声と画像の同期やパラメータの変更においてサンプル精度での制御ができない。
【００１４】
（ｆ）１台のコンピュータ上で閉じた形でしか信号処理できない。
【００１５】
これまで、上記欠点を部分的に解決するミドルウエアはいくつか存在しているが、全ての欠点を同時に解決することができるミドルウエアは存在していない。何故なら、相反する問題（ある一つの問題を解決すると他の問題へ悪影響を与える問題）を含んでいるからである。例えば、上記（ｂ）と（ｄ）を同時に解決することは非常に難しい。
【００１６】
これらの欠点が存在することで、従来のミドルウエアの製品への組み込み利用において致命的な障壁となっているケースも少なくない。
【００１７】
そこで、出願人は、上記の問題点を解決した信号処理装置を先に提案した。この先に提案した信号処理装置によれば、プラグイン間の結線に制限は無く、フィードバックループの結線が可能になった。
【００１８】
このような信号処理装置において、従来から避けて通れない問題がある。すなわち、一般的なディジタル信号処理理論における「シグナルフローグラフ中のフィードバックループには、必ず一つ以上の遅延素子を含む必要がある。」という条件である。
【００１９】
これは、信号処理の因果性を満たすために必要である。例えば上述の信号処理装置などを使用して、ユーザが、遅延素子を含まないフィードバックループ回路を作成しようとした場合、それでは正しい信号処理結果が得られないため、直ちにその信号処理動作を解除・破棄する必要がある。さもなければ、このような回路は、正しい信号処理を行なうことができないために、ノイズ等の不要な信号を出力してしまうからである。
【００２０】
ただ、このようなユーザ操作は日常よくあることであり、特に、「フィードバックループに遅延素子を含む必要がある」という知識を持たないユーザには、信号処理装置において、信号処理回路の生成処理操作が煩雑でわかりにくいという問題がある。
【００２１】
この発明は、上記の問題点にかんがみ、上記欠点を解決することができる信号処理装置を提供することを目的とする。
【課題を解決するための手段】
【００２２】
上記の課題を解決するために、請求項１の発明は、
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個と、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段と、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段と、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理手段と、
前記回路構成情報格納管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段と、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段と、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、ユーザに対して警告を送出するようにする手段と、
を備えることを特徴とする信号処理装置を提供する。
【００２３】
この請求項１の発明によれば、信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、ユーザに対して警告を送出するようにするので、ユーザは、「フィードバックループに遅延素子を含む必要がある」という知識を持たなくても、的確な措置を講じることができるようになるという効果がある。
【００２４】
請求項２の発明は、
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個と、
ユーザからの前記信号処理ソフトウエアモジュールの生成または削除指示、および前記ユーザからの前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段と、
前記指示入力受付手段で受け付けられた前記ユーザからの指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する信号処理ソフトウエアモジュール間接続手段と、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理部と、
前記回路構成情報記憶管理部に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段と、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段と、
前記経路探索手段において、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、前記フィードバックループに遅延素子を追加挿入する手段と、
を備えることを特徴とする信号処理装置を提供する。
【００２５】
この請求項２の発明によれば、信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、フィードバックループに自動的に遅延素子が追加挿入されるので、「フィードバックループに遅延素子を含む必要がある」という知識を持たないユーザであっても、フィードバックループを備える回路を容易に構築することができるようになるという効果がある。
【発明の効果】
【００２６】
請求項１の発明によれば、信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたことが検出された場合に、ユーザに対して警告を送出するようにするので、ユーザは、「フィードバックループに遅延素子を含む必要がある」という知識を持たなくても、的確な措置を講じることができるようになる。
【００２７】
また、請求項２の発明によれば、「フィードバックループに遅延素子を含む必要がある」という知識を持たないユーザであっても、フィードバックループを備える回路を容易に構築することができるようになるという効果がある。
【発明を実施するための最良の形態】
【００２８】
以下、この発明による信号処理装置の実施形態を、図を参照しながら説明する。
【００２９】
［第１の実施形態］
この発明による信号処理装置の実施形態は、汎用信号処理ミドルウエアであり、以下、このミドルウエアをＳＳＰ（Ｓｏｆｔｗａｒｅ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）と呼ぶ。なお、以下の実施形態の説明においては、信号処理として音声信号処理の場合を例にとる。
【００３０】
ＳＳＰは、図２に示すように、汎用ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）と、アプリケーションソフトウエアとの間に位置するもので、アプリケーションは、ＳＳＰを利用することで、容易に高度な信号処理機能を実現することができる。また、ＳＳＰはＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）を持つことを必要としないミドルウエアであるので、表示装置を持たない組み込み機器用の信号処理エンジン用としても利用することができる。
【００３１】
［実施形態の信号処理装置の概要］
この発明による信号処理装置の実施形態のＳＳＰは、グラフ構造を有するミドルウエアであり、基本的には、一つのコンピュータに実現されるが、後で説明するように、ネットワークを通じて接続された複数台のコンピュータにおいて、実現することもできる。
【００３２】
ＳＳＰとしての実施形態の信号処理装置は、この例においては、ソフトウエアで構成されるグラフモジュール（以下、単にグラフという）と、ソフトウエアで構成されるプラグインモジュール（以下、単にプラグインという）との２大要素により構成されている。
【００３３】
プラグインモジュールは、信号処理の単位要素、例えば、フィルタ、イコライザ、ゲイン制御などを実行する信号処理ソフトウエアモジュールである。
【００３４】
プラグインは、この例では、複数の入力ポートおよび複数の出力ポートを有することが可能であり、入力ポートから入力された音声信号に対して、当該プラグイン固有の信号処理を施して、出力ポートから出力する働きを持つ。
【００３５】
プラグインの出力ポートを他のプラグインの入力ポートに接続（ハードウエア的に結線接続されるのではなく、あるプラグインの出力信号が、他のプラグインに入力されることを意味する仮想的な接続状態となること。以下、単に接続と記す）することにより、複数個のプラグインを接続して、複合的な信号処理機能を実現することが可能である。ここで、プラグインは、入力ポートと出力ポートの組み合わせでのみ接続することができ、入力ポート同士や出力ポート同士を接続することはできない。
【００３６】
グラフは、ＳＳＰのシステムとしての役割を担っている部分であり、複数のプラグインを包含する働きを持つ。グラフは、種々の信号処理関数を保持している。そして、グラフは、ユーザからの操作入力を受けて、プラグインの生成、削除、ポート間の結線を行ない、その結果の回路構成情報を保持する。グラフの保持する信号処理関数には、プラグイン生成削除関数が含まれている。したがって、グラフ内部には、複数個のプラグインからなる任意の回路を構成することができる。
【００３７】
そして、グラフは、当該グラフの信号処理関数がコールされると、自分が受け取った時刻情報付の音声データを、内包するプラグインに順次渡してゆく。プラグインに音声データや付随情報の入出力を行なうのもグラフの役割である。
【００３８】
また、グラフは、プラグインの性質を持っている。このため、グラフは、プラグインと同様に、入出力ポートを持ち、他のプラグインと相互に接続することもできる。そして、グラフは複数のプラグインを包含できるため、グラフを作成することにより、複数のプラグインからなる回路ブロック（グラフ）を一つのプラグインとして扱うことができる。この場合のプラグインとして扱われるグラフは、複数の回路をまとめて一つの部品として扱うことができる働きを持つことになる。
【００３９】
［グラフの例］
図３に、内部に複数個のプラグインを包含するグラフの一例を示す。なお、実施形態の信号処理装置では、パーソナルコンピュータで構成することができ、ユーザの入出力を受け付けて、このパーソナルコンピュータの表示部に、ユーザ指示に応じて、グラフやプラグイン、それらの接続状態をグラフィック表示することできるようにされている。
【００４０】
この図３の例では、ユーザは、先ず、最初に基本となるルートグラフ２００を作ってから、このグラフ２００内に、複数のプラグイン２０１〜２０４からなる回路を作成するようにする。プラグイン２０１〜２０４のそれぞれは、予め、パーソナルコンピュータに格納されているのを選択して用いることができる。ここで言う格納状態とはオブジェクト指向におけるクラスというテンプレート状態であり、まだ実際のオブジェクトは生成されていない状態を指す。
【００４１】
ユーザは、例えば、プラグイン２０１〜２０４のそれぞれを、パーソナルコンピュータの格納部に格納されているプラグインから選択して、グラフ２００内に動的に生成（設置）する。ここで初めてオブジェクト指向におけるオブジェクトが生成される。そして、ユーザは、プラグイン２０１〜２０４の出力ポートと入力ポートとの結線、また、グラフ２００と、プラグイン２０１、２０４との結線などの指示をして、図３に示すような回路を構成する。
【００４２】
グラフ２００は、内部のプラグイン２０１〜２０４の回路構成情報を保持する。そして、ユーザが、ルートグラフ２００の信号処理関数を一回コールするだけで、ルートグラフの信号処理関数内から、順に、内包するプラグインの信号処理関数が再帰的にコールされ、信号処理に関する計算処理が逐次に行なわれてゆく。この再帰的な信号処理関数コールの伝播が、ＳＳＰシステムそのものである。
【００４３】
図４は、内部に複数個のプラグインを包含するグラフの他の例を示す。前述したように、グラフは、プラグインでもある。したがって、グラフは、内部にグラフ以外のプラグインと、グラフ自身（子グラフ）を含むことができる再帰的な構造をとることができる。また、他のプラグインと同様に入出力ポートも持っている。グラフの内部は、グラフ外から見るとブラックボックスになっている。グラフ内部には、複数のプラグインからなる回路ブロックが形成されている。
【００４４】
図４において、グラフ４００が親グラフである。この親グラフ４００は、その内部に、子グラフのグラフ４０１とプラグイン４０５を保持している。さらに、子グラフ４０１は、その内部にプラグイン４０２、プラグイン４０３、プラグイン４０４を保持している。親グラフ４００からは、子グラフ４０１内部のプラグイン４０２、プラグイン４０３、プラグイン４０４は見えずに、子グラフ４０１が一つのプラグインとして見える。
【００４５】
ユーザは、まず、最初に、ルートとなるルートグラフ（親グラフ４００）を一つ作る。ユーザは、このルートグラフ４００のプラグイン生成削除関数を呼び出すことで、ルートグラフ内部に子グラフ４０１やプラグイン４０５を生成することができる。
【００４６】
さらに、ユーザは、子グラフ４０１のプラグイン生成削除関数を呼び出すことで、同様に、プラグイン４０２、プラグイン４０３、プラグイン４０４を生成することができる。
【００４７】
信号処理実行を行なうには、ユーザは、まず、このルートグラフ４００の信号処理関数をコールする。すると、ルートグラフ４００の信号処理関数内から順に内包するプラグインとしての子グラフ４０１、プラグイン４０５の信号処理関数が再帰的にコールされ、計算処理が逐次行なわれていく。この再帰的な信号処理関数コールの順番を決定するのもグラフの機能である。
【００４８】
子グラフ４０１では、この子グラフ４０１の信号処理関数が最初にコールされる。そして、当該子グラフ４０１の信号処理関数内から、順に内包するプラグイン４０２，４０３，４０４の信号処理関数が再帰的にコールされ、計算処理が逐次行なわれていく。
【００４９】
ＳＳＰシステムとは、以上のようなグラフの働きそのものである。プラグインの生成削除処理、プラグイン間の結線処理、プラグイン間のデータの受け渡し処理、プラグインに対する時刻情報・音声情報と映像情報との同期付与処理、各プラグインの信号処理関数の逐次的な呼び出しとその呼び出し順の決定など、システムに必要な機能をこのグラフというプラグイン自身が処理している。
【００５０】
以下の説明において、システムという語を用いる場合における当該「システム」という語は、グラフそのもの、およびグラフが有する機能のことを指す。
【００５１】
図５は、実装例としてのＳＳＰミドルウエアの全体構造を示すＵＭＬ（Ｕｎｉｆｉｅｄ  Ｍｏｄｅｌｉｎｇ  Ｌａｎｇｕａｇｅ）クラス図である。オブジェクト指向で表現しており、クラスとインターフェース（ＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ））が定義されている。
【００５２】
プラグインクラス（ＣＰｌｕｇｉｎ）は、プラグインインインターフェース（ＩＰｌｕｇｉｎ）を継承しており、プラグイン固有のインターフェースを実装するものである。プラグインクラスは、複数の入力ポートクラス（ＣＩｎｐｕｔＰｏｒｔ）および出力ポートクラス（ＣＯｕｔｐｕｔＰｏｒｔ）を保持している。
【００５３】
また、プラグインクラスは、その働きに応じて複数の種類が存在している。例を挙げると、例えば足し算を行なうプラグインクラスは、アダープラグイン（Ａｄｄｅｒ  Ｐｌｕｇｉｎ）クラスであり、掛け算を行なうプラグインクラスは、マルチプライヤープラグイン（Ｍｕｌｔｉｐｌｉｅｒ Ｐｌｕｇｉｎ）クラスである。これらのクラスは、自作プラグイン（ＣＭｙＰｌｕｇｉｎ）クラスとして分類される。自作プラグインクラスは、プラグインクラスを継承している。この例のミドルウエアユーザは、プラグインテンプレートを使用することにより、容易に自作プラグインを作成することができる。
【００５４】
次に、グラフクラスについて説明する。グラフクラス（ＣＧｒａｐｈ）は、複数のプＲグインクラスを包含するものである。グラフクラスもプラグインクラス同様、プラグインインターフェース（Ｐｌｕｇｉｎ Ｉｎｔｅｒｆａｃｅ（ＩＰｌｕｇｉｎ））を継承しており、グラフクラス自身もプラグインクラスの一つである。
【００５５】
そのため、グラフ内部に更に別のグラフ、プラグインを包含するという再帰的な階層構造を構成することができる。これは、一般的なオブジェクト指向設計手法である「デザインパターン」のコンポジットパターン（Ｃｏｍｐｏｓｉｔｅ Ｐａｔｔｅｒｎ）と呼ばれる構造に相当する。
【００５６】
さらに、グラフはプラグインの性質も兼ね備えているため、他のプラグイン同様、入出力ポートを持ち、他のプラグインと相互に結線することができる。グラフオブジェクトを作成することにより、複数のプラグインオブジェクトからなる回路ブロックを一つの部品オブジェクトとして扱うことができる。
【００５７】
グラフクラス、プラグインクラスともに、インターフェース（ＡＰＩ）が定義されており、ＳＳＰミドルウエアのクライアントとなるアプリケーションからは、このＡＰＩをコールすることにより、このオブジェクトを制御することができる。ユーザがＳＳＰシステムに対して行なう操作とは、この２つのオブジェクトに対する操作のことである。
【００５８】
［プラグインの構成について］
図６は、プラグインの構成の一例を示す図である。前述もしたように、プラグインは、信号処理ソフトウエアモジュールであるので、この図６の構成の各部は、ハードウエアとして備えるのではなく、ソフトウエアの機能として備えるものである。
【００５９】
図６に示すように、プラグイン６００は、信号処理部６０１を備えると共に、０個以上の入力ポート６０２と、０個以上の出力ポート６０３とを持つことが可能である。すなわち、プラグイン６００は、入力ポート６０２を持たない場合と、出力ポート６０３を持たない場合があると共に、１個または複数個の入力ポート６０２、出力ポート６０３を持つことが可能である。
【００６０】
各プラグイン６００は、入力ポート６０２および出力ポート６０３を通して、他のプラグインと信号のやり取り、この例では音声データのやり取りをすることができる。この例においては、１ポート当たり1チャンネル分の音声信号を入出力する。
【００６１】
プラグイン６００に対して入力ポート６０２および出力ポート６０３の追加・削除を、ユーザが指示することで、プラグイン６００が持つ入力ポート６０２および出力ポート６０３の数を信号処理中でも動的に変更することができるように構成されている。入力ポート６０２および出力ポート６０３には、追加した順番により０〜Ｎ（Ｎは任意の自然数）および０〜Ｍ（Ｍは任意の自然数）の識別番号が与えられ、ユーザは、この識別番号により、入力ポート６０２の一つおよび出力ポート６０３の一つを指定することができる。
【００６２】
また、プラグイン６００は、内部に０個以上のパラメータ保持部（パラメータバッファ）６０４を備え、当該パラメータ保持部６０４に０個以上のパラメータを持つことが可能である。ここで、パラメータとは、信号処理における効果の量などを設定する可変値のことであり、ユーザにより入力設定される。例えば、プラグイン６００がアンプの場合を例に取ると、増幅ゲイン値などがそれに相当する。プラグイン６００を使用するユーザは、プラグイン６００のパラメータ値を変更することにより、信号処理の効果を変えることができる。
【００６３】
この例では、パラメータには、０〜Ｋ（Ｋは任意の自然数）の識別番号が割り当てられている。ユーザは、任意のパラメータの識別番号を指定することにより、任意のタイミングでパラメータバッファの内容を変更することができる。プラグイン６００の機構として、ユーザから与えられたパラメータは、一旦、プラグイン６００内部のパラメータバッファ６０４に保持される。そして、システム（グラフのこと）から与えられるサンプルデータに同期した時刻情報に基づいてパラメータが読み出されて、信号処理部６０１に送られて、その信号処理に用いられる。
【００６４】
また、プラグイン６００には、時刻情報のレジスタ部６０５を備え、このレジスタ部６０５には、ＳＳＰシステム(グラフのことである)から、常に、時刻情報が入力されている。この時刻情報とは、ＳＳＰシステムを開始した時点（グラフの信号処理関数を開始した時点）を起点とする音声入出力データサンプルの積算カウント数である。この積算カウント数がＳＳＰシステムで最も基本となる時刻情報である。
【００６５】
この実施形態のＳＳＰシステムでは、時刻情報と音声入出力データは完全に同期している。すなわち、ＳＳＰシステムは、プラグイン６００に対して音声データと同時に時刻情報を与える。したがって、時刻情報は、プラグイン６００に入力される音声データのデータサンプルのタイムスタンプの役割を果たしている。このため、プラグイン６００自身は、これから信号処理の対象となる入力データが、絶対時刻で何サンプル目かという詳細な時刻情報を知ることができる。ＳＳＰシステム内に存在する全てのプラグインは、この絶対時刻を参照して同期しているため、ＳＳＰシステム内の回路全体として、サンプル精度の同期信号処理を実現することができる。
【００６６】
プラグイン６００は、内部に信号処理部６０１を持っている。他のプラグインから入力された音声データは、入力ポート６０２を通じて信号処理部６０１へ送られる。信号処理部６０１では、入力ポート６０２から得た音声データに対して、時刻情報や信号処理部６０１へ送られてきたパラメータ値を参照しながら、そのプラグイン固有の信号処理を施す。信号処理部６０１で処理された音声データは、出力ポート６０３を経て他のプラグインへ送信される。
【００６７】
プラグイン６００での処理は、時刻情報に同期することにより、１サンプル単位だけではなく、複数サンプル単位、例えばパケット単位で行なうことができる。プラグインでは、処理単位毎に、信号処理関数のコールを行なう。したがって、パケット単位で信号処理をする場合には、信号処理関数のコールが１パケットで一回となり、関数コールが少なくなる分だけ、信号処理速度が速くなる。
【００６８】
［グラフの構成例］
図７は、グラフの一例を示す構成図である。前述もしたように、グラフは、信号処理ソフトウエアモジュールであるので、この図７におけるグラフ７００の構成の各部は、ハードウエアとして備えるのではなく、ソフトウエアの機能として備えるものである。
【００６９】
前述したように、グラフはプラグインとしての性質をも有するものであり、信号処理部７０１と、入力ポート７０２と、出力ポート７０３と、パラメータバッファ７０４と、時刻情報のレジスタ部７０５とを備えている。信号処理部７０１は、当該グラフ内に包含されるプラグインを読み出す処理を行なうものである。入力ポート７０２と、出力ポート７０３と、パラメータバッファ７０４と、時刻情報のレジスタ部７０５の機能は、図６を用いて説明したプラグイン６００の、対応する部位と同様であるので、ここでは、その説明は省略する。なお、パラメータバッファ７０４のパラメータは、グラフ７００に対するパラメータであることは言うまでもない。
【００７０】
次に、グラフ特有の機能について説明する。
【００７１】
グラフ７００は、内部にプラグイン生成・保持部７０６を備えている。グラフ７００は、０個以上のプラグインを内部に包含することができる。ユーザは、グラフに対してプラグインの追加・削除を指示することで、信号処理中でも動的にプラグインの生成・削除することができる。信号処理中の動的なプラグインの生成・削除については後で、詳述する。
【００７２】
グラフ７００においては、生成したプラグインには追加した順番により０〜Ｊ（Ｊは任意の自然数）の識別番号が与えられる。このため、ユーザは、この識別番号によりプラグインを識別することができる。但し、グラフ７００は、プラグイン生成・保持部７０６には、この識別番号の順番でプラグインを保持しているわけではない。グラフ７００内のプラグインは、後述する逐次計算順序の順番にソートされた状態で、プラグイン生成・保持部７０６に保持している。
【００７３】
ユーザは、グラフ７００に対して、当該グラフ７００が内包するプラグイン間の結線も指示することができる。任意のプラグインの出力ポートと任意のプラグインの入力ポートとの結線状態を、信号処理中でも動的に変更することが可能である。これらは、ユーザがグラフ７００に対してプラグインの識別番号とポートの識別番号とを指定することで実行することができる。グラフ７００は、ユーザからの結線変更指示により、プラグインの結線状態を変更する処理を行なう。
【００７４】
ユーザは、グラフ７００に対して、信号処理の開始を指示する。ユーザが、グラフ７００の信号処理関数をコールすると、グラフ７００の信号処理関数内から順に、当該グラフ７００が内包するプラグインの信号処理関数が再帰的にコールされる。信号処理関数がコールされると、プラグイン生成・保持部７０６に、逐次計算順序の順番にソートされた状態で保持されている、グラフ７００が内包するグラフやプラグインの信号処理部が、前記逐次計算順序に従って、順次、実行処理される。
【００７５】
グラフ７００が内包するグラフやプラグインの計算処理が逐次的に行なわれていくことで、グラフ７００内に構成された回路全体の複合的な信号処理が実現される。この逐次計算順序は、プラグイン間の結線構造により、システム(グラフ７００)が決定する。
【００７６】
ユーザの指示によりプラグインの追加・削除・入力ポート・出力ポートの結線状態の変更など、回路状態に変更がある場合、グラフ７００は、後述するような経路探索を実行することにより、自己が内包するプラグインおよび子グラフについて最適な逐次計算順序を自動的に求める。子グラフが内包するプラグインについての最適な逐次計算順序は、当該子グラフが、経路探索を実行することにより自動的に求める。
【００７７】
上記のグラフで行なわれる経路探索の結果、プラグイン生成・保持部７０６のプラグイン群（プラグインとしての子グラフを含む）は、この最適な逐次計算順序の順番でソートされた状態で保持されている。グラフが備える経路探索のアルゴリズムについては、後で詳細に説明する。
【００７８】
［グラフの機能ブロック図］
図１は、信号処理装置の第１の実施形態において、グラフが備える機能をブロック化して示したグラフの構成の機能ブロック図である。すなわち、グラフは、指示入力受付機能部１と、プラグイン生成削除機能部２と、プラグイン間結線処理機能部３と、回路構成情報格納管理機能部４と、経路探索機能部５と、信号処理順序管理機能部６と、信号処理実行機能部７と、信号処理関数格納部８と、エラー警告機能部９とを備える。
【００７９】
指示入力受付機能部１は、ユーザからのプラグイン生成あるいは削除指示、入出力ポートの結線指示、パラメータ入力指示などを受け付け、プラグイン生成あるいは削除指示は、プラグイン生成削除機能部２に渡し、入出力ポートの結線指示は、プラグイン間結線処理機能部３に渡す。また、プラグイン生成あるいは削除指示、また、入出力ポートの結線指示があると、指示入力受付機能部１は、経路探索機能部５を起動させて、経路探索を実行させるようにする。また、指示入力受付機能部１は、パラメータ入力指示を受け付けたときには、パラメータバッファに入力されたパラメータを保持する機能を備えている。
【００８０】
プラグイン生成削除機能部２は、指示入力受付機能部１からのプラグイン生成あるいは削除指示を受けて、プラグインの生成あるいは削除処理を行なう。すなわち、プラグイン生成時には、生成されたプラグインに識別番号を付与し、回路構成情報格納管理機能部４に、当該識別番号を含むプラグインの生成情報を渡す。また、プラグイン削除時には、削除されたプラグインの識別番号と、その削除依頼とを含む削除情報を回路構成情報格納管理機能部４に渡す。
【００８１】
プラグイン間結線処理機能部３は、指示入力受付機能部１からのプラグイン間の結線指示を受けて、当該結線指示により指定されたプラグインの出力ポートと入力ポートとの結線情報を回路構成情報格納管理機能部４に渡す。
【００８２】
回路構成情報格納管理機能部４は、プラグイン生成削除機能部２やプラグイン間結線処理機能部３からのプラグインの生成情報、削除情報、結線情報から、グラフ内に構成される回路情報を記憶し、管理する。
【００８３】
経路探索機能部５は、指示入力受付機能部１からの、プラグイン生成あるいは削除指示、また、入出力ポートの結線指示に基づく起動依頼を受けて、後述する経路探索のアルゴリズムを、起動して実行する。この経路探索のアルゴリズムの実行の結果、定められたプラグインの逐次計算順序（信号処理順序）の情報を、信号処理順序管理機能部６に送る。信号処理順序管理機能部６は、前述の図７に示したプラグイン生成・保持部７０６に、当該信号処理順序の順番でプラグインの識別情報を並べて保持するようにする。
【００８４】
信号処理実行機能部７は、図１に示すように、データ受け渡し処理部７１と、信号処理関数呼出部７２と、信号処理時刻管理部７３と、信号処理同期管理部７４とを備えている。
【００８５】
信号処理実行機能部７は、指示入力受付機能部１を通じて入力される信号処理開始指示に基づいて、グラフ内に構成された回路による信号処理を開始する。ユーザが、グラフ７００の信号処理関数のコールを指示すると、信号処理関数呼出部７２が、信号処理関数格納部８から指示されたグラフの信号処理関数を読み出す。信号処理関数呼出部７２は、グラフの信号処理関数は、ユーザ指示により読み出しを行なうが、グラフ内の各プラグインの信号処理関数は、前記グラフの信号処理関数内から順に、それぞれのプラグインの信号処理関数を再帰的に呼び出す。
【００８６】
そして、信号処理実行機能部７のデータ受け渡し処理部７１は、回路構成情報格納管理機能部４の格納回路情報を参照し、回路構成に従って、この例では、音声データを順次にプラグインに渡してゆくようにする。
【００８７】
信号処理時刻管理部７３は、このデータ受け渡し処理部７１によるデータサンプル単位の時刻を管理する。信号処理同期管理部７４は、パケット単位の信号処理時のパケット同期処理（例えばパケットの先頭の管理）や、前述した音声データの処理タイミングを、映像データのフレームに同期させるＡＶ同期などを管理する。
【００８８】
経路探索機能部５は、信号処理実行機能部７による信号処理中であっても、指示入力受付部１からのグラフ内の回路構成の変更要求を受け付けて、変更された回路構成についての経路探索を実行し、その探索結果を回路構成情報格納管理機能部４および信号処理順序管理機能６に伝える。これにより、信号処理実行機能部７は、その後は、変更された回路構成において、変更後の経路探索結果に基づいた信号処理順序で信号処理が実行される。
【００８９】
ところで、前述したように、一般的なデジタル信号処理理論における「信号処理フローグラフ中のフィードバックループには必ず１つ以上の遅延素子を含む必要がある」という条件を満たすように、グラフ内に信号処理の回路構成が作成される必要がある。
【００９０】
しかし、ユーザがフィードバックループに遅延素子を含む必要があるという知識を持たない場合には、上述の条件を満足しない回路がグラフ内に作成されるおそれがある。経路探索機能部５は、このようにフィードバックループ内に遅延素子が含まれない回路がグラフ内に構成された場合には、後述するよう初期経路探索アルゴリズムにおいて、異常なケースの発生として、それを検知するようにする。そして、経路探索機能部５は、異常なケースの発生を検知したときには、エラー発生のエラー検知結果をエラー警告機能部９に送出する。
【００９１】
エラー警告機能部９は、経路探索機能部５からのエラー発生のエラー検知結果を受けて、フィードバックループ内に遅延素子が含まれない回路がグラフ内に構成されたと判別した場合には、例えば「遅延の無い閉ループは作れません」などの警告メッセージを、音声により放音したり、ディスプレイに表示したりして、ユーザに警告をするようにする。
【００９２】
ユーザは、この警告を受けて、自分が作成した回路のフィードバックループを検証し、適切な位置に遅延素子を追加挿入する修正操作をすることができる。
【００９３】
［グラフ構造を有する回路作成処理］
次に、この発明の実施形態による信号処理回路の作成処理の流れを、図８の回路構成をグラフ内に作成する場合を例にとって説明する。以下の説明においては、グラフやプラグインを総称してオブジェクトと呼ぶ。オブジェクトとは、オブジェクト指向におけるインスタンスを指し、グラフやプラグインの実体そのものである。
【００９４】
オブジェクト生成時の各グラフや各プラグインのデフォルト入出力ポート数（初期値）は下記の通りである。なお、ユーザは、オブジェクト生成後に入力ポートおよび／または出力ポートを追加又は削除することが可能である。
【００９５】
親グラフ８００：入力ポート数０、出力ポート数０
プラグイン８０１：入力ポート数０、出力ポート数１
プラグイン８０２：入力ポート数１、出力ポート数０
子グラフ８０３：入力ポート数１、出力ポート数１
プラグイン８０４：入力ポート数１、出力ポート数１
プラグイン８０５：入力ポート数２、出力ポート数２
プラグイン８０６：入力ポート数１、出力ポート数１
なお、以下の説明において、入力ポートおよび出力ポートの後の数字は、ポート番号であり、０，１，２が用いられている。
【００９６】
［回路作成手順］
次に、図８の回路の作成手順を、図９〜図１２のフローチャートを参照しながら説明する。なお、図９〜図１２は、説明の理解を容易にするため、ユーザの指示と、実施形態の信号処理装置における処理とを対応させて示したものである。図示は、省略したが、実施形態の信号処理装置は、表示画面に、ユーザの指示入力に応じた表示を行なってゆくものであり、ユーザは、その表示画面を見ながら操作入力をすることができるものである。
【００９７】
先ず、ユーザは、グラフ８００（親グラフ）のオブジェクトの作成指示をする（ユーザ指示（１））。すると、信号処理装置では、ルートオブジェクトとして、親グラフ８００を生成して、登録する（ステップＳ１０１）。
【００９８】
次に、ユーザは、グラフ８００のオブジェクトに対してプラグイン８０１オブジェクトの作成を指示する（ユーザ指示（２））。すると、信号処理装置では、作成されたグラフ８００のプラグイン生成削除機能により、グラフ８００内にプラグイン８０１が生成されて登録される（ステップＳ１０２）。グラフ８００内の経路探索機能部５は、このプラグインの生成指示に基づいて、経路探索を実行する（ステップＳ１０３）。
【００９９】
次に、ユーザは、グラフ８００のオブジェクトに対してプラグイン８０２オブジェクトの作成を指示する（ユーザ指示（３））。すると、信号処理装置では、グラフ８００のプラグイン生成削除機能により、グラフ８００内にプラグイン８０２が生成されて登録される（ステップＳ１０４）。グラフ８００内の経路探索機能部５は、このプラグインの生成指示に基づいて、経路探索を実行する（ステップＳ１０５）。
【０１００】
次に、ユーザは、グラフ８００のオブジェクトに対してグラフ８０３オブジェクト（子グラフ）の作成を指示する（ユーザ指示（４））。すると、グラフ８００では、プラグイン生成削除機能により、グラフ８００内に子グラフ８０３をプラグインとして生成して登録する（ステップＳ１０６）。グラフ８００内の経路探索機能部５は、このプラグインの生成指示に基づいて、経路探索を実行する（ステップＳ１０７）。
【０１０１】
次に、ユーザは、グラフ８０３のオブジェクトに対して入力ポート０（外）の作成を指示する（ユーザ指示（５））。すると、信号処理装置では、生成された子グラフ８０３の機能として、入力ポート０（外）が生成され、子グラフ８０３内に登録される（ステップＳ１１１）。そして、子グラフ８０３では、入力ポート０（外）に対応する内部の出力ポート０（内）を自動的に生成する（ステップＳ１１２）。そして、子グラフ８０３内の経路探索機能部５は、このポート作成指示に基づいて、経路探索を実行する（ステップＳ１１３）。
【０１０２】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、出力ポート０（外）の作成を指示する（ユーザ指示（６））。すると、信号処理装置では、生成された子グラフ８０３の機能として、出力ポート０（外）が生成され、子グラフ８０３内に登録される（ステップＳ１１４）。そして、子グラフ８０３では、出力ポート０（外）に対応する内部の入力ポート０（内）を自動的に生成する（ステップＳ１１５）。そして、子グラフ８０３内の経路探索機能部５は、このポート作成指示に基づいて、経路探索を実行する（ステップＳ１１６）。
【０１０３】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、プラグイン８０４オブジェクトの作成を指示する（ユーザ指示（７））。すると、子グラフ８０３のプラグイン生成削除機能により、子グラフ８０３内にプラグイン８０４が生成されて登録される（ステップＳ１１７）。子グラフ８０３内の経路探索機能部５は、このプラグインの生成指示に基づいて、経路探索を実行する（ステップＳ１１８）。
【０１０４】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、プラグイン８０５オブジェクトの作成を指示する（ユーザ指示（８））。すると、子グラフ８０３のプラグイン生成削除機能により、子グラフ８０３内にプラグイン８０５が生成されて登録される（ステップＳ１１９）。子グラフ８０３内の経路探索機能部５は、このプラグインの生成指示に基づいて、経路探索を実行する（ステップＳ１２０）。
【０１０５】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、プラグイン８０６オブジェクトの作成を指示する（ユーザ指示（９））。すると、子グラフ８０３のプラグイン生成削除機能により、子グラフ８０３内にプラグイン８０６が生成されて登録される（ステップＳ１３１）。子グラフ８０３内の経路探索機能部５は、このプラグインの生成指示に基づいて、経路探索を実行する（ステップＳ１３２）。
【０１０６】
次に、ユーザは、グラフ８００のオブジェクトに対して、プラグイン８０１の出力ポート０と子グラフ８０３の入力ポート０（外）の結線を指示する（ユーザ指示（１０））。すると、グラフ８００では、プラグイン間接続処理機能部３により、プラグイン８０１の出力ポート０と、子グラフ８０３の入力ポート０（外）とを結線して、当該グラフ８００内に登録する（ステップＳ１３３）。グラフ８００内の経路探索機能部５は、ポート接続指示に基づいて、経路探索を実行する（ステップＳ１３４）。
【０１０７】
次に、ユーザは、グラフ８００のオブジェクトに対して、子グラフ８０３の出力ポート０（外）とプラグイン８０２の入力ポート０の結線を指示する（ユーザ指示（１１））。すると、グラフ８００では、プラグイン間接続処理機能部３により、子グラフ８０３の出力ポート０（外）と、プラグイン８０２の入力ポート０とを結線して、当該グラフ８００内に登録する（ステップＳ１３５）。グラフ８００内の経路探索機能部５は、ポート接続指示に基づいて、経路探索を実行する（ステップＳ１３６）。
【０１０８】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、子グラフ８０３の内部の出力ポート０（内）とプラグイン８０４の入力ポート０との結線を指示する（ユーザ指示（１２））。すると、子グラフ８０３では、プラグイン間接続処理機能部３により、子グラフ８０３の内部の出力ポート０（内）と、プラグイン８０４の入力ポート０とを結線して、当該子グラフ８０３内に登録する（ステップＳ１３７）。子グラフ８０３内の経路探索機能部５は、ポート接続指示に基づいて、経路探索を実行する（ステップＳ１３８）。
【０１０９】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、プラグイン８０４の出力ポート０とプラグイン８０５の入力ポート０との結線を指示する（ユーザ指示（１３））。すると、子グラフ８０３では、プラグイン間接続処理機能部３により、プラグイン８０４の出力ポート０とプラグイン８０５の入力ポート０とを結線して、当該子グラフ８０３内に登録する（ステップＳ１４１）。子グラフ８０３内の経路探索機能部３は、ポート接続指示に基づいて、経路探索を実行する（ステップＳ１４２）。
【０１１０】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、プラグイン８０５の出力ポート１とプラグイン８０６の入力ポート０との結線を指示する（ユーザ指示（１４））。すると、子グラフ８０３では、プラグイン間接続処理機能部３により、プラグイン８０５の出力ポート１とプラグイン８０６の入力ポート０とを結線して、当該子グラフ８０３内に登録する（ステップＳ１４３）。子グラフ８０３内の経路探索機能部５は、ポート接続指示に基づいて、経路探索を実行する（ステップＳ１４４）。
【０１１１】
次に、ユーザは、子グラフ８０３のオブジェクトに対して、プラグイン８０６の出力ポート０とプラグイン８０５の入力ポート１との結線を指示する（ユーザ指示（１５））。すると、子グラフ８０３では、プラグイン間接続処理機能部３により、プラグイン８０６の出力ポート０とプラグイン８０５の入力ポート１とを結線して、当該子グラフ８０３内に登録する（ステップＳ１４５）。子グラフ８０３内の経路探索機能部５は、ポート接続指示に基づいて、経路探索を実行する（ステップＳ１４６）。
【０１１２】
ここで、プラグイン８０６が遅延を含まないプラグインであるときには、前述したようにして、経路探索機能部５の経路探索の結果として、エラー発生のエラー検知結果が得られ、エラー警告機能部９により、ユーザに対してエラーメッセージによる警告が発せられる。これを受けたユーザは、フィードバックループ内のプラグイン８０６の前段あるいは後段に遅延素子を挿入することで、エラーが発生しない状態になる。
【０１１３】
なお、プラグイン８０６が遅延を含むプラグインであるときには、エラー発生のエラー検知結果は得られず、エラー発生の警告も発生しないのは言うまでもない。
【０１１４】
最後に、ユーザは、子グラフ８０３のオブジェクトに対して、プラグイン８０５の出力ポート０と子グラフ８０３の内部の入力ポート０（内）との結線を指示する（ユーザ指示（１６））。すると、子グラフ８０３では、プラグイン間接続処理機能部３より、プラグイン８０５の出力ポート０と子グラフ８０３の内部の入力ポート０（内）とを結線して、当該子グラフ８０３内に登録する（ステップＳ１４７）。子グラフ８０３内の経路探索機能部５は、ポート接続指示に基づいて、経路探索を実行する（ステップＳ１４８）。
【０１１５】
以上の手順により、図８の回路が、グラフ８００内に構成される。そして、ユーザが、グラフ８００に対して、信号処理開始の指示をすると、前述したようにして、経路探索により定められた信号処理順序に従って、各プラグインでの信号処理が逐次実行される。
【０１１６】
上述したように、この実施形態の信号処理装置においては、ユーザの、上述の例の場合の合計１６手順は、グラフオブジェクトに対する操作であるので、当該操作の度に回路のグラフ構造が変化するため、各手順毎に経路探索アルゴリズムが、システム（グラフ）により自動的に実行される。そして、回路構成の生成処理が完了したときには、経路探索も完了して、信号処理順序も定まった状態となる。
【０１１７】
次に、図８の例で作成した回路の信号処理実行の流れを説明する。
【０１１８】
グラフ８００内のプラグイン生成・保持部には、経路探索アルゴリズムにより、最適な逐次計算順序でソートされた状態でプラグインが保持されている。図８の例において、既に最適な順番でプラグインが保持されているものと仮定して、以下に信号処理実行の流れを説明する。
【０１１９】
（１） ユーザは、先ず、グラフ８００に対して信号処理の開始を指示する。
【０１２０】
（２） すると、グラフ８００の信号処理関数が実行される。
【０１２１】
（３）次に、グラフ８００の信号処理関数内からプラグイン８０１の信号処理関数が実行される。
【０１２２】
（４）次に、グラフ８００の信号処理関数内から子グラフ８０３の信号処理関数が実行される。
【０１２３】
（４−１）次に、子グラフ８０３の信号処理関数内からプラグイン８０６の信号処理関数が実行される。
【０１２４】
（４−２）次に、子グラフ８０３の信号処理関数内からプラグイン８０４の信号処理関数が実行される。
【０１２５】
（４−３）次に、子グラフ８０３の信号処理関数内からプラグイン８０５の信号処理関数が実行される。
【０１２６】
（５）次に、グラフ８００の信号処理関数内からプラグイン８０２の信号処理関数が実行される。
【０１２７】
上記の手順において、最初のグラフ８００に対する信号処理の開始指示の手順（１）のみが、ユーザの指示によるものであり、その後の手順（２）〜（５）は、グラフ８００および子グラフ８０３により自動的に実行されるものである。
【０１２８】
なお、各プラグインの信号処理関数内では、下記の動作が行なわれる。  
（１）入力ポートから入力データを受け取る。  
（２）入力データに対して信号処理を施す。  
（３）信号処理した入力データを出力ポートへ出力する。
【０１２９】
［実施形態の経路探索アルゴリズム］
次に、この実施形態において、グラフの処理機能とされている経路探索アルゴリズムについて説明する。
【０１３０】
以下に説明する経路探索アルゴリズムは、実施形態のシステムの要部を構成するものであり、この経路探索アルゴリズムにより、グラフが内包するプラグインが、最適な順序にソーティングされる。信号処理時は、このソーティングされた順序で、各プラグインが持つ固有の信号処理関数が逐次的に呼び出され実行される。
【０１３１】
一般に、信号処理をＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）等の信号処理デバイスで行なう場合、ＤＳＰ内部のＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ）等の演算回路部において逐次的に計算処理を行なうことで、所望の信号処理を実現している。このＤＳＰ等による逐次処理方法は、この実施形態のミドルウエアのＣＰＵによる演算についても同様である。
【０１３２】
すなわち、この実施形態では、与えられた回路をシグナルフローグラフと見なし、そのグラフから逐次計算順序を探索し、探索結果に基づいた順序で、逐次的に計算処理を行なうようにする。この実施形態のミドルウエアであるＳＳＰは、この独自の経路探索アルゴリズムを有していることをも特徴としている。
【０１３３】
この経路探索アルゴリズムを用いることで、フィードバックループを含む任意のデジタル回路構成を、完全にエミュレートすることができる。また、現実のハードウエア回路の世界では不可能な動的な回路構成の変更が実現できる。
【０１３４】
この実施形態において、この経路探索アルゴリズムは、グラフ状に結線されたプラグインからなる回路の信号処理を実現するために、どのプラグインから順番に信号処理すれば良いかという逐次計算順序を求めるアルゴリズムである。ここで、経路探索の対象となる、グラフ内に構成される回路は、フィードバックループ状の回路構成を含んでいても良い。
【０１３５】
この経路探索アルゴリズムは、グラフが保持しており、グラフの中のプラグイン生成・保持部が、この経路探索アルゴリズムを実行する。
【０１３６】
ユーザから、グラフに対して、グラフ構造を変更する操作が行なわれた場合に、グラフ自身が自動的に経路探索を実行し、新たな逐次計算順序を求める。回路内に複数のグラフが存在している場合には、経路探索は、各グラフ単位で独立して行なわれ、変更があったグラフのみ経路探索が実行される。この経路探索は、非常にシンプルであるため、短時間で完了する。
【０１３７】
この実施形態の経路探索アルゴリズムの詳細を以下に説明する。
【０１３８】
この実施形態の経路探索アルゴリズムでは、グラフ状に形成されている回路の要素であるプラグインをノードと見なす。ノードとは、グラフ理論における節となる要素のことである。この実施形態では、回路は、ノード間が方向をもつ矢印で結合される有向線分グラフで表現することができる。ノードへ向かう矢印をノードへの入力、ノードから外へ向かう矢印をノードからの出力と定義する。この実施形態の経路探索アルゴリズムは、グラフ状に結線されたノードを順に巡って、信号順序を定めてゆく。以下、この実施形態の経路探索アルゴリズムをノードスキャンアルゴリズムと称する。
【０１３９】
このノードスキャンアルゴリズムは、経路探索のベースとなる初期経路探索アルゴリズム（プライマリーノードスキャンアルゴリズム）と、経路のループ情報を加味する探索を行なうループサーチアルゴリズムとからなる。
【０１４０】
そして、この実施形態においては、図１３に示すように、ノードスキャンアルゴリズムにおいては、先ず、初期経路探索アルゴリズムを行なう（ステップＳ１５１）。そして、初期経路探索アルゴリズムを終了したか否か判別し（ステップＳ１５２）、初期経路探索アルゴリズムを正常に終了したと判別したときには、ループサーチアルゴリズムを実行するようにする（ステップＳ１５３）。そして、この経路探索アルゴリズムを終了する。
【０１４１】
また、ステップＳ１５２で、初期経路探索アルゴリズムが終了していないと判別したときには、前述したように、また、後で詳細に説明するようにして、フィードバックループ内に遅延を含まないプラグインが挿入されてしまったことによるエラーの発生によって、初期経路探索アルゴリズムを中止終了したか否か判別する（ステップＳ１５４）。
【０１４２】
ステップＳ１５４で、初期経路探索アルゴリズムは中止終了されていないと判別したときには、ステップＳ１５１に戻り、初期経路探索アルゴリズムを継続する。また、ステップＳ１５４で、初期経路探索アルゴリズムは中止終了されたと判別したときには、そのまま、この経路探索アルゴリズムを終了する。
【０１４３】
［初期経路探索アルゴリズムについて］
この初期経路探索アルゴリズムは、次のような「解決すべき命題」を設定し、後述のような「探索条件」の下で、行なうものである。
【０１４４】
「解決すべき命題」
グラフ状に結線されたノードを順に辿ることを想定する。１回の巡回かつ下記条件の下で、全てのノードを一度に通過したい。それが可能となる巡回順序を求めよ。但し、巡回するノード間がグラフで直接結線されている必要は無く、ノードを飛び飛びに巡回しても構わない。
【０１４５】
「探索条件」
（ａ）入力の無いノードは無条件で通過することができる。  
（ｂ）遅延素子となるプラグインのノードは、無条件で通過することができる。  
（ｃ）通過したノードは出力が確定する。  
（ｄ）ノードＡの入力に接続されている前段のノードＢの出力が確定すると、ノードＡの入力が確定する。  
（ｅ）ノードの全入力が確定するとそのノードを通過することができる。
【０１４６】
なお、ノードの識別子として予め順番に固有番号が割り当てられている。この番号をノードナンバー（ノードＮｏ．）と呼ぶ。これは任意の番号で良く、例えばプラグインのオブジェクトの生成順にノードナンバーを割り当てておけば良い。なお、プラグインには、ＬＴＰ（Ｌａｔｅｎｃｙ  Ｔｙｐｅ  Ｐｌｕｇｉｎ）と、ＮＬＴＰ（Ｎｏｎ  Ｌａｔｅｎｃｙ  Ｔｙｐｅ  Ｐｌｕｇｉｎ）との種類のタイプがある。ＬＴＰは、遅延素子となるプラグインであり、１サンプル以上の遅延が発生する。ＮＬＴＰは、ゲート素子となるプラグインであって、遅延は発生しない。
【０１４７】
初期経路探索アルゴリズムにおいては、２巡目、３巡目と繰り返しながら、前記命題の解が求まるまで、ノードのチェックを行なうが、各１巡の探索において、通過可能なノードが必ず一つは見つかるという性質がある。
【０１４８】
但し、一つだけ例外がある。フィードバックループ内に遅延素子であるＬＴＰが含まれない場合は、１巡の探索において、通過可能なノードをただ一つも見つけることができない。これは、回路構成上、異常なケースである。
【０１４９】
一般的なデジタル信号処理理論では、因果律を満たすために、フィードバックループ内に必ず一つ以上の遅延素子を含む必要がある。この実施形態における初期経路探索アルゴリズムでは、ユーザが、この基本原則を守らない回路を作成した場合は、上記例外が発生するという性質がある。
【０１５０】
そこで、この実施形態の初期経路探索アルゴリズムにおいては、この例外発生をエラー警告に利用することができる。すなわち、ユーザが遅延素子を含まないフィードバック回路を作成した場合には、初期経路探索アルゴリズムにおいて、上述のような経路探索の例外発生が生じるので、その場合を検出したときには、回路を再構成するよう、システムからユーザに警告を発するようにする。
【０１５１】
以上の初期経路探索アルゴリズムは、図１４のフローチャートにより実行できる。
【０１５２】
先ず、最初のノードをチェックし（ステップＳ１６１）、当該ノードに対してノード順序番号（以下、ノードインデックスと呼ぶ）が付与済みであるかどうか判別する（ステップＳ１６２）。付与済みであれば、全てのノードにノードインデックスが付与されているか否か判別し（ステップＳ１６９）、全てのノードにノードインデックスが付与されていると判別したときには、この処理ルーチンを終了する。
【０１５３】
また、ステップＳ１６９で、全てのノードには、ノードインデックスを付与してはいないと判別したときには、次のノードをチェックし（ステップＳ１６５）、その後、ステップＳ１６２に戻り、ステップＳ１６２以降を繰り返す。
【０１５４】
ステップＳ１６２で、ノードインデックスが付与済みではないと判別したときには、無条件で通過できるノードか否か、つまり、プラグインがＬＴＰであるか否か判別する（ステップＳ１６３）。
【０１５５】
このステップＳ１６３で、無条件で通過できるノードではないと判別したときには、そのノードの全ての入力が確定しているか否か判別する（ステップＳ１６４）。このステップＳ１６４で、全ての入力は確定していないと判別したときには、経路探索が一巡したか否か判別する（ステップＳ１６５）。
【０１５６】
このステップＳ１６５で、経路探索が一巡してはいないと判別したときには、次のノードをチェックし（ステップＳ１７３）、その後、ステップＳ１６２に戻り、ステップＳ１６２以降を繰り返す。
【０１５７】
また、ステップＳ１６５で、経路探索が一巡したと判別したときには、通過可能なノードを一つも見つけることができなかったかどうか判別する（ステップＳ１６６）。このステップＳ１６６で、通過可能なノードは見つけることができたと判別したときには、全てのノードにノードインデックスが付与されているか否か判別し（ステップＳ１７２）、ノードインデックスが付与されていないノードがあると判別したときには、次のノードをチェックし（ステップＳ１７３）、その後、ステップＳ１６２に戻り、ステップＳ１６２以降を繰り返す。また、ステップＳ１７２で、全てのノードにノードインデックスが付与されていると判別したときには、この処理ルーチンを終了する。
【０１５８】
また、このステップＳ１６６で、通過可能なノードは一つも見つけることができなかったと判別したときには、フィードバックループ内に遅延素子が含まれないことによるエラー発生のエラー検知出力を生成して送出する（ステップＳ１６７）。そして、初期経路探索アルゴリズムによる経路探索を中止し（ステップＳ１６８）、この処理ルーチンを終了する。
【０１５９】
また、ステップＳ１６３で、無条件で通過できるノードであると判別したとき、また、ステップＳ１６４で、そのノードの全入力が確定していると判別したときには、当該ノードを通過して当該ノードの出力を確定する（ステップＳ１６９）。そして、当該ノードが接続されているノードの入力を確定する（ステップＳ１７０）。そして、当該ノードに、ノードインデックスを付与する（ステップＳ１７１）。
【０１６０】
次に、全てのノードにノードインデックスが付与されているか否か判別し（ステップＳ１７２）、ノードインデックスが付与されていないノードがあると判別したときには、次のノードをチェックし（ステップＳ１７３）、その後、ステップＳ１６２に戻り、ステップＳ１６２以降を繰り返す。また、ステップＳ１７２で、全てのノードにノードインデックスが付与されていると判別したときには、この処理ルーチンを終了する。
【０１６１】
以上のようにして、フィードバックループ内に遅延素子が含まれないことによるエラー発生のエラー検知出力は、前述したように、エラー警告機能部９に供給される。このエラー発生のエラー検出出力を受けたエラー警告機能部９は、前述したようなエラー警告メッセージをユーザに対して報知する。
【０１６２】
すなわち、例えば図１５に示すように、プラグイン８０６として誤って非遅延素子（ＮＬＴＰ）であるプラグインを、破線で示すように接続して、フィードバックループを作成すると、図１５の噴出しで示すように、警告メッセージが画面表示される。
【０１６３】
ユーザは、このエラー警告メッセージに対応して、フィードバックループ内に遅延素子を挿入する、あるいは、フィードバックループ内のＮＬＴＰをＬＴＰに変更するなどの修正操作をするようにする。したがって、次の経路探索アルゴリズム実行のステップでは、エラー警告は発生しないようになる。
【０１６４】
以上のような初期経路探索アルゴリズムによるノードインデックスの付与の具体例を、図１６のフラグの回路構成の場合を例に説明する。図１６においては、対象となるノードは、ノードＮｏ．０〜Ｎｏ．６の７個である。ノードＮｏ．４とノードＮｏ．６はＬＴＰとする。この場合の初期経路探索アルゴリズムは、下記のようになる。すなわち、ノードＮｏ．０からノードＮｏ．６まで、順に下記のチェックを行なう。ノードＮｏ.０からノードＮｏ．６までを１巡として、全ノードが通過できるまで、下記のチェックを何巡でも繰り返す。
【０１６５】
（１）ノードＮｏ．０は、入力が無いので通過ＯＫ。よって、ノードＮｏ．０の出力（０）確定。
【０１６６】
（２）ノードＮｏ．１は、入力（１）が確定していないのでパス。
【０１６７】
（３）ノードＮｏ．２は、入力が無いので通過ＯＫ。よって、ノードＮｏ．２の出力（０）確定。
【０１６８】
（４）ノードＮｏ．３は、全ての入力（０，１，２）が確定していないのでパス。
【０１６９】
（５）ノードＮｏ．４は、ＬＴＰなので通過ＯＫ。よって、ノードＮｏ．４の出力（０）確定。
【０１７０】
（６）ノードＮｏ．５は、入力（０）が確定していないのでパス。
【０１７１】
（７）ノードＮｏ．６は、ＬＴＰなので通過ＯＫ。よって、ノードＮｏ．６の出力（０）確定。
【０１７２】
以上で、１巡目を終了する。次に、通過できずに出力の確定していないノードに対して、次のようにして、２巡目の探索を行なう。
【０１７３】
（１）ノードＮｏ．１は、全ての入力（０， １）が確定したので通過ＯＫ。よって、ノードＮｏ．１の出力（０）確定。
【０１７４】
（２）ノードＮｏ．３は、全ての入力（０，１，２）が確定したので通過ＯＫ。よって、ノードＮｏ．３の出力（０，１，２）確定。
【０１７５】
（３）ノードＮｏ．５は、入力（０）が確定したので通過ＯＫ。よって確定。
【０１７６】
以上のようにして、全てのノードを通過して出力が確定したので、以上で探索が完了となる。この場合、２巡目で探索が完了したことになる。
【０１７７】
［初期経路探索アルゴリズムによる探索結果］
上記の初期経路探索アルゴリズムの探索手順において、出力が確定した順にノードに番号を振って行くと、経路探索結果が求まる。この新たなノードの順序番号がノードインデックスである。図１６のグラフの回路構成例の場合の探索結果を図１７に示す。
【０１７８】
グラフ内では、プラグインはノードインデックス順に、プラグイン作成・保持部に格納されている。経路探索アルゴリズムが実行される毎に、プラグイン作成・保持部における、当該プラグインの格納順が更新される。信号処理時は、グラフがノードインデックス順に各プラグインの信号処理関数をコールすることで、所望の信号処理を実現している。
【０１７９】
なお、上述の説明においては、初期経路探索アルゴリズムの中でエラー検知出力を送出するようにしたが、初期経路探索アルゴリズムの中ではなく、図１３のフローチャートの経路探索アルゴリズムにおいて、初期経路探索アルゴリズムの中止終了を検知したときに、図１３の経路探索アルゴリズムの一部としてエラー検知出力を送出するようにしてもよい。
【０１８０】
［ループサーチアルゴリズムについて］
次に、ループサーチアルゴリズムについて説明する。これは信号処理実行時におけるＣＰＵ負荷の改善を提供するアルゴリズムである。信号処理のリアルタイム性を確保するには、重要な技術である。
【０１８１】
前記の初期経路探索アルゴリズムで求めた探索結果によっても、所望の回路の信号処理は実現できる。しかし、初期経路探索アルゴリズムで求めた探索結果では、フィードバックループを含む回路構成においては、必ずしも速度性能的には有利であるとは言えないという問題がある。
【０１８２】
フィードバックループを含む回路構成においては、「入力が確定しない状態で出力を確定することはできない」というデジタル信号処理理論における因果律を満たす必要がある。そのため、フィードバックループを含む回路においては、１サンプル単位で逐次的に各プラグインの信号処理を行なう必要がある。すなわち、１サンプル単位でプラグインに対し音声データの入出力及び信号処理を行なう必要があるということである。
【０１８３】
ここで、問題となるのは、信号処理する毎に発生する関数コールである。一般に、ソフトウエア処理において、関数コールはＣＰＵ負荷が高い（コスト高である）という性質がある。ソフトウエアのリアルタイム信号処理においては、この関数コール回数を１回でも少なくするということが、処理速度性能の向上につながる。そこで、関数コール回数を削減する方法が、処理速度性能の向上を考える場合に望まれる。
【０１８４】
関数コール回数を減らす一般的な手法としては、複数データサンプルを１単位とする、例えばパケット単位の処理が挙げられる。１サンプルづつ処理するのではなく、所定数の複数データサンプルをブロック化してまとめて一括処理する方法である。例えば、パケットサイズが１０２４サンプルの場合は、１０２４サンプルの音声データをまとめてブロック化して、１回の関数コールで処理する。こうすることにより、関数コールの回数を減らすことができる。
【０１８５】
しかしながら、回路にフィードバックループが含まれる場合は、上述したように、１サンプル単位で関数コールする必要がある。このため、パケット処理が行なえない。
【０１８６】
そこで、この実施形態の経路探索アルゴリズムでは、初期経路探索アルゴリズムの後に、以下に説明するループサーチアルゴリズムを行なうことにより、この問題を解決するものである。
【０１８７】
一般に、フィードバックループを含む回路において、ループを形成するノードは、回路全体の一部であることが多い。この実施形態におけるループサーチアルゴリズムは、この点を利用して、ループを構成するノードの群と、ループを構成しないノードの群とを、信号処理順序の上で、区分けして、ループを構成しないノードの群では、パケット処理を可能にすることにより、信号処理全体として、高速化を図るものである。
【０１８８】
例えば、図１６に示した回路構成の場合、ループを構成するノードは、ノードＮｏ．３、ノードＮｏ．４、ノードＮｏ．６、の３個であり、全体のノード数７個に対して半分以下である。
【０１８９】
そこで、ループを形成するノードのみ１サンプル単位で処理し、それ以外のノードをパケット単位で処理することにより、速度劣化を必要最小限に抑えることができる。全体の回路構成において、ループを形成するノードの割合が小さければ小さいほど、より効果的に速度劣化を抑えることができる。
【０１９０】
図１８に、このループサーチアルゴリズムの処理のフローチャートを示す。先ず、閉路探索アルゴリズムを用いて、ループを構成するノードを求める（ステップＳ１８１）。閉路探索アルゴリズムは、一般的なグラフ理論の閉路探索アルゴリズムを利用することができる。この一般的なグラフ理論の閉路探索アルゴリズムは周知であるので、ここでは、その詳細な説明は省略する。
【０１９１】
次に、初期経路探索アルゴリズムで定められた信号処理順序では、ループを構成するノードの間に、信号処理順序として、ループを構成しないノードが入っているかどうかをチェックする（ステップＳ１８２）。
【０１９２】
そして、ループを構成するノードの間に、信号処理順序として、ループを構成しないノードが入っていると判別したときには（ステップＳ１８３）、ループを構成しないノードを、ループを構成するノードの前となるように、信号処理順序を入れ換える（ステップＳ１８４）。つまり、ノードインデックスの振り直し行なう。
【０１９３】
ステップＳ１８３で、ループを構成するノードの間に、信号処理順序として、ループを構成しないノードが入っていないと判別したときには、そのまま、このループサーチアルゴリズムを終了する。
【０１９４】
このループサーチアルゴリズムを、図１６に示した回路構成の場合に適用した場合を例にとって、具体例を以下に説明する。
【０１９５】
図１６に示した回路構成について、初期経路探索アルゴリズムを実行した結果は、図１７に示した通りである。この図１７の探索結果について、閉路探索アルゴリズムの探索結果である、ループを構成するノード、つまり、ノードＮｏ．３、ノードＮｏ．４、ノードＮｏ．６を、斜線で付して示すと、図１９の左側のようになる。
【０１９６】
この図１９の左側の図から明らかなように、初期経路探索アルゴリズムの探索結果では、信号処理順序として、ループを構成するノードの間に、ループを構成しないノードであるノードＮｏ．１が存在することがわかる。そのため、このままの信号処理順序では、本来１サンプル単位で処理を行なう必要のないノードＮｏ．１も、１サンプル単位で処理を行なう必要がある。
【０１９７】
しかし、ループサーチアルゴリズムを適用したときには、前記ステップＳ１８４において、ループを構成しないノードは、ループを構成するノードの前となるように、信号処理順序を変更する。
【０１９８】
この場合に、信号処理順序が変更されても、初期経路探索アルゴリズムの解決命題を満たすことが必要である。そこで、ループサーチアルゴリズムにおいては、信号処理順序を変更するときには、変更後も初期経路探索アルゴリズムの解決命題を満たすかどうかのチェックを行なうようにしてもよいが、この例では、ループの先頭のノードよりも、ループを構成しないノードを前の信号処理順序となるように変更することにより、このようなチェックを不要としている。すなわち、上述の順序変更方法は信号処理の順序性を正しく保つという性質がある。
【０１９９】
図１６の例の場合であれば、ノードＮｏ．４とノードＮｏ．６とは、ＬＴＰであるので、入力が確定せずとも出力が確定すると言う性質を持っている。この性質を利用すると、ノードＮｏ．４とノードＮｏ．６は、ノードＮｏ．１より後の処理となっても構わない。
【０２００】
この例では、ループサーチアルゴリズムにより、図１９の右側に示すように、ループを構成しないノードであるノードＮｏ．１は、信号処理順序を３番にして、ループを構成するノードの先頭のノードＮｏ．４よりも前となるように、信号処理順序が変更される。
【０２０１】
このようにされると、ループを構成するノードは、図１９の右側において斜線を付して示すように、ひとまとめとされる。つまり、ループを構成するノード群は、信号処理順序として局所化されていることになる。
【０２０２】
この図１９の右側に示すような信号処理順序で信号処理を、以下のようにして、実行することにより関数コールを必要最小限に抑えることが可能である。
【０２０３】
すなわち、
（１）ノードインデックスが１番から３番のノードは、ループ外であるので、パケット単位で処理する。
【０２０４】
（２）ノードインデックスが４番から６番のノードは、ループ内であるので、１サンプル単位で処理する。
【０２０５】
（３）ノードインデックスが７番のノードは、ループ外であるので、パケット単位で処理する。
【０２０６】
以上のようにして信号処理を実行すれば、関数コールを少なくして、信号処理速度の劣化を防止することができる。次に、パケットサイズを１０２４サンプルとした場合の例を下記に挙げる。
【０２０７】
（１）ノードＮｏ．０に、１０２４サンプルのデータを渡し処理を実行する。（関数コール１回）
（２）ノードＮｏ．２に、１０２４サンプルのデータを渡し処理を実行する。（関数コール１回）
（３）ノードＮｏ．１に、１０２４サンプルのデータを渡し処理を実行する。（関数コール１回）
（４）下記操作（４−１）〜（４−３）を１０２４回繰り返す。（関数コール３×１０２４回）
（４−１）ノードＮｏ．４に、１サンプルのデータを渡し処理を実行する。（関数コール１回）
（４−２）ノードＮｏ．６に、１サンプルのデータを渡し処理を実行する。（関数コール１回）
（４−３）ノードＮｏ．３に、１サンプルのデータを渡し処理を実行する。（関数コール１回）
（５）ノードＮｏ．５に１０２４サンプルのデータを渡し処理を実行する。（関数コール１回）
したがって、以上の（１）〜（５）の信号処理によって、１０２４サンプル信号処理するために必要な関数コール回数の合計は、３０７６回となる。
【０２０８】
仮に、上述の例において、全てのノードを１サンプルづつ処理した場合の関数コール回数の合計は、７１６８回となる。よって、この実施形態のノードスキャンアルゴリズムを実行して、ループを構成するノード群を局所化させて、当該ノード群のみは１サンプルごとに関数コールを実行し、その他のループを構成しないノードは、パケット単位で一回関数コールするようにすることにより、上述の例の場合には、約５７％の関数コール数が削減されたことになる。
【０２０９】
なお、この実施形態のシステムでは、パケットサイズは、固定値ではなく動的にそのサイズを変更することが可能である。
【０２１０】
［動的な回路構成の変更処理］
この実施形態の信号処理装置では、前述したように、信号処理中であっても、ユーザからのグラフの変更指示に従い、グラフ構造を動的に変更することができる。そして、信号処理中であっても、再度、この実施形態の経路探索アルゴリズム（ノードスキャンアルゴリズム）を実行することで、回路構成の変更に対応できる。
【０２１１】
この機能により、例えば、実施形態の信号処理装置で処理されて出力された音声をユーザが聞きながらでも、実施形態の信号処理装置を新たな回路構成に変更することができる。このため、用途としてライブ演奏装置等に、この実施形態を活用できるというメリットがある。
【０２１２】
図２０に、この動的な変更処理のフローチャートを示す。このフローチャートの実行主体は、グラフである。
【０２１３】
まず、時刻ｔでの信号処理を行なう（ステップＳ１９１）。そして、信号処理中であっても、プラグイン生成あるいは削除指示や、入力ポート、出力ポートの生成あるいは結線指示など、グラフ変更要求があるか否か判別する（ステップＳ１９２）。
【０２１４】
そして、ステップＳ１９２で、グラフ変更要求があると判別したときには、グラフは、経路探索の再実行を行なうと共に、グラフの回路構成の再構成を行なう（ステップＳ１９３）。そして、次の時刻（ｔ＋１）での信号処理に移行する（ステップＳ１９４）。また、ステップＳ１９２で、グラフ変更要求がないと判別したときには、そのまま、次の時刻（ｔ＋１）での信号処理に移行する（ステップＳ１９４）。
【０２１５】
このステップＳ１９４以降は、ステップＳ１９２〜ステップＳ１９３と同様の処理を繰り返す（例えばステップＳ１９５〜１９６）。
【０２１６】
この動的な変更処理においても、ステップＳ１９３、ステップＳ１９６などにおける経路探索では、前述の図１３、図１４のフローチャートを用いた経路探索アルゴリズムが実行され、前述の例と同様にして、誤って、遅延の無いフィードバックループが追加された場合には、エラー警告がユーザに対して発せられる。
【０２１７】
したがって、ユーザは、このエラー警告に応じて遅延素子をフィードバックループに挿入したり、あるいは、プラグインをＮＬＴＰからＬＴＰに変更したりして、正しい回路を容易に作成することができる。
【０２１８】
［リアルタイム分散処理］
以上説明した実施形態の信号処理装置は、通常は、１台のコンピュータにより実現され、信号処理は、当該１台のコンピュータ上で処理される。この処理を、ネットワークを介して接続される複数台のコンピュータに拡張することで、リアルタイムにＣＰＵ負荷の分散処理が行なえる。
【０２１９】
この分散処理は、一般的なコンピューティング技術である分散オブジェクト技術を利用することで実現可能である。ＣＯＭ／ＤＣＯＭ（Ｃｏｍｐｏｎｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ／Ｄｉｓｔｒｉｂｕｔｅｄ  Ｃｏｍｐｏｎｅｎｔ  Ｏｂｊｅｃｔ  Ｍｏｄｅｌ）、ＣＯＲＢＡ（Ｃｏｍｍｏｎ  Ｏｂｊｅｃｔ  Ｒｅｑｕｅｓｔ  Ｂｒｏｋｅｒ  Ａｒｃｈｉｔｅｃｔｕｒｅ）と言う技術がそれに該当する。
【０２２０】
以下、主にＷｉｎｄｏｗｓ（登録商標）系のＯＳで用いられるＣＯＭ／ＤＣＯＭと言う技術を利用した場合の例を示す。まず、この実施形態のミドルウエアのプラグインのオブジェクトを、全てＣＯＭオブジェクトとして実装する。ここで、ＣＯＭオブジェクトとはオブジェクト指向におけるコンポーネントモデルであり、位置透過性を特徴とする。位置透過性とは、あたかも、例えばローカルコンピュータ上に、ＣＯＭオブジェクトを生成するかのごとく、リモートコンピュータ上にＣＯＭオブジェクトを生成できるという機能である。
【０２２１】
したがって、位置透過性を用いることにより、ローカルコンピュータ上、リモートコンピュータ上のいずれであるかを問わずに、同じ操作で、オブジェクトの生成が行なえる。これはＣＯＭオブジェクトであるプラグインのオブジェクトを、ネットワークを意識せずとも、複数のコンピュータ上に統一的に生成できるということである。プラグインの生成に限らず、その他の操作もローカルコンピュータ上、リモートコンピュータ上を問わずに、統一した操作性で実現できる。
【０２２２】
例えば、ローカルコンピュータ上に、音声入出力プラグインオブジェクトを配置し、リモートコンピュータ上に、エコープラグインオブジェクトを配置して、全体として一つの回路を構成することもできる。
【０２２３】
図２１に、リアルタイム分散処理される場合のグラフの構成例を示す。この図２１の例は、ネットワーク３０００を通じてローカルコンピュータ１０００とリモートコンピュータ２０００とが接続されている状況において、ルートグラフ２５００が定義されて、回路が作成される場合である。
【０２２４】
この図２１を参照して、この例の回路作成の流れを説明する。ユーザは、ローカルコンピュータ１０００のみで、回路作成する場合とほぼ同様にして、回路作成を行なう。リモートコンピュータ２０００を意識するのは、一部のみである。
【０２２５】
（１）ユーザが、グラフ２５００のオブジェクトを作成する。このグラフ２５００オブジェクトは、ローカルコンピュータ１０００に生成される。
【０２２６】
（２）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０１オブジェクトの作成を指示する。
【０２２７】
（３）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０２オブジェクトの作成を指示する。
【０２２８】
（４）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０３オブジェクトの作成を指示する。この場合、プラグイン生成関数に、リモートコンピュータ２０００の識別子を付与する。
【０２２９】
（５）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０４オブジェクトの作成を指示する。
【０２３０】
（６）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０１の出力ポート０とプラグイン２５０２の入力ポート０の結線を指示する。
【０２３１】
（７）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０２の出力ポート０とプラグイン２５０３の入力ポート０の結線を指示する。
【０２３２】
（８）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０３の出力ポート０とプラグイン２５０４の入力ポート０の結線を指示する。
【０２３３】
（９）ユーザが、グラフ２５００のオブジェクトに対して、プラグイン２５０４の出力ポート０とプラグイン２５０２の入力ポート１の結線を指示する。
【０２３４】
以上で回路が完成である。リモートコンピュータを意識する部分は手順（４）のみである。なお、信号処理の実行に関してもローカルコンピュータ１０００のみの場合と特に差異は無い。
【０２３５】
［第２の実施形態］
第２の実施形態は、基本的な構成は、第１の実施形態と同様である。違いは、この第２の実施形態では、遅延を含まないフィードバックループが生成された場合に、第１の実施形態では、エラー警告をユーザに対して発したのに対して、第２の実施形態では、エラー警告は発せずに、あるいは、エラー警告を発した上に、自動的に必要な遅延素子を、フィードバックループに挿入追加するようにする点である。
【０２３６】
そして、この第２の実施形態では、遅延素子を自動追加挿入するかどうかをプリセット設定することができると共に、遅延素子を自動追加挿入する時には、その遅延素子の遅延量と、当該遅延素子の追加挿入位置をプリセット設定することができるようにしている。
【０２３７】
図２２は、信号処理装置の第２の実施形態において、グラフが備える機能をブロック化して示したグラフの構成の機能ブロック図である。すなわち、グラフは、第１の実施形態と同様にして、指示入力受付機能部１と、プラグイン生成削除機能部２と、プラグイン間結線処理機能部３と、回路構成情報格納管理機能部４と、経路探索機能部５と、信号処理順序管理機能部６と、信号処理実行機能部７と、信号処理関数格納部８と、エラー警告機能部９とを備えると共に、プリセット機能部１０を備える。
【０２３８】
また、この第２の実施形態の経路探索機能部５は、図２２に示すように、自動遅延素子追加手段５１を機能手段として備えるものである。
【０２３９】
プリセット機能部１０は、ユーザによる「遅延素子を自動追加挿入するかどうかをプリセット設定」と、遅延素子を自動追加挿入するとした場合の、「遅延素子の遅延量のプリセット設定」と、「遅延素子の追加挿入位置のプリセット設定」とを受け付けて、保持する。
【０２４０】
経路探索機能部５の自動遅延素子追加手段５１は、経路探索機能部５で、遅延を含まないフィードバックループが生成されたことを検出したときに、当該フィードバックループ内に、プリセット機能部１０にプリセットされて保持されている遅延量を有する遅延素子を、同じくプリセットされて保持されている追加挿入位置に追加するようにする。
【０２４１】
図２３に、プリセット機能部１０におけるプリセット処理動作の一例のフローチャートを示す。すなわち、ユーザにより、プリセット設定機能が選択されると、グラフでは、プリセット機能部１０を起動する。
【０２４２】
プリセット機能部１０では、先ず、ユーザに対して、遅延のないフィードバックループが生成されたときに遅延素子を自動挿入追加する設定をするかどうかの問合せメッセージを送出する（ステップＳ２０１）。ユーザは、この問合せメッセージに対して、遅延素子を自動挿入追加するかどうかをプリセット設定する。
【０２４３】
そこで、プリセット機能部１０では、このユーザの設定入力を受け付けて（ステップＳ２０２）、遅延素子を自動挿入する設定かどうかを判別する（ステップＳ２０３）。このステップＳ２０３で、遅延素子を自動挿入するとは設定されなかったと判別したときには、プリセット機能部９は、このプリセット処理ルーチンを終了する。
【０２４４】
また、ステップＳ２０３で遅延素子を自動挿入すると設定された判別したときには、挿入される遅延素子の遅延量の設定入力を促すメッセージを送出する（ステップＳ２０４）。そして、ユーザによる当該遅延量の入力完了を待つ（ステップＳ２０５）。遅延量の入力はされずにプリセット中止の操作がなされたと判別したときには（ステップＳ２０６）、このプリセット処理ルーチンをそのまま終了する。
【０２４５】
ステップＳ２０５で、遅延量の入力が完了したと判別したときには、プリセット機能部１０は、追加挿入される遅延素子の遅延量として、設定された遅延量を設定するように保持する（ステップＳ２０７）。
【０２４６】
次に、プリセット機能部１０は、追加挿入される遅延素子の挿入位置の選択を促すメッセージを送出する（ステップＳ２０８）。このとき、挿入位置としては、フィードバックループ中のプラグイン（ＮＬＴＰ）の前方（出力側）と、後方（入力側）とが選択項目としてユーザに呈示される。
【０２４７】
これに対して、ユーザは遅延素子を、フィードバックループ中のプラグインの前方または後方の何れに挿入するかの追加挿入位置の選択入力をするので、プリセット機能部１０は、そのユーザの選択入力を監視する（ステップＳ２０９）。
【０２４８】
そして、遅延素子の追加挿入位置の選択入力を受け付けることなく、プリセットの中止操作がなされたか否か判別し（ステップＳ２１０）、プリセットの中止操作がなされたと判別したときには、このプリセット処理ルーチンを終了し、プリセットの中止操作がなされてはいないと判別したときには、ステップＳ２０９に戻り、遅延素子の追加挿入位置の選択入力を待ち受ける。
【０２４９】
ステップＳ２０９で、遅延素子の追加挿入位置の選択入力を受け付けたときには、プリセット機能部１０は、ユーザにより設定された遅延素子の追加挿入位置の設定情報を保持する（ステップＳ２１１）。そして、このプリセット処理ルーチンを終了する。
【０２５０】
次に、図２０の動的な変更処理におけるステップＳ１９３，Ｓ１９６などでの経路探索の再実行に、第２の実施形態を適用した場合のフローチャートを、図２４に示す。
【０２５１】
すなわち、経路探索機能部５は、先ず、初期経路探索アルゴリズムを行なう（ステップＳ２２１）。そして、初期経路探索アルゴリズムを終了したか否か判別し（ステップＳ２２２）、初期経路探索アルゴリズムを正常に終了したと判別したときには、ループサーチアルゴリズムを実行するようにする（ステップＳ２２３）。そして、この経路探索アルゴリズムを終了する。
【０２５２】
また、ステップＳ２２２で、初期経路探索アルゴリズムが終了していないと判別したときには、前述したように、遅延の無いフィードバックループが生成されてしまったことによるエラーが発生したかどうかを判別する（ステップＳ２２４）。
【０２５３】
このステップＳ２２４で、遅延の無いフィードバックループが生成されていないと判別したときには、ステップＳ２２１に戻り、初期経路探索アルゴリズムを継続する。また、ステップＳ２２４で、遅延の無いフィードバックループが生成されてしまったと判別したときには、遅延素子の自動追加挿入がプリセット設定されているか否か判別する（ステップＳ２２５）。
【０２５４】
このステップＳ２２５で、遅延素子の自動追加挿入がプリセット設定されてはいないと判別したときには、プラグインの追加処理（動的変更）をキャンセルして、ユーザにエラー警告メッセージを送出する（ステップＳ２２６）。そして、この経路探索の処理ルーチンを終了する。
【０２５５】
また、ステップＳ２２５で、遅延素子の自動追加挿入がプリセット設定されていると判別したときには、プリセット機能部１０に保持されているプリセット設定情報を参照し、自動追加挿入する遅延素子は、追加された遅延の無いプラグイン（ＮＬＴＰ）の前方に挿入するか否かを判別する（ステップＳ２２７）。
【０２５６】
このステップＳ２２７で、挿入位置が前方であると判別したときには、ユーザがフィードバックループを生成するように追加したプラグインの前方に、プリセットされた遅延量の遅延素子を挿入する（ステップＳ２２８）。また、このステップＳ２２７で、挿入位置が前方ではなく後方であると判別したときには、ユーザがフィードバックループを生成するように追加したプラグインの後方に、プリセットされた遅延量の遅延素子を挿入する（ステップＳ２２９）。
【０２５７】
ステップＳ２２８あるいはステップＳ２２９の後は、ステップＳ２２１に戻り、再度、初期経路探索アルゴリズムの実行を行なう。このとき、遅延素子がフィードバックループに自動的に追加挿入されたことにより、初期経路探索アルゴリズムは正常に終了するようになる。
【０２５８】
このときの遅延素子の追加挿入の具体的について説明する。例えば、図２５または図２６に示すように縦続接続された４個のプラグイン９０１〜９０４からなる回路において、ユーザが、動的変更の操作により、プラグイン９０３とプラグイン９０２との間に、新たなプラグインを接続してフィードバックループを生成した場合を考える。
【０２５９】
この場合に、フィードバックループ中に追加挿入したプラグイン９０５が、非遅延素子であるＮＬＴＰのプラグインであるときには、上述のように、遅延素子を自動的に追加挿入するようにプリセット設定がなされていると共に、当該遅延素子の挿入位置が前方であれば、図２５に示すように、プラグイン９０５の出力側に、遅延素子のプラグイン９０６が挿入される。この遅延素子のプラグイン９０６の遅延量は、プリセットされた遅延量であることは前述の通りである。
【０２６０】
また、遅延素子の挿入位置が後方であれば、図２６に示すように、プラグイン９０５の入力側に、遅延素子のプラグイン９０７が挿入される。
【０２６１】
なお、プラグインが追加接続されずにフィードバックループが形成された場合にも、同様に自動的に遅延素子のプラグイン９０８が、例えば図２７に示すように挿入される。
【０２６２】
この第２の実施形態によれば、音声信号処理をしながら迅速な回路の変更をしたい場合に、誤って遅延の無いフィードバックループを作成した場合でも自動的に遅延素子が挿入されることにより、初期の目的を達成することができる。
【０２６３】
例えば、ライブ演奏等に、この実施形態の信号処理ツールを使用する場合、音を出しながら曲に合わせて迅速な回路の変更を行ないたい場合がある。そのような状況において、ユーザが遅延素子を含まないフィードバック回路をたまたま作成してしまったとすると、回路変更を予定のタイミングで実施することが出来ず、ライブ演奏に支障を来たすことがあるが、上述の第２の実施形態によれば、そのような不具合が回避される。
【０２６４】
特に、フィードバックループ回路は、サウンドエフェクターやサウンドフィルター等で頻繁に使用される回路であり、ライブ演奏時などではどうしても追加操作一回で閉ループ回路を作成したい場合がある。例えば、曲の小節の切れ目に同期して一発で回路を変更したい場合がある。このような場合においても、上述した第２の実施形態によれば、曲に合わせて迅速な回路の変更をすることができるものである。
【０２６５】
なお、上述の第２の実施形態は、動的な回路変更の場合に適用したものであるが、第１の実施形態と同様に、始めから回路構成を実行するときにも同様に適用できることは勿論である。
【０２６６】
以上説明した第１および第２の実施形態によれば、以下のような効果も得られる。
【０２６７】
すなわち、上記の実施形態によれば、ソフトウエアディジタル信号処理において、信号処理回路を多段に結線しても処理遅延が増加しない回路を作成することができる。また、フィードバック構造を含む任意のデジタル信号処理回路を作成することができる。また、デジタル信号処理回路の回路構成を動的に変更することができる。この場合に、動的に更新可能な回路要素は、
・プラグインの追加・削除
・プラグイン間の結線状態
・プラグインの入出力ポートの追加・削除
・信号処理時のパケットサイズ・サンプリング周波数など、信号処理に関連するパラメータ
などである。
【０２６８】
また、この実施形態の信号処理装置のミドルウエアを組み込むことにより、回路構成を動的に変更可能な製品を作ることができる。
【０２６９】
また、作成した信号処理回路をファイルに保存することにより、後で、信号処理回路を復元することができる。さらに、そのファイルをやり取りすることにより、回路の交換や再利用が容易に行なえる。
【０２７０】
また、信号処理回路の中にフィードバックループを含む回路構成を含んでいても、信号処理関数の呼び出し回数を必要最小限に抑えることができる。その結果、リアルタイム信号処理実行に必要なCPU負荷を軽減することができる。
【０２７１】
また、ネットワークを使って、リアルタイムで分散処理を行なうことができる。ネットワーク上に存在する複数の回路をリアルタイムで同期して動作させることができる。
【０２７２】
なお、以上の実施形態では、プラグインや結線を追加したときに遅延を含まないフィードバックループが作成された場合について説明したが、現在の回路状態に対して、何らかの追加・削除・変更操作を行ない、結果的に遅延素子を含まないフィードバックループ回路が形成された場合にも、この発明は同様に適用可能である。
【０２７３】
なお、以上の実施形態は、音声信号処理にこの発明を適用した場合であるが、この発明が処理対象とする信号は、音声信号に限られるものでないことは言うまでもない。
【図面の簡単な説明】
【０２７４】
【図１】この発明による信号処理装置の実施形態の要部の機能ブロック図である。
【図２】この発明による信号処理装置の実施形態を説明するための図である。
【図３】この発明による信号処理装置の実施形態を説明するための図である。
【図４】この発明による信号処理装置の実施形態を説明するための図である。
【図５】この発明による信号処理装置の実施形態を説明するための図である。
【図６】この発明による信号処理装置の実施形態のプラグインの構成を説明するための図である。
【図７】この発明による信号処理装置の実施形態のグラフの構成を説明するための図である。
【図８】この発明による信号処理装置の実施形態における回路構成の一例を説明するための図である。
【図９】この発明による信号処理装置の実施形態における回路構成手順の例を説明するための図である。
【図１０】この発明による信号処理装置の実施形態における回路構成手順の例を説明するための図である。
【図１１】この発明による信号処理装置の実施形態における回路構成手順の例を説明するための図である。
【図１２】この発明による信号処理装置の実施形態における回路構成手順の例を説明するための図である。
【図１３】この発明による信号処理装置の実施形態における経路探索アルゴリズムを説明するためのフローチャートである。
【図１４】この発明による信号処理装置の実施形態における経路探索アルゴリズムの一部を構成する初期経路探索アルゴリズムを説明するためのフローチャートである。
【図１５】この発明による信号処理装置の第１の実施形態の要部を説明するための図である。
【図１６】この発明による信号処理装置の実施形態における経路探索アルゴリズムの一部を構成する初期経路探索アルゴリズムを説明するための図である。
【図１７】この発明による信号処理装置の実施形態における経路探索アルゴリズムの一部を構成する初期経路探索アルゴリズムの探索結果の例を示す図である。
【図１８】この発明による信号処理装置の実施形態における経路探索アルゴリズムの一部を構成するループサーチアルゴリズムを説明するためのフローチャートである。
【図１９】この発明による信号処理装置の実施形態における経路探索アルゴリズムの一部を構成するループサーチアルゴリズムを説明するための図である。
【図２０】この発明による信号処理装置の実施形態における回路構成の動的変更処理を説明するためのフローチャートである。
【図２１】この発明による信号処理装置の実施形態におけるリアルタイム分散処理を説明するための図である。
【図２２】この発明による信号処理装置の第２の実施形態の要部の機能ブロック図である。
【図２３】図２２の第２の実施形態における要部の処理動作の例を説明するためのフローチャートである。
【図２４】図２２の第２の実施形態における要部の処理動作の例を説明するためのフローチャートである。
【図２５】図２２の第２の実施形態における要部の処理動作を説明するための図である。
【図２６】図２２の第２の実施形態における要部の処理動作を説明するための図である。
【図２７】図２２の第２の実施形態における要部の処理動作を説明するための図である。
【符号の説明】
【０２７５】
１…指示入力受付機能部、２…プラグイン生成削除機能部、３…プラグイン間結線処理機能部、４…回路構成情報格納管理機能部、５…経路探索機能部、６…信号処理順序管理機能部、７…信号処理実行機能部、８…信号処理関数格納部、９…エラー警告機能部、１０…プリセット機能部
【図１】
2006201988.tif 000003
【図２】
2006201988.tif 000004
【図３】
2006201988.tif 000005
【図４】
2006201988.tif 000006
【図５】
2006201988.tif 000007
【図６】
2006201988.tif 000008
【図７】
2006201988.tif 000009
【図８】
2006201988.tif 000010
【図９】
2006201988.tif 000011
【図１０】
2006201988.tif 000012
【図１１】
2006201988.tif 000013
【図１２】
2006201988.tif 000014
【図１３】
2006201988.tif 000015
【図１４】
2006201988.tif 000016
【図１５】
2006201988.tif 000017
【図１６】
2006201988.tif 000018
【図１７】
2006201988.tif 000019
【図１８】
2006201988.tif 000020
【図１９】
2006201988.tif 000021
【図２０】
2006201988.tif 000022
【図２１】
2006201988.tif 000023
【図２２】
2006201988.tif 000024
【図２３】
2006201988.tif 000025
【図２４】
2006201988.tif 000026
【図２５】
2006201988.tif 000027
【図２６】
2006201988.tif 000028
【図２７】
2006201988.tif 000029
【手続補正書】
【提出日】平成18年3月27日(2006.3.27)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個と、
前記信号処理ソフトウエアモジュールの生成または削除指示、および前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段と、
前記指示入力受付手段で受け付けられた指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する仮想接続手段と、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理手段と、
前記回路構成情報格納管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段と、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段と、
を備え、
前記経路探索手段は、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたかをチェックする
ことを特徴とする信号処理装置。
【請求項２】
請求項１に記載の信号処理装置において、
前記経路探索手段が、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断するとき、ユーザに対して警告を送出するようにする警告手段をさらに備えることを特徴とする信号処理装置。
【請求項３】
請求項１に記載の信号処理装置において、
前記経路探索手段は、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断するとき、前記フィードバックループに遅延素子を追加挿入する
ことを特徴とする信号処理装置。
【請求項４】
請求項３に記載の信号処理装置において、
前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断するとき、前記フィードバックループに遅延素子を自動的に追加挿入するかどうかのプリセット設定入力を受け付けるプリセット手段をさらに備え、
前記経路探索手段は、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断するとき、前記プリセット手段による前記プリセット設定入力を参照し、前記フィードバックループに遅延素子を自動的に追加挿入すると設定されているときに、前記フィードバックループに遅延素子を追加挿入する
ことを特徴とする信号処理装置。
【請求項５】
請求項３に記載の信号処理装置において、
前記追加挿入される前記遅延素子の遅延量として、予めプリセットされた値を保持する保持手段を備え、
前記遅延素子が含まれないフィードバックループが生成されたと判断するとき、前記フィードバックループ中に前記保持手段にプリセットされた遅延量の遅延素子を追加挿入することを特徴とする信号処理装置。
【請求項６】
請求項３に記載の信号処理装置において、
前記追加挿入される前記遅延素子の挿入位置として、予めプリセットされた位置の情報を保持する保持手段を備え、
前記遅延素子が含まれないフィードバックループが生成されたと判断するとき、前記フィードバックループ中の前記保持手段にプリセットされた位置に遅延素子を追加挿入することを特徴とする信号処理装置。
【請求項７】
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理方法であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの生成または削除指示、および前記複数個の信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける受付ステップと、
前記受付ステップで受け付けられた前記指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する仮想接続ステップと、
前記仮想的に接続された複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索ステップと、
前記経路探索ステップで決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理ステップと
を備え、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたかをチェックする
ことを特徴とする信号処理方法。
【請求項８】
請求項７に記載の信号処理方法において、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断されるとき、ユーザに対して警告を送出するようにする警告ステップをさらに備えることを特徴とする信号処理方法。
【請求項９】
請求項７に記載の信号処理方法において、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断されるとき、前記フィードバックループに遅延素子を追加挿入することを特徴とする信号処理方法。
【請求項１０】
請求項９に記載の信号処理方法において、
前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断するとき、前記フィードバックループに遅延素子を自動的に追加挿入するかどうかのプリセット設定入力を受け付けるプリセット設定ステップをさらに備え、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断するとき、前記プリセット設定ステップで受け付けられたプリセット設定入力を参照し、前記フィードバックループに遅延素子を自動的に追加挿入すると設定されているときに、前記フィードバックループに遅延素子を追加挿入する
ことを特徴とする信号処理方法。
【請求項１１】
複数の信号処理単位要素からなる信号処理をコンピュータがソフトウエア処理により行なうための信号処理プログラムであって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの生成または削除指示、および前記複数個の信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける受付ステップと、
前記受付ステップで受け付けられた指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する仮想接続ステップと、
前記仮想的に接続された複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索ステップと、
前記経路探索ステップで決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行ステップと、
を備え、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたかをチェックする
ことを特徴とする信号処理プログラム。
【請求項１２】
請求項１１に記載の信号処理プログラムにおいて、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断するとき、ユーザに対して警告を送出するようにする警告ステップをさらに備えることを特徴とする信号処理プログラム。
【請求項１３】
請求項１１に記載の信号処理プログラムにおいて、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断されるとき、前記フィードバックループに遅延素子を追加挿入する
ことを特徴とする信号処理プログラム。
【請求項１４】
請求項１３に記載の信号処理プログラムにおいて、
前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断されるとき、前記フィードバックループに遅延素子を自動的に追加挿入するかどうかのプリセット設定入力を受け付けるプリセット設定ステップをさらに備え、
前記経路探索ステップにおいて、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたと判断されるとき、前記プリセット設定ステップで受け付けられたプリセット設定入力を参照し、前記フィードバックループに遅延素子を自動的に追加挿入すると設定されているときに、前記フィードバックループに遅延素子を追加挿入する
ことを特徴とする信号処理プログラム。
【請求項１５】
請求項１１〜１４のいずれかの信号処理プログラムを記録したコンピュータ読取可能な記録媒体。
【手続補正３】
【補正対象書類名】明細書
【補正対象項目名】００２２
【補正方法】変更
【補正の内容】
【００２２】
上記課題を解決するために、請求項１の発明は、
複数の信号処理単位要素からなる信号処理をソフトウエア処理により行なう信号処理装置であって、
前記信号処理単位要素をソフトウエア処理によりそれぞれ行なう信号処理ソフトウエアモジュールの複数個と、
前記信号処理ソフトウエアモジュールの生成または削除指示、および前記信号処理ソフトウエアモジュールの入出力の接続指示を受け付ける指示入力受付手段と、
前記指示入力受付手段で受け付けられた指示に応じて複数個の前記信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を設定する仮想接続手段と、
前記設定された前記複数個の信号処理ソフトウエアモジュールの入出力の仮想的な接続状態を記憶して管理する回路構成情報記憶管理手段と、
前記回路構成情報格納管理手段に記憶されている前記複数個の信号処理ソフトウエアモジュールのそれぞれの信号処理順序を決定するために信号処理経路を探索する経路探索手段と、
前記経路探索手段での経路探索に基づいて決定された信号処理順序で、前記信号処理ソフトウエアモジュールのそれぞれを逐次的に実行させて前記信号処理を実行する信号処理実行手段と、
を備え、
前記経路探索手段は、前記複数個の信号処理ソフトウエアモジュールからなる構成回路中に、遅延素子が含まれないフィードバックループが生成されたかをチェックする
ことを特徴とする。
【手続補正４】
【補正対象書類名】明細書
【補正対象項目名】０１５２
【補正方法】変更
【補正の内容】
【０１５２】
先ず、最初のノードをチェックし（ステップＳ１６１）、当該ノードに対してノード順序番号（以下、ノードインデックスと呼ぶ）が付与済みであるかどうか判別する（ステップＳ１６２）。付与済みであれば、全てのノードにノードインデックスが付与されているか否か判別し（ステップＳ１７２）、全てのノードにノードインデックスが付与されていると判別したときには、この処理ルーチンを終了する。
【手続補正５】
【補正対象書類名】明細書
【補正対象項目名】０１５３
【補正方法】変更
【補正の内容】
【０１５３】
また、ステップＳ１７２で、全てのノードには、ノードインデックスを付与してはいないと判別したときには、次のノードをチェックし（ステップＳ１７３）、その後、ステップＳ１６２に戻り、ステップＳ１６２以降を繰り返す。
【手続補正６】
【補正対象書類名】図面
【補正対象項目名】図１４
【補正方法】変更
【補正の内容】
【図１４】
2006201988.tif 000030