2012-01-09 2 views
1

私は、Javaでオーディオアーキテクチャを設計しています。私は知っていることを知っている、私はC + +を使用する必要があります...オーディオアーキテクチャを設計する

とにかく、私はCraig Lindleysの本でデジタルオーディオをjavaで読んでいます。彼は、デバイスがリンクリストで接続され、シンクデバイスがそのデバイスの直前にデバイスからデータを要求するプルアーキテクチャについて説明しています。そのデバイスは、同じインタフェース方法を呼び出して、そのデバイスより前のデータを取得します。方法は次のようなものです:

public int getSamples(byte[] data); 

私は他の人がこれをどう考えているのか見たいと思っています。 C++、java、何でも。プロツール、能力のある人、理由のようなもののアーキテクチャーについていくらか詳しく説明することができます。これらのシステムは、Lindleyが記述したものと同じように、より成熟したものの、「プルアーキテクチャ」に依存しています。

質問の広範な性質を許してください。

答えて

2

私はプッシュ&プルベースのオーディオアーキテクチャを見てきましたが、どちらもプロとコンプを持っています。

各フィルタがダウンストリームフィルタにデータをプッシュダウンするプッシュベースのシステムでは、サウンドカードが使用されているときにオーディオ処理ユニットのチェーンの最後にデータがあるようにプッシュ要求をタイミングするという概念が必要ですデータの準備が整いました。これは、通常、グラフのポンピングを行う外部クロックの形で行われます。 DirectShowはこのように動作します。

プルベースのシステムでは、サウンドカードからのI/O要求を使用してグラフをポンピングすることができます。これにより、デバイスでクロックが実行されます。このシステムでは、グラフ(データソース)の先頭にバッファリングが必要です。

プル/プッシュベースのシステムではなく、実行形式のアーキテクチャをお勧めします。どのように接続されているかを知っているAudioGraphオブジェクトによって管理される一連のオーディオ処理ユニット(APU)があるとします。これで、サウンドカードからのオーディオコールバックを使用し、オーディオ入力をAudioGraphに渡し、AudioGraphで各オーディオ処理ユニットを介して処理データを管理させることができます。これによりデータフローはI/O要求と完全に分離され、処理リクエストを並列化したり、リクエストの順番を処理するためにリクエスタを実行したりするなど、AudioGraphに許可されます。また、各APUは近隣のものAudioGraphレベルでのみ「接続」されています。これはOS XでのAudioUnitsの動作です。

+0

レコードの場合、CoreAudioはプルモデルを使用し、AudioUnitグラフは、オーディオユニットが連鎖される方法と、それらが呼び出される順序を大まかに抽象化します – yano

関連する問題