![Linux/ALSA で 2 つのアプリケーションが同じ (デジタル) サウンド入力を読み取るにはどうすればよいですか?](https://rvso.com/image/1447619/Linux%2FALSA%20%E3%81%A7%202%20%E3%81%A4%E3%81%AE%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%8C%E5%90%8C%E3%81%98%20(%E3%83%87%E3%82%B8%E3%82%BF%E3%83%AB)%20%E3%82%B5%E3%82%A6%E3%83%B3%E3%83%89%E5%85%A5%E5%8A%9B%E3%82%92%E8%AA%AD%E3%81%BF%E5%8F%96%E3%82%8B%E3%81%AB%E3%81%AF%E3%81%A9%E3%81%86%E3%81%99%E3%82%8C%E3%81%B0%E3%82%88%E3%81%84%E3%81%A7%E3%81%99%E3%81%8B%3F.png)
AES/EBU 入力ポートを備えたサウンド カードがあり、2 つのアプリケーションで同時にアクセスしたいと考えています。入力をリアルタイムでリニア WAV ファイルに録音し、同時に IceCast でストリーミングしたいと考えています。両方のアプリケーションで同じ入力デバイスにアクセスしようとすると、デバイスにアクセスできないというメッセージが表示されます。これを実現するには、ALSA をどのように設定すればよいでしょうか。それとも、遅延を発生させる外部プログラムを介して中継する必要があるのでしょうか。
答え1
dsnoop
プラグインを使用して、サンプル データを複数の仮想キャプチャ デバイスにコピーできます。
~/.asoundrc
またはに次のような内容を入力し/etc/asound.conf
、snooped_digital
両方のアプリケーションでデバイス名として使用します。
pcm.snooped_digital {
type dsnoop
slave {
pcm "hw:2,1" # the actual device
channels 2
rate 48000
}
}