0

1つのアプリケーションからオーディオを録音するMacOSX用のアプリケーションを開発したいと思います。

私はSoundflowerで遊んでいましたが、それは完全なシステムオーディオしか取得しません。
HALプラグインを使用する必要があることはわかっています。このプラグインは、Core Audioを使用するアプリケーションからロードされ、プラグインと通信してオーディオを取得できます。

私の質問は:そのようなプラグインはどのように見えるのですか?インターネット上に例はありますか?このトピックについては何も見つかりませんでした。

4

1 に答える 1

4

ココアインジェクションを使用することが問題の実行可能な解決策であると判断したので、そこから始めましょう。

あなたがする必要があるのは、アプリのObjCクラスがオーディオを再生するためにどのように設定されているかを調べ、デフォルトのシステムの代わりに別のAUを設定するためにフックすることです。

2つのオプションがあります(独自のカスタムAUを最初から作成する以外に、実行する必要はありません)。AUHALをAUとして使用し、AUHALからデータをキャプチャできます。これは、フックするという観点からは少し簡単ですが、レンダラーとオーディオを保存するコードを作成する必要があることを意味します。または、ファイルに保存するAUをフックすることもできます。これは、フックするのが少し難しいですが、一度フックすると、自動的にレンダリングが処理されます。

では、どのように物事をフックしますか?さて、高レベルのCA呼び出しのほとんどは、現在の出力に書き込むためだけに書き込まれます。アプリがそのように動作している場合は、起動時にフックして、代わりのAUを見つけ、デフォルトの代わりに現在の出力として設定する必要があります。一方、アプリが変数に格納するAUに直接書き込みを行う場合は、アプリをフックしてAUを変数として格納する必要があります。また、AUのグラフを作成している場合は、デフォルトの出力を置き換えるか、グラフの前に出力を貼り付けます。

ほとんどの可能性のほとんどのハードパーツのサンプルコードフラグメントについては、TN2091を参照してください。それらを組み合わせる方法は示されていません。また、出力よりも入力の設定について多くのことが説明されており(難しいため)、用語が混乱する可能性がありますが、注意深く読むと、必要な部品。

単純なAUホストとAUプラグインをまだ作成したことがない場合は、Audio UnitDevelopmentFundamentalsガイド全体をじっくりと検討する必要があります。(そして、単純なことをするために本当にすべてを知る必要がないと思うなら、あなたは間違っています。CoreAudioがハードである理由は理由の半分を説明します;OSXバージョン間の変更は理由の残りの半分です。 )。

また、CocoaDevのCoreAudioAndAudioUnitsTutorialページで、誰も書いたことのない完全なチュートリアルのプレースホルダーページを確認し、多くの便利なものへのリンクを確認することもできます。

一方、MTCoreAudioフレームワーク全体をアプリに注入することが可能な場合は、大量の優れた完全なサンプルが付属しています。実際、フレームワークを使用しない場合でも、概要のドキュメントと、場合によってはソースコードを読む価値があります。

于 2012-11-12T20:02:55.557 に答える