正在捕获播放声音

正在捕获播放声音

我的音频一直有问题。当我捕获音频时,除非我指定正确的设备(见下文),否则我会捕获播放音频。因此,捕获的不是我的 USB 麦克风,而是通过耳机播放的声音。

我不确定发生了什么以及如何修复它。我正在使用 ALSA 和 Pulseaudio,我的 asound.conf 是 Pulseaudio 生成的默认文件。输出cat /proc/asound/cards

0 [PCH            ]: HDA-Intel - HDA Intel PCH
                     HDA Intel PCH at 0xf7910000 irq 29
1 [NVidia         ]: HDA-Intel - HDA NVidia
                     HDA NVidia at 0xf7080000 irq 17
2 [C01U           ]: USB-Audio - Samson C01U
                     Samson Technologies Samson C01U at usb-0000:00:14.0-9, full speed

输出amixer -c0 contentshttps://pastebin.com/cyERFpPk

为了在测试麦克风时录制声音,我使用了 audacity,并将录音设备设置为,Samson C01U:USB Audio (hw:2,0): Front Mic:0并使用 arecord 设置为arecord -d 2 -D hw:2,0 -f cd test.wav。两者都从我的麦克风录制声音,但是当从播放声音时arecord,它只通过耳机的左侧播放。

我还注意到了另一个问题。随着时间的推移(尤其是当我调整音频音量时),我开始在听音频时听到一些静电噪音。有时噪音非常微弱,有时又非常大。我从来没有遇到过这种情况。我可以通过重新启动 pulseaudio 来解决这个问题,但这样做很烦人。

我的/etc/asound.confhttps://pastebin.com/2XSEhfHb。我没有~/.asoundrc

答案1

好的,快速概述一下事物的工作原理。

您的 Intel HDA 声卡与“编解码器”芯片有数字连接,该芯片包含 D/A 和 A/D 转换器、模拟混频器、模拟放大器和模拟开关。ALSA 具有声卡的内核驱动程序,并分配您可以看到的混频器元素来amixer控制编解码器中的某些(但不是全部)内容。

您可以通过系统范围/etc/asound.conf或每个用户使用“插件”配置 ALSA ~/.asoundrc

Pulseaudio 在 ALSA 上运行,并为应用程序提供统一的音频传输机制。它负责采样率转换等,这使得 Pulseaudio 比 ALSA 更易于使用(原则上)。标准配置是 Pulseaudio 为旧版 ALSA 应用程序提供了一个兼容层,其中包含以下条目

pcm.!default pulse
ctl.!default pulse

这些设置默认的 ALSA 输入和输出,使得 ALSA 应用程序被视为 Pulseaudio 应用程序。因此,当您使用arecordaudacity(而不是 ALSA 应用程序)与默认 ALSA 输入时,您实际上是在使用 Pulseaudio(您也可以使用parecord直接访问 Pulseaudio)。但是当您选择 时hw:XXX,您将直接从 ALSA 驱动程序进行录制。

pavucontrolPulseaudio 有自己的(非常灵活的)音频源和接收器概念。您可以使用(以及在许多桌面环境和类似的桌面面板上)查看(和修改)哪些应用程序连接到哪些源和接收器。

因此,如果您运行arecord并使用pavucontrol,它应该会显示并从属于 Intel HDA 声卡(通常是“内置音频模拟立体声”)的源进行记录。

为什么它会录制同时播放的声音?您必须更详细地查看编解码器(您可以使用 来做到这一点cat /proc/asound/card*/codec\#*),但您的输出中有一个名为“环回混音”的混音器控件amixer,并且已启用。所以我猜您的编解码器包含一个允许您录制当前输出的声音的功能。在 中禁用它alsamixer,看看是否有任何变化。

如何设置它以自动从 Samson USB 麦克风录音?您可以在 ALSA 中配置默认​​值,但如果您想保留 Pulseaudio,则应改为配置 Pulseaudio。您可以在pavucontrol应用程序运行时为每个应用程序选择音频源,Pulseaudio 会记住这些设置。您还可以通过单击“设置为后备”来设置默认音频源输入tab,或者pacmd set-default-source my_source从命令行使用。pacmd list-sources | grep name:将为您提供可用源的列表。在命令行上使用源名称时,请删除尖括号。

编辑

每个 Pulseaudio 接收器都有一个关联的.monitor源。因此,由于某种原因,Pulseaudio 无法获取任何 ALSA 输入,因此无法生成相应的源,因此剩下的唯一源就是源.monitor,它恰好输出当前播放的声音。因此编解码器中没有内部循环(尽管这可能其他录制当前播放的声音的方式)。

这意味着您必须调试为什么 Pulseaudio 无法创建与 ALSA 输入相对应的源,尽管它创建了一个dmix接收器,但它也不应该创建 - 这应该是一个硬件接收器。

请提供/etc/asound.conf~/.asoundrc作为第一步。在启动 Pulseaudio 之前,是否已经有程序在运行,这些程序直接使用 ALSA,并阻止 Pulseaudio 使用硬件输入/输出?

答案2

通过删除 pulseaudio 解决了播放音频被录制的问题

相关内容