
Mir ist aufgefallen, dass dies sowohl auf meinem ArchLinux-PC als auch auf meinem ArchLinux-MacBook passiert. Ich muss Anwendungsbenachrichtigungen durch kurze Audiotöne erhalten und habe herausgefunden, dass das Problem nicht bei den benachrichtigenden Anwendungen liegt, sondern beim System selbst, und es passiert auf beiden Systemen, die sehr unterschiedlich sind.
Wenn ich eine kurze Audiodatei abspiele, paplay /usr/share/sounds/freedesktop/stereo/message.oga
höre ich sie beim ersten Abspielen nicht.
Wenn ich es der Reihe nach noch einmal spiele, höre ich es und es wird richtig gespielt. Ich wiederhole es immer der Reihe nach.
Wenn ich etwa 10 Sekunden warte, bevor ich es erneut abspiele, ist es stummgeschaltet (wie am Anfang): Es ertönt nur beim Aufwärmen.
Dasselbe passiert bei aplay /usr/share/sounds/alsa/Front_Left.wav
, aber da es ein längerer Ton ist, tritt das Problem nur am Anfang der Datei auf. Zuerst höre ich nur „t left“, „fron“ fehlt. Danach höre ich es vollständig und deutlich: „front left“. Wenn ich 10 Sekunden warte, kommt wieder „t left“.
Das Problem tritt nicht auf, wenn ich im Hintergrund eine Musikdatei auf einem Mediaplayer abspiele. Es tritt nur auf, wenn der Computer keinen Ton wiedergibt.
Wie kann ich das beheben? (außer, dass ich den PC im Hintergrund einen unhörbaren Ton abspielen lasse, um ihn immer aufgewärmt zu halten.)
Relevante Testsession, bei der das Problem ausschließlich bei Verwendung von Alsa weiterhin besteht:
~ ❯❯❯ 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]
AKTUALISIEREN
Nach Linux-Kernel 4.11.2,ALC1220 Codec ist in:
~ ❯❯❯ 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
Ich habe meine Kopfhörer angeschlossen und konnte das Problem mithilfe von etwas anderem reproduzieren 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
...
Ich musste verschiedene Audiodateien abspielen, die in unterschiedlichen Verzeichnissen gespeichert waren. Beide Wiedergaben wurden am Anfang unterbrochen, wenn zuerst die eine und dann die andere abgespielt wurde. Das Intervall zwischen den Wiedergaben spielt keine Rolle. Wenn eine Datei einmal abgespielt wird, wird das Problem nicht reproduziert, wenn anschließend Dateien im selben Verzeichnis abgespielt werden, und auch nicht, wenn man wartet, bis es „abgekühlt“ ist (ich habe 1 Minute gewartet). Dasselbe passiert, paplay
wenn man Pulseaudio einschaltet. Bei der Wiedergabe über HDMI wird es in beiden Testfällen reproduziert.
AKTUALISIERUNG 2
Faul wie ich bin, habe ich dies den ALSA-Entwicklern noch nicht gemeldet, aber ich habe eineBenutzer-Systemd-Einheit:
[Unit]
Description=Continuous silence
[Service]
ExecStart=/usr/bin/play -qn
[Install]
WantedBy=default.target
Speichern Sie es einfach unter ~/.config/systemd/user/continuous-silence.service
und aktivieren Sie es mit systemctl --user enable continuous-silence
.
Antwort1
Unter der Annahme, dass das empfangende Tonsystem „aufwachen“ muss, bevor es Töne ausgibt, und dies nur tut,nachEmpfangen des ersten Stapels Tondaten, Löschen des ersten Stapels. Wenn dies im empfangenden Tonsystem nicht behoben werden kann, besteht eine Problemumgehung darin, kontinuierlich Stille auszugeben, beispielsweise play
mit sox
:
play -n
Bearbeiten
Mit der zusätzlichen Information, dass es unter Windows funktioniert, und der Information, dass weder die Soundkarte („Intel Corporation Device“) noch der Codec („Generic“) namentlich erkannt werden, ist es auch möglich, dass es sich um ein Treiberproblem handelt. Es gibt ein „Keep Alive Enable“-Bit (KAE) im Codec, das möglicherweise gesetzt werden muss, möglicherweise über eine Mixersteuerung, aber darüber weiß ich nicht genug.
Melden Sie den Fehler bei den ALSA-Entwicklern, stellen Sie die lspci -nn
Informationen und die Ausgabe von cat /proc/asound/card*/codec\#*
bereit. (Sie können die Ausgabe des letzteren auch in einen Pastebin einfügen und Ihre Frage mit dem Link bearbeiten, damit ich einen Blick darauf werfen kann.)
Antwort2
Eine weitere Lösung für mich ergab sich, als ich begann, das Jack Audio Connection Kit in Verbindung mit Pulseaudio-Jack anstelle des bloßen Pulseaudio zu verwenden.
Antwort3
Behoben durch Befolgen des Wikis zum Einrichten von Audio mit geringer Latenz
- Folgen Sie Abschnitt 1.1 im Wikihttps://wiki.archlinux.org/title/Professional_audio
- Installieren Sie den Linux-RT-AUR-Kernel nicht
- Ein Neustart nach Abschluss von Abschnitt 1.1 sollte die Latenz beseitigen
- Wenn nicht, fahren Sie mit dem Rest des Wikis und der Konfiguration von JACK fort.