すべてのオーディオまたは特定のマイク/ソースに適用されるオーディオ フィルターを C++ でコーディングしたいとします。ubuntu ではどこから始めればよいでしょうか。
編集、明確にするために、これを行う方法と、Pulseaudio、ALSA、Gstreamerの役割がわかりません。
すべてのオーディオまたは特定のマイク/ソースに適用されるオーディオ フィルターを C++ でコーディングしたいとします。ubuntu ではどこから始めればよいでしょうか。
編集、明確にするために、これを行う方法と、Pulseaudio、ALSA、Gstreamerの役割がわかりません。
Alsaは、オーディオおよび MIDI ハードウェアにアクセスして制御するための API を提供します。ALSA の 1 つは一連のカーネル モード デバイス ドライバーであり、もう 1 つはアプリケーションがリンクするユーザー空間ライブラリです。Alsa は単一クライアントです。
PulseAudioは、複数のクライアント アプリケーションが単一のオーディオ インターフェイスにアクセスできるようにするフレームワークです (alsa は単一クライアントです)。これは、オーディオ インターフェイスを「所有」するデーモン プロセスを提供し、デーモンとそれを使用するアプリケーションとの間のオーディオの IPC トランスポートを提供します。これは、オープン ソースのデスクトップ環境で頻繁に使用されます。Pulse の使用は、アプリケーションに対してほとんど透過的です。アプリケーションは、オーディオのトランスポートとミキシングを備えた alsa API を使用して、オーディオの入力と出力にアクセスし続けます。また 、「プロ向け」のオーディオ アプリケーションを対象としたJackもあります。これは、おそらく少し間違った呼び方ですが、ここで意味するのは低レイテンシの音楽制作ツールです。
gStreamerは、シグナル グラフ パターンに基づく汎用マルチメディア フレームワークであり、コンポーネントには多数の入力ピンと出力ピンがあり、変換機能を提供します。これらのコンポーネントのグラフは、オーディオおよびビデオの入力または出力用の特別なノードを使用して、メディアのデコードなどの操作を実装するために構築されます。コンセプトは CoreAudio や DirectShow と似ています。 VLCとlibAVはどちらも、同様の方針で動作するオープン ソースの代替手段です。どちらを選択するかは、API スタイルと実装言語の問題です。特に、gStreamer は C で実装された OO API です。VLC は C++ です。
あなたが説明した問題を実装する明白な方法は、gStreamer/libAV/VLC コンポーネントを実装することです。オーディオを処理して別のアプリケーションにルーティングしたい場合は、Pulse または Jack を介してループバックすることで実現できます。
Alsa はプラグイン メカニズムを提供しますが、これを ALSA のドキュメントから実装するのは難しいと思います。
あなたが説明するタイプのエフェクトプラグインを構築するための事実上のアーキテクチャは、スタインバーグのVSTです。Linux で使用できるオープン ソースのホストとプラグインの例はたくさんあります。重要なのは、適切なドキュメントがあることです。gStreamer/libAV/VLC と同様に、オーディオをルーティングすることができます。
これらのうち、VST はおそらく最も簡単に入手できます。