web-dev-qa-db-ja.com

Linuxサウンドカードからの入力を2つの異なるアプリケーションにパイプできますか?

私はUbuntu16.04.3LTSシステムを持っています

  • aSUS Xonar DGXサウンドカード、および
  • 一般的なUSBサウンドカード。

私たちの教会では、サービスをブロードキャストしたり、WAVファイルとして記録したりできるようにしたいと考えています。これを実現するために、サウンドボードからの3.5mmオーディオ出力ケーブルをスプリッターに接続し、各サウンドカードの「ライン入力」コネクタに接続するケーブルが2本あるようにします。

次に、「arecord」を使用して一方のカードにオーディオを録音し、「darkice」を使用してもう一方のカードにMP3ストリームを作成します。

理想的には、1枚のサウンドカードで録音とストリーミングの両方を同時に処理できるようにしたいと思います。そのようなことは可能ですか?または、2つのアプリケーションで2つのサウンドカードを使用して立ち往生していますか?

2
David White

はい、それは簡単に可能です。あなたは本当にALSAだけを実行していますか、それともPulseaudio(基本的に何年もの間すべてのディストリビューションのデフォルト)も実行していますか?

Pulseaudioを使えば、箱から出してすぐに動作するはずです。

ALSAでは、plughwデバイス名の代わりにdsnoopデバイス名(内部でhwプラグを追加します)を使用していることを確認してください。 dsnoopプラグイン は、入力ストリームをさまざまなアプリケーションの複数のストリームに分割します。

編集

私が言ったように、-D hw:0など(ハードウェアアドレスに合わせて変更)の代わりに、arecordには-D plughw:0を使用し、darkiceのデバイス名にも同様に使用します。

条件は、他のプログラムがhw:0を直接使用しないことです。それらはすべてplughw:0を使用する必要があります。

dsnoopの詳細を実際に知る必要はありません。ALSAがこれを自動的に行います。 (しかし、私がリンクしたプラグインページで詳細を読むことができます)。

独自の~/.asoundrcを設定する必要はなく、構成ファイルを変更する必要もありません。

1
dirkt

私はdirktの答えを受け入れたので、ほとんどの方法でそこにたどり着きました。 dsnoopインターフェースを作成する必要があることがわかりました。

/etc/asound.conf

pcm.custom_snoop_card {
    type dsnoop
    ipc_key 420042
    ipc_key_add_uid 1
    slave {
        pcm "hw:0,0"   # the actual device
        format S16_LE
        channels 2
        rate 44100
    }
}

これで、darkice設定でdevice = custom_snoop_cardを指定し、同時にarecord -D custom_snoop_card -f S16_LE -c2 -r 44100 -vv myfile.wavでWAV録音を行うことができます。

0
David White