これは、ArchLinuxPCとArchLinuxMacBookの両方で発生することに気づきました。短い音声トーンでアプリケーションの通知を受け取る必要がありますが、アプリケーションに通知することによる問題ではなく、システム自体に問題があることがわかりました。これは、大きく異なる両方のシステムで発生します。
paplay /usr/share/sounds/freedesktop/stereo/message.oga
のような短いオーディオファイルを再生すると、最初に再生したときに聞こえません。
もう一度順番に再生すると、聞こえて正しく再生され、常に順番に繰り返します。
もう一度再生するのに約10秒待つと、(最初のように)ミュートされます。ウォームアップ時にのみ鳴ります。
aplay /usr/share/sounds/alsa/Front_Left.wav
でも同じことが起こりますが、トーンが長いため、ファイルの先頭で問題が発生します。最初は「tleft」しか聞こえず、「fron」がありません。その後、私はそれを完全にはっきりと聞きます:「左前」。 10秒待つとまた「tleft」。
メディアプレーヤーのバックグラウンドで音楽ファイルを再生している場合、この問題は発生しません。これは、コンピューターがサウンドを再生していない場合にのみ発生します。
これを修正する方法は? (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]
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
ヘッドフォンを接続し、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
...
異なるディレクトリにある異なるオーディオファイルを再生する必要がありました。一方が再生され、もう一方が再生されると、両方の再生が最初にカットされます。再生の間隔は関係ありません。ファイルを1回再生した場合、同じディレクトリ内のファイルを後で再生しても、問題は再現されず、「クールダウン」するのを待つこともありません(1分待ちます)。 paplay
でも、pulseaudioをオンにすると同じことが起こります。 HDMIで再生すると、両方のテストケースで再現されます。
怠惰な私は、これをALSA開発者にまだ報告していませんが、 ser systemd unit :を作成しました。
[Unit]
Description=Continuous silence
[Service]
ExecStart=/usr/bin/play -qn
[Install]
WantedBy=default.target
~/.config/systemd/user/continuous-silence.service
に保存し、systemctl --user enable continuous-silence
で有効にします。
受信サウンドシステムがサウンドを出力する前に「ウェイクアップ」する必要があり、それだけを行うという仮定の下でafterサウンドデータの最初のバッチを受信し、これができない場合は最初のバッチをドロップします受信サウンドシステムで修正する場合、回避策は、たとえばplay
からsox
を使用して無音を継続的に出力することです。
play -n
編集
Windowsで動作するという追加情報と、サウンドカード(「IntelCorporation Device」)もコーデック(「Generic」)も名前で認識されないという情報があるため、ドライバーの問題である可能性もあります。コーデックには「キープアライブイネーブル」(KAE)ビットがあります。おそらくミキサーコントロールによってこれを設定する必要がありますが、これについては十分にわかりません。
ALSA開発者にバグを報告し、lspci -nn
情報、およびcat /proc/asound/card*/codec\#*
の出力を提供します。 (後者の出力をPastebinに入れて、リンクを使用して質問を編集することもできるので、私は見ることができます)。
裸のpulseaudioの代わりに、pulseaudio-jackと組み合わせたJack Audio Connection Kitを採用し始めたときに、別の修正が行われました。