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


20

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

arecord -f cd -t raw | oggenc - -r -o file.ogg

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

该命令的输出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

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

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

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

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


您的硬件是否具有一些混音器控件以将输出路由回捕获设备?
CL。

@CL。我知道的唯一预装调音台是alsamixer。如果在alsamixer(F6键选择声卡)中选择回送卡,则会收到消息This sound device does not have any controls。如果退出混音器并返回,则发现声卡已从环回还原到默认卡。尝试在选择后挂起(ctrl-z)和后台(bg)的alsamixer过程loopback无法通过arecord命令成功录制音频。
user001

选择的卡alsamixer不影响系统的其余部分;它只是更改显示的控件。Conexant设备的录制选择控件是什么?
CL。

@CL。对于我的Conexant设备,我内部有一个播放控件(Master)和一个捕获控件(Capturealsamixer。可以使用空格键打开和关闭捕获alsamixer,默认情况下它是打开的。如果这不是您想要的,请告诉我。谢谢。
user001

Answers:


6

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

sudo modprobe snd-aloop

这应该将新的捕获设备添加到的输出中arecord -L

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

pcm.!default {
    type hw
    card 1
    device 0
}

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


感谢您的建议。尽管.asoundrc在我的主目录中创建并重新启动了终端仿真器会话,但音频仍定向到扬声器。该arecord -f cd -t raw | oggenc - -r -o file.ogg命令不记录任何内容。发行arecord -l提供与以前相同的列表,但card 1: Loopbackdevices 0, 1)有两行,每行有8个子设备(#0-#7)。同样,arecord -L添加了以下三行:sysdefault:CARD=Loopback [newline] Loopback, Loopback PCM [newline] Default Audio Device。由于字符数限制,在下一个注释中继续。
001 user001

arecord -f cd -t raw --device=sysdefault | oggenc - -r -o file.ogg在命令执行期间,尝试记录空白音频文件(它不会像以前那样从麦克风提取音频数据)。不幸的是,sysdefault由于被定义为CARD=PCH(的第一行arecord -L)和CARD=Loopback(的最后一行)而退化arecord -L。感谢您提供的后续建议。
user001

环回仅允许记录播放到播放设备的内容,而不记录到声卡的输出。
CL。

抱歉,我的答案不起作用-它适用于我的设置。我建议您看一下对asoundrc文件的解释:alsa-project.org/main/index.php/Asoundrc 我很确定您是否可以尝试一些尝试并在不同的设备上玩一些更多的事情,使它工作。有点麻烦,但是您碰巧有一条3.5mm-> 3.5mm的物理电缆吗?如果是这样,您总是可以只将耳机输出插孔连接到麦克风/线路输入插孔。
beveradb

如果无法在asoundrc上使用它,则这些链接可能会提供更多信息来帮助您解决问题: sabi.co.uk/Notes/linuxSoundALSA.html#tasksRecordPlay forum.vectorlinux.com/index.php?topic=7500.0 如果您仍然无法使其正常运行,则可以改用PulseAudio代替ALSA。这样的回答解释了如何做到这一点使用的PulseAudio:askubuntu.com/questions/171287/...
beveradb

6

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

➜  ~ 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...  

因此,设备字符串的格式为 hw:<card>,<device>

设备ID的格式


6

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

1)找到监视设备:

$ pacmd list | grep "\.monitor"
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

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

而已!


3
请注意,您可以使用parec代替pacat --record。您也可以避免使用sox和使用parec -d <monitor> --file-format=wav output.wav。您可以使用列出可用的文件格式parec --list-file-formats
Peque

3

您的硬件不支持捕获其输出。数据进入实际的播放设备后,它就消失了。

您需要使用某些软件来复制音频数据,然后再将其写入硬件。

我建议使用PulseAudio。在那里,您只需选择其输出之一作为捕获源: pavucontrol输出监控


我安装pavucontrol并尝试使用录制gnome-sound-recorder。当我打开gnome-sound-recorder并开始重新编码(Ctrl-R)时,该流将出现在PulseAudio Volume Control窗口中。流实际上没有记录任何数据,但是(最终长度为0:00)。另外,您是否熟悉如何通过命令行而不是GUI进行录制?谢谢 。
user001

1
  1. 转到PulseAudio音量控制->输入设备选项卡。在底部,选择显示“所有输入设备”。检查“内部音频模拟立体声的监听”是否没有被静音,并且在播放音频时音量会升高和降低!!

  2. 使用录音机录制音频源=内部音频模拟立体声(音频输入)。请参见下面的屏幕截图。

在此处输入图片说明


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.