
この現象は、ArchLinux PC と ArchLinux MacBook の両方で発生していることに気づきました。短いオーディオ トーンでアプリケーション通知を受け取る必要があるのですが、通知アプリケーションの問題ではなくシステム自体の問題であることがわかりました。この現象は、大きく異なる両方のシステムで発生します。
短いオーディオ ファイルを再生すると、paplay /usr/share/sounds/freedesktop/stereo/message.oga
最初に再生したときには聞こえないような感じになります。
もう一度順番に再生すると、正しく再生されていることが聞こえ、常に順番に繰り返します。
もう一度再生するまでに約 10 秒待つと、ミュートされます (最初のように)。つまり、ウォーミングアップ時にのみ音が鳴ります。
でも同じことが起こりますaplay /usr/share/sounds/alsa/Front_Left.wav
が、これはより長い音なので、問題はファイルの先頭でのみ発生します。最初は「t left」のみが聞こえ、「fron」が聞こえません。その後、「front left」が完全にはっきりと聞こえます。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]
アップデート
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 つを再生すると、両方の再生が開始時に中断されます。再生間の間隔は関係ありません。ファイルを 1 回再生すると、その後同じディレクトリにあるファイルを再生しても問題は再現されず、また「クールダウン」するのを待っても (1 分間待ちました) 問題は再現されません。pulseaudiopaplay
をオンにすると、同じことが起こります。HDMI 経由で再生すると、両方のテスト ケースで再現されます。
アップデート2
私は怠け者なので、まだALSA開発者に報告していませんが、ユーザー systemd ユニット:
[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
。
答え1
受信側のサウンドシステムは、音を出力する前に「起動」する必要があり、実際に起動するのは後サウンド データの最初のバッチを受信し、最初のバッチをドロップします。受信側のサウンド システムでこれを修正できない場合は、回避策として、たとえば次のようにして無音を継続的に出力しplay
ますsox
。
play -n
編集
Windows で動作するという追加情報と、サウンドカード (「Intel Corporation Device」) もコーデック (「Generic」) も名前で認識されないという情報から、何らかのドライバの問題である可能性もあります。コーデックには「keep alive enable」(KAE) ビットがあり、おそらくミキサー コントロールによってこれを設定する必要があるかもしれませんが、これについては十分に知りません。
ALSA 開発者にバグを報告し、lspci -nn
情報と の出力を提供してcat /proc/asound/card*/codec\#*
ください。(後者の出力を pastebin に入れて、リンクを付けて質問を編集することもできます。そうすれば、私が確認できます)。
答え2
私にとってもう一つの解決法は、裸の pulseaudio ではなく、pulseaudio-jack と組み合わせた Jack Audio Connection Kit を採用し始めたときに起こりました。
答え3
低遅延オーディオの設定方法に関するWikiに従って修正しました
- ウィキのセクション1.1に従ってくださいhttps://wiki.archlinux.org/title/プロフェッショナルオーディオ
- linux-rt AURカーネルをインストールしないでください
- セクション1.1を完了した後に再起動すると、遅延が解消されるはずです。
- そうでない場合は、Wikiの残りの部分とJACKの設定に進んでください。