如果我可以将音频发送到输出设备,那么我可以将相同的音频录制为波形。使用文件系统,您只需设置一个环回文件系统并将二进制数据写入文件而不是设备上。
我的问题是:我可以将音频信号发送到(例如)WAV 文件而不是我的音频设备吗?如何?
答案1
是的。
其实方法有很多。您可以设置一个声音虚拟声卡设备,您可以将数据从设备中取出......但这不是一种非常有用的格式。
对您来说更有用的是类似arecord
实用程序的东西,它允许您窃听 alsa 输出流并将其保存为几种已知格式。基本上,您可以通过 alsa 声音系统播放的任何内容都可以复制到标准格式的声音文件。
答案2
如果您的系统,或者只是您想要记录的应用程序,将其输出定向到声音服务器,研究该声音服务器的录音可能性。例如,在 Ubuntu 上,官方声音服务器是脉冲音频,它带有parec
命令(来自pulseaudio-utils
包裹 安装pulseaudio-utils http://bit.ly/software-small)。您可能需要将输出转换parec
为可用的内容索克斯(乌班图:sox
安装 sox http://bit.ly/software-small)。
parec -r --rate=44100 | sox --type raw --rate 44100 - --type ogg recording.ogg
答案3
这是应该可以直接记录到 Audacity,但我无法在我的系统(Ubuntu 10.10)上使用它。所以按照说明进行操作这里从 Audacity wiki 中,我使用ALSA
播放设备将音频转移到文件中。
这使用一个.asoundrc
文件(在您的主目录中):
pcm.teeraw {
type empty
slave.pcm "tee:default,'/tmp/out.raw',raw"
# 48000 S16_LE 2ch (aplay -t raw -f dat)
}
为了从 Flash 录制(在 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
ALSA树中有一个环回驱动程序,aloop-kernel.c(通过这里);您必须自己构建它(并通过aplay
/等音频应用程序确定其作为设备的利用率arecord
)...