linux arecord:捕获声卡输出而不是麦克风输入

use*_*001 29 audio linux alsa audio-recording

我正在尝试使用以下命令捕获声卡输出并将其编码为 Vorbis ogg 格式:

arecord -f cd -t raw | oggenc - -r -o file.ogg
Run Code Online (Sandbox Code Playgroud)

但是,记录的是计算机的麦克风输入而不是声卡输出。

命令的输出arecord -l

**** List of CAPTURE Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: CONEXANT Analog [CONEXANT Analog]
  Subdevices: 1/1
  Subdevice #0: subdevice #0
Run Code Online (Sandbox Code Playgroud)

该命令的输出arecord -L包含在此pastebin 条目中

arecord手册页表明该输入设备可以使用被选择-D标志,但没有给出语法的例子。

我想知道如何arecord将麦克风的输入更改为声卡。我对 Audacity 等基于 GUI 的替代方案不感兴趣。谢谢。

编辑:我正在运行 Debian 7.0(稳定arecord版)和1.0.25vorbis-tools版、1.4.0版和 1.0.24版 ALSA 驱动程序。

小智 9

多年后,斗争仍在继续……如何指定录音设备,瞧:

?  ~ arecord -l                                                              
**** List of CAPTURE Hardware Devices ****                                   
card 0: PCH [HDA Intel PCH], device 0: CX20590 Analog [CX20590 Analog]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0                                                 
card 1: Device [USB PnP Sound Device], device 0: USB Audio [USB Audio]       
  Subdevices: 1/1                                                            
  Subdevice #0: subdevice #0     

?  ~ arecord -f S16_LE -r 44100 --device="hw:1,0" plik.wav                   
Recording WAVE 'plik.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono 
^C
Aborted by signal Interrupt...  
Run Code Online (Sandbox Code Playgroud)

所以设备字符串的格式是 hw:<card>,<device>

设备 ID 格式


hoc*_*chl 9

我遇到了同样的问题,并在这里找到了另一个解决方案。主要思想是使用pacat. 对我来说,它是这样工作的:

  1. 查找监控设备:

    name: <alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor>
    name: <alsa_output.pci-0000_00_1b.0.analog-stereo.monitor>
            alsa_output.pci-0000_01_00.1.hdmi-stereo.monitor/#0: Monitor of HDA NVidia Digital Stereo (HDMI)
            alsa_output.pci-0000_00_1b.0.analog-stereo.monitor/#2: Monitor of Built-in Audio Analog Stereo```
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将音频捕获到文件:

    $ pacat --record -d alsa_output.pci-0000_00_1b.0.analog-stereo.monitor > dump.raw

  3. 将文件转换为 WAV:

    $ sox -t raw -r 44100 -e signed-integer -L -b 16 -c 2 dump.raw output.wav

就是这样!

  • 请注意,您可以使用 `parec` 代替 `pacat --record`。您还可以避免使用 `sox` 并使用 `parec -d &lt;monitor&gt; --file-format=wav output.wav`。您可以使用 `parec --list-file-formats` 列出可用的文件格式。 (5认同)

小智 8

我建议使用 ALSA 环回驱动程序。加载它:

sudo modprobe snd-aloop
Run Code Online (Sandbox Code Playgroud)

这应该将一个新的捕获设备添加到arecord -L.

如果您的计算机中只有一个物理声卡,您可以通过.asoundrc在您的主文件夹中创建一个包含以下内容的文件,使环回声卡成为所有应用程序的默认声卡:

pcm.!default {
    type hw
    card 1
    device 0
}
Run Code Online (Sandbox Code Playgroud)

当这个文件就位时,所有应用程序的任何声音输出都应该转到环回适配器而不是您的实际扬声器。只需在您的 arecord 命令中指定正确的设备,完成后,删除.asoundrc文件即可恢复正常。