我正在寻求解决麦克风捕获方面持续存在的问题。我的麦克风输入上有明显的爆裂声。每当我使用麦克风时,无论哪个程序,它都会出现。我已经遇到这个问题近一年了,并且我已经尝试多次解决它。这不是硬件问题,麦克风在我的 Windows 分区上工作(使用我的麦克风是我需要启动 Windows 的少数原因之一)。
最后决定发个帖子看看能不能找到答案。
我做了各种研究,我的主要资源是Arch wiki 上的这些步骤它可以修复麦克风录音中的静态噪音。
第1步:找到系统声卡
$ arecord -l
**** List of CAPTURE Hardware Devices ****
card 1: Generic [HD-Audio Generic], device 0: ALC1220 Analog [ALC1220 Analog]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 1: Generic [HD-Audio Generic], device 2: ALC1220 Alt Analog [ALC1220 Alt Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
步骤 2-4:查找并设置采样率
$ arecord -f dat -r 60000 -D hw:1,0 -d 5 test.wav
Recording WAVE 'test.wav' : Signed 16 bit Little Endian, Rate 60000 Hz, Stereo
Warning: rate is not accurate (requested = 60000Hz, got = 48000Hz)
please, try the plug plugin
我将采样率添加到/etc/pulse/daemon.conf
:
default-sample-rate = 48000
然后我重新启动了 pulsaudiopulseaudio -k && pulseaudio --start
第 5 步:测试输出
我跑了arecord -f cd -d 10 test-mic.wav
(没有指定速率),但结果是一样的。我已经用采样率尝试了这些步骤44100
,38000
只是为了尝试。不幸的是,麦克风的爆裂声始终存在。
另一个可能的原因
$ pacmd list-sources | grep 'name:.*input'
name: <alsa_input.pci-0000_0b_00.3.analog-stereo>
所以我将其添加到/etc/pulse/default.pa
:
load-module module-remap-source source_name=record_mono master=alsa_input.pci-0000_0b_00.3.analog-stereo master_channel_map=front-left channel_map=mono
set-default-source record_mono
但这没什么区别,如果有的话我会说它更糟,所以我现在已经注释掉了这些行。
其他行/etc/pulse/daemon.conf
(我认为来自过去的尝试)
flat-volumes = no
default-fragments = 3
default-fragment-size-msec = 5
avoid-resampling = yes
deferred-volume-safety-margin-usec = 1
我运行的其他命令来获取信息
输出systemctl --user status pulseaudio.service
我不认为这是相关的,但我不确定为什么它不活跃?如果我运行pulseaudio -k && pulseaudio --start
所有声音都会被切断,我必须等待pulseaudio开始..
● pulseaudio.service - Sound Service
Loaded: loaded (/usr/lib/systemd/user/pulseaudio.service; disabled; vendor preset: enabled)
Active: inactive (dead)
输出/sbin/lsmod | grep snd
snd_hda_codec_hdmi 49152 1
snd_hda_codec_realtek 102400 1
snd_hda_codec_generic 73728 1 snd_hda_codec_realtek
snd_hda_intel 40960 8
snd_hda_codec 126976 4 snd_hda_intel,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec_realtek
snd_hda_core 81920 5 snd_hda_intel,snd_hda_codec,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_hda_codec_realtek
snd_hwdep 20480 1 snd_hda_codec
snd_pcm 98304 5 snd_hda_intel,snd_hda_codec,snd_hda_core,snd_hda_codec_hdmi
snd_seq_midi 16384 0
snd_seq_midi_event 16384 1 snd_seq_midi
snd_rawmidi 32768 1 snd_seq_midi
snd_seq 65536 2 snd_seq_midi_event,snd_seq_midi
snd_seq_device 16384 3 snd_seq,snd_rawmidi,snd_seq_midi
snd_timer 32768 3 snd_seq,snd_pcm
snd 81920 25 snd_hda_intel,snd_hwdep,snd_seq,snd_hda_codec,snd_timer,snd_rawmidi,snd_hda_codec_hdmi,snd_hda_codec_generic,snd_seq_device,snd_hda_codec_realtek,snd_pcm
soundcore 16384 1 snd
非常感谢您提供的任何帮助。谢谢。
Linux Mint 19.1
Kernel 4.15.0-20-generic
Motherboard: ASUS X470-PRO
Microphone: Modmic
更新:我已经转移到新的发行版,我无法再确认答案是否有效。感谢所有提供意见的人!
答案1
我发现这个 Stackexchange 问题试图解决类似的问题。虽然我不能 100% 确定我们的问题是由同一原因引起的,但我注意到一些相似之处,希望这会有所帮助。
具体来说,我看到您正在尝试捕获麦克风,并且我在您的帖子中看到,就像我一样,您正在使用“arecord -f cd”和“arecord -f dat”。
我可以通过查看物理音频连接器插头(我认为是 3.5 毫米类型)来验证我的麦克风是单声道设备。我的插头有两根由橡胶环隔开的导体,一根用于屏蔽,一根用于信号,它看起来像我在谷歌搜索“3.5毫米单声道插头”时得到的,而不是我在谷歌搜索时得到的“3.5毫米立体声插头”。
然而,当我阅读 arecord 的手册页时,“cd”和“dat”格式都是立体声:
-f cd (16 bit little endian, 44100, stereo) [-f S16_LE -c2 -r44100]
-f cdr (16 bit big endian, 44100, stereo) [-f S16_BE -c2 -f44100]
-f dat (16 bit little endian, 48000, stereo) [-f S16_LE -c2 -r4800
所以对我来说,当我录制立体声时,我会得到平均高音量的“敲击”或“点击”噪音,而当我录制单声道(这就是我的输入实际上是什么)时,我不会。我的一项测试的成绩单:
michael@sequoia:~$ arecord -f S16_LE -c2 -r44100 /tmp/r1.wav
Recording WAVE '/tmp/r1.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
^CAborted by signal Interrupt...
michael@sequoia:~$ aplay /tmp/r1.wav
Playing WAVE '/tmp/r1.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
michael@sequoia:~$ #heard tapping
michael@sequoia:~$ arecord -f S16_LE -c1 -r44100 /tmp/r1.wav
Recording WAVE '/tmp/r1.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
^CAborted by signal Interrupt...
michael@sequoia:~$ aplay /tmp/r1.wav
Playing WAVE '/tmp/r1.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Mono
michael@sequoia:~$ #No tapping noise
我还在 arecord 手册页中发现 1 通道是默认通道,因此不需要“-c1”。
-c, --channels=#
The number of channels. The default is one channel. Valid val‐
ues are 1 through 32.
我希望这有帮助。