如何在 Raspbian 上录制音频输出?

如何在 Raspbian 上录制音频输出?

我在 Raspberry Pi 上运行了一些 Python 文件,这些文件会产生声音 (pygame)。我想在播放这些声音时录制它们。

这些是所列设备的输出arecord

pi@raspberrypi:~ $ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Loopback [Loopback], device 0: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7
card 1: Loopback [Loopback], device 1: Loopback PCM [Loopback PCM]
  Subdevices: 8/8
  Subdevice #0: subdevice #0
  Subdevice #1: subdevice #1
  Subdevice #2: subdevice #2
  Subdevice #3: subdevice #3
  Subdevice #4: subdevice #4
  Subdevice #5: subdevice #5
  Subdevice #6: subdevice #6
  Subdevice #7: subdevice #7

我尝试了几种录制播放声音的选项arecord,但无法捕捉系统声音。这根本就不可能,还是还有其他解决方案?

答案1

你没说,但假设你不使用 Pulseaudio。

ps axu | grep pulse

确保你真的未运行 Pulseaudio。如果运行,则以下操作将不起作用。

modprobe snd_bcm2835没有创建问题中显示的环回设备。因此,您在某个地方有一个modprobe snd-aloop,要么您创建了它然后忘记了它,要么它存在于某个配置中。

为了验证,请同时执行aplay -larecord -l,在两种情况下都应在卡 1 上显示两个设备。

现在让我们测试一下回送设备是否正常工作。找到一个大的 WAV 文件(例如“music.wav”),打开两个终端并执行

aplay -vv -D hw:1,0,0 music.wav

在一个终端,然后

arecord -vv -D hw:1,1,0 -f S16_LE -r 44100 -c 2 /dev/null

在另一个中。参数必须与您的 WAV 文件的格式相匹配。您应该看到 的 VU 表aplay与 的 VU 表同步移动arecord

最后,告诉你的 Python 程序将其用作hw:1,0,0声音输出设备,不管你的 Python 程序如何工作以及它们需要什么信息来实现这一点。

或者创建一个~/.asoundrc(每个 Linux 用户)或/etc/asound.conf(系统范围)并添加如下条目

pcm.!default { type hw card 1 } 
ctl.!default { type hw card 1 } 

假设snd-aloop始终将其加载到卡 1 中,并祈祷您的 Python 程序使用它default作为默认输出。

然后您可以按照上面所述从环回设备的另一端进行录制。

注意:这是一个虚拟的“声卡”,您不会听到通过此“卡”播放和录制的任何声音。如果您想同时收听和录制,我建议您运行 Pulseaudio,这样会容易得多。

相关内容