Linux/ALSA で 2 つのアプリケーションが同じ (デジタル) サウンド入力を読み取るにはどうすればよいですか?

Linux/ALSA で 2 つのアプリケーションが同じ (デジタル) サウンド入力を読み取るにはどうすればよいですか?

AES/EBU 入力ポートを備えたサウンド カードがあり、2 つのアプリケーションで同時にアクセスしたいと考えています。入力をリアルタイムでリニア WAV ファイルに録音し、同時に IceCast でストリーミングしたいと考えています。両方のアプリケーションで同じ入力デバイスにアクセスしようとすると、デバイスにアクセスできないというメッセージが表示されます。これを実現するには、ALSA をどのように設定すればよいでしょうか。それとも、遅延を発生させる外部プログラムを介して中継する必要があるのでしょうか。

答え1

dsnoopプラグインを使用して、サンプル データを複数の仮想キャプチャ デバイスにコピーできます。

~/.asoundrcまたはに次のような内容を入力し/etc/asound.confsnooped_digital両方のアプリケーションでデバイス名として使用します。

pcm.snooped_digital {
    type dsnoop
    slave {
        pcm "hw:2,1"   # the actual device
        channels 2
        rate 48000
    }
}

関連情報