web-dev-qa-db-ja.com

ループバックオーディオデバイスをセットアップできますか?

オーディオを出力デバイスに送信できる場合、同じオーディオをウェーブとして録音できます。ファイルシステムを使用すると、ループバックファイルシステムをセットアップして、デバイスではなくファイルにバイナリデータを書き込むことができます。

私の質問は、オーディオデバイスではなく(たとえば)WAVファイルにオーディオ信号を送信できますか?どうやって?

16
D4RIO

はい。

実際には多くの方法があります。デバイスからデータをリッピングするだけのサウンドダミーサウンドカードデバイスをセットアップできますが、これはあまり有用な形式ではありません。

より便利なのは、arecordユーティリティのようなもので、alsa出力ストリームを盗聴して、いくつかの既知の形式に保存できます。基本的に、alsaサウンドシステムで再生できるものはすべて、標準形式のサウンドファイルにコピーできます。

Pulseオーディオにも同様のツールが存在します

11
Caleb

システム、または記録したいアプリケーションだけがその出力を サウンドサーバー に送信している場合は、そのサウンドサーバーの記録の可能性を調べます。たとえば、Ubuntuでは、公式のサウンドサーバーは PulseAudio であり、 parec コマンド( pulseaudio-utilsパッケージからpulseaudio-utils http:// bitからインストール.ly/software-small )。 parecからの出力を SoX (Ubuntu: soxsox http://bit.ly/software-small )をインストールします。

parec -r --rate=44100 | sox --type raw --rate 44100 - --type ogg recording.ogg

Audacityに直接録音できるのは想定ですが、それを私のシステム(Ubuntu 10.10)で動作させることができませんでした。 Audacity wikiの here の指示に従って、ALSA再生デバイスを使用してオーディオをファイルに転送します。

これは.asoundrcファイル(ホームディレクトリ内):

pcm.teeraw {
   type empty
   slave.pcm "tee:default,'/tmp/out.raw',raw"
   # 48000 S16_LE 2ch (aplay -t raw -f dat)
}

フラッシュからの記録(Firefoxの場合)には、

FLASH_ALSA_DEVICE=teeraw firefox

結果のファイル/tmp/out.rawは未加工の形式であるため、変換するには、適切なパラメーターを把握しておく必要があります。奇妙なことに、lameは自分でこれを解決できるようですが、soxはそれを明示的に知る必要があります。したがって、次のすべてが機能するようです:

aplay -t raw -f dat -r 44100 /tmp/out.raw # to play
sox -r 44100 -b 16 -e signed -c 2 /tmp/out.raw /tmp/out.wav # to convert to wav
lame /tmp/out.raw # to convert to mp3
4
Andrew Stacey

ALSAツリーにループバックドライバーがあります aloop-kernel.c (-- here を使用)。自分で構築する必要があります(そしてaplay/arecordのようなオーディオアプリケーションを介してデバイスとしての使用率を把握してください)...

0
sdaau