オーディオを出力デバイスに送信できる場合、同じオーディオをウェーブとして録音できます。ファイルシステムを使用すると、ループバックファイルシステムをセットアップして、デバイスではなくファイルにバイナリデータを書き込むことができます。
私の質問は、オーディオデバイスではなく(たとえば)WAVファイルにオーディオ信号を送信できますか?どうやって?
はい。
実際には多くの方法があります。デバイスからデータをリッピングするだけのサウンドダミーサウンドカードデバイスをセットアップできますが、これはあまり有用な形式ではありません。
より便利なのは、arecord
ユーティリティのようなもので、alsa出力ストリームを盗聴して、いくつかの既知の形式に保存できます。基本的に、alsaサウンドシステムで再生できるものはすべて、標準形式のサウンドファイルにコピーできます。
システム、または記録したいアプリケーションだけがその出力を サウンドサーバー に送信している場合は、そのサウンドサーバーの記録の可能性を調べます。たとえば、Ubuntuでは、公式のサウンドサーバーは PulseAudio であり、 parec
コマンド( pulseaudio-utils
パッケージからpulseaudio-utils http:// bitからインストール.ly/software-small )。 parec
からの出力を SoX (Ubuntu: sox
sox 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
ALSAツリーにループバックドライバーがあります aloop-kernel.c (-- here を使用)。自分で構築する必要があります(そしてaplay
/arecord
のようなオーディオアプリケーションを介してデバイスとしての使用率を把握してください)...