pep*_*ico 5 arch-linux alsa audio pulseaudio
我注意到这发生在我的 ArchLinux PC 和我的 ArchLinux MacBook 中。我需要通过短音调获取应用程序通知,我发现这不是通知应用程序的问题,而是系统本身的问题,并且它发生在两个截然不同的系统中。
当我播放一个简短的音频文件时,就像paplay /usr/share/sounds/freedesktop/stereo/message.oga我第一次播放时听不到一样。
如果我按顺序再次播放,我会听到它并且播放正确,我始终按顺序重复播放。
如果我等了大约 10 秒钟再播放,它就会静音(就像开始时一样):只有在热身时才会发出声音。
也会发生同样的情况aplay /usr/share/sounds/alsa/Front_Left.wav,但由于音调较长,因此问题仅发生在文件的开头。起初我只听到“t left”,漏掉了“fron”。之后,我完整而清晰地听到:“左前方”。如果我等了 10 秒,“t left”又一次。
如果我在媒体播放器的后台播放音乐文件,则不会发生此问题。它仅在计算机不播放任何声音时发生。
如何解决这个问题?(除了让 PC 在后台的守护进程中播放听不见的声音以使其始终处于预热状态)
仅使用 alsa 问题仍然存在的相关测试会话:
~ ??? sudo mv /usr/bin/pulseaudio /usr/bin/pulseaudio.bak
~ ??? pulseaudio.bak --kill
W: [pulseaudio.bak] main.c: Couldn't canonicalize binary path, cannot self execute.
~ ??? paplay /usr/share/sounds/freedesktop/stereo/message.oga
Connection failure: Connection refused
pa_context_connect() failed: Connection refused
~ ??? ps axu | grep -i pulse
francis+ 31563 0.0 0.0 10796 2144 pts/2 S+ 14:35 0:00 grep --color=auto -i pulse
~ ??? aplay -D plughw:0,7 /usr/share/sounds/alsa/Front_Left.wav
Playing WAVE '/usr/share/sounds/alsa/Front_Left.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono
~ ??? aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: Generic Analog [Generic Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: Generic Digital [Generic Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
~ ??? lspci -nn | grep -i audio
00:1f.3 Audio device [0403]: Intel Corporation Device [8086:a2f0]
Run Code Online (Sandbox Code Playgroud)
在 Linux 内核 4.11.2 之后,ALC1220 编解码器位于:
~ ??? aplay -l
**** List of PLAYBACK Hardware Devices ****
card 0: PCH [HDA Intel PCH], device 0: ALC1220 Analog [ALC1220 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 1: ALC1220 Digital [ALC1220 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 3: HDMI 0 [HDMI 0]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 0: PCH [HDA Intel PCH], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
Run Code Online (Sandbox Code Playgroud)
我已经连接了我的耳机并设法仅使用aplay但不同的方式重现了该问题:
~ ??? aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Left.wav
~ ??? aplay -D plughw:0,0 /usr/share/sounds/purple/alert.wav
~ ??? aplay -D plughw:0,0 /usr/share/sounds/alsa/Front_Left.wav
~ ??? aplay -D plughw:0,0 /usr/share/sounds/purple/alert.wav
...
Run Code Online (Sandbox Code Playgroud)
我不得不播放驻留在不同目录中的不同音频文件,如果播放一个然后另一个播放,则两个播放都在开始时被剪切,播放之间的间隔无关紧要。如果一个文件播放一次,之后播放同一目录中的文件不会重现该问题,也不会等待它“冷却”(我已经等了 1 分钟)。paplay打开pulseaudio时也会发生同样的情况。通过 HDMI 播放时,它会在两个测试用例中重现。
虽然我很懒惰,但我还没有向 ALSA 开发人员报告这个问题,但是,我已经创建了一个用户 systemd 单元:
[Unit]
Description=Continuous silence
[Service]
ExecStart=/usr/bin/play -qn
[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)
只需将其保存到~/.config/systemd/user/continuous-silence.service并启用它systemctl --user enable continuous-silence。
假设接收声音系统在输出声音之前需要“唤醒”,并且只有在接收到初始批次的声音数据后才会这样做,如果接收声音系统无法修复此问题,则丢弃第一批声音数据,一种解决方法是连续输出静音,例如使用playfrom sox:
play -n
Run Code Online (Sandbox Code Playgroud)
编辑
根据它在 Windows 上运行的附加信息,以及声卡(“英特尔公司设备”)和编解码器(“通用”)均无法通过名称识别的信息,也可能是某些驱动程序问题。编解码器中有一个“保持活动启用”(KAE)位,也许需要通过混音器控制来设置它,但我对此了解不够。
向 ALSA 开发人员提交错误,提供信息lspci -nn以及cat /proc/asound/card*/codec\#*. (您也可以将后者的输出放入粘贴箱并使用链接编辑您的问题,以便我可以查看)。
| 归档时间: |
|
| 查看次数: |
2949 次 |
| 最近记录: |