Zniekształcenia dźwięku w Ubuntu 24.04 mogą pochodzić z kilku warstw: aplikacji, PipeWire, WirePlumber, ALSA, sterownika jądra lub samego sprzętu audio. Praktyczne podejście polega na tym, aby najpierw zidentyfikować problematyczne urządzenie, a następnie zmieniać ustawienia bufora lub urządzenia pojedynczo. Na standardowym pulpicie Ubuntu 24.04 PipeWire znajduje się nad ALSA, a WirePlumber zarządza urządzeniami ALSA, dlatego większość użytkowników powinna dostosować właściwości ALSA udostępnione przez WirePlumber przed zmianą domyślnej konfiguracji ALSA w systemie.
Ubuntu 24.04 pierwotnie zawierało PipeWire 1.0.4, a obecne pakiety Noble Ubuntu nadal korzystają z WirePlumber 0.4.17, a nie z nowszego formatu konfiguracji 0.5. Ten szczegół wersji jest istotny, ponieważ WirePlumber 0.4 używa fragmentów Lua w formacie ~/.config/wireplumber/main.lua.d/. Nowsza wireplumber.conf.dskładnia, którą można znaleźć w aktualnej dokumentacji, dotyczy WirePlumber 0.5 i nowszych wersji. Przed skopiowaniem jakiejkolwiek konfiguracji sprawdź zainstalowaną wersję.
Oficjalne odniesienia: informacje o wydaniu Ubuntu 24.04 LTS , pakiet WirePlumber dla aktualizacji Noble dla Ubuntu , odniesienie do konfiguracji ALSA w WirePlumber 0.4 oraz odniesienie do wtyczki ALSA PCM .
Krótki przewodnik: co wypróbować w pierwszej kolejności
| Objaw | Pierwsze sprawdzenie praktyczne | Potencjalna poprawka |
| Trzaski przy obciążeniu procesora | Sprawdź, czy odpływ jest prawidłowy i zwróć uwagę na przerwy w dostawie prądu | Przetestuj większy rozmiar okresu ALSA, np. 1024 lub 2048 ramek |
| Zniekształcenia tylko na jednym przetworniku cyfrowo-analogowym USB | Zidentyfikuj dokładny węzeł ALSA/PipeWire | Zastosuj regułę tylko do tego węzła; unikaj reguły globalnej |
| Hałas podczas wybudzania urządzenia ze stanu czuwania | Odtwórz po kilku sekundach ciszy | Zwiększ lub wyłącz limit czasu zawieszenia dla danego węzła |
| Problemy w starszej aplikacji obsługującej wyłącznie ALSA | Przetestuj aplikację za pomocą aplayPCM lub jawnego PCM | Użyj na użytkownika ~/.asoundrcz plug/dmix |
| Zniekształcenie przy jednej częstotliwości próbkowania | Testuj materiał 44,1 kHz i 48 kHz | Wybierz obsługiwaną szybkość sprzętową i pozwól PipeWire na ponowne próbkowanie w razie potrzeby |
1. Zidentyfikuj sprzęt ALSA i stos audio
Zacznij od wylistowania urządzeń odtwarzających i sprawdzenia, który serwer audio jest aktywny. Nie zakładaj, że hw:0,0to Twoje głośniki; zestawy słuchawkowe HDMI, USB, kamery internetowe i stacje dokujące mogą zmieniać numerację kart między rozruchami.
aplay -l
wpctl status
pactl info
wireplumber --version
pipewire --version
Podpis: Na aplay -lliście oddzielono wbudowane urządzenie odtwarzające analogowe od HDMI, co pomaga uniknąć zastosowania modyfikacji ALSA do niewłaściwej karty.
Jeśli pactl infowyświetla się komunikat „PulseAudio (w PipeWire)”, jest to normalne w Ubuntu 24.04. Interfejs zgodny z PulseAudio jest dostarczany przez PipeWire. W przypadku Ubuntu 24.04/Noble, wireplumber --versionzazwyczaj powinna być wyświetlana seria 0.4.x, chyba że zainstalowano inną kompilację.
2. Przed zmianą konfiguracji sprawdź zniekształcenie
Zamiast oceniać zmiany na podstawie losowych filmów z internetu, użyj powtarzalnego testu. Krótki plik WAV speaker-testlub znany utwór muzyczny sprawią, że porównania przed i po będą bardziej wiarygodne. Sprawdź również, czy problem występuje w równym stopniu na wyjściu analogowym, HDMI, Bluetooth i USB. Jeśli problem dotyczy tylko jednej ścieżki, zawęź zakres naprawy do tej ścieżki.
speaker-test -c 2 -t wav
aplay /usr/share/sounds/alsa/Front_Center.wav
W przypadku urządzeń USB jądro udostępnia informacje o strumieniu pod adresem /proc/asound/. Dokładna ścieżka różni się w zależności od karty, dlatego /proc/asound/cardsnajpierw sprawdź, czy jest dostępna, zamiast kopiować numer karty na ślepo.
Podpis: Informacje o strumieniu ALSA mogą ujawnić aktywną częstotliwość próbkowania, liczbę kanałów i format próbek dla odtwarzanego strumienia. Numer karty zależy od sprzętu.
3. Utwórz kopię zapasową bieżącej konfiguracji użytkownika
Przed edycją czegokolwiek zachowaj wszelkie istniejące nadpisania ALSA lub WirePlumber. Zmiany na poziomie użytkownika są bezpieczniejsze niż edycja plików w systemie /usr/share, ponieważ aktualizacje pakietów mogą zastąpić pliki systemowe.
cp -a ~/.asoundrc ~/.asoundrc.backup 2>/dev/null || true
mkdir -p ~/.config/wireplumber/main.lua.d
cp -a ~/.config/wireplumber/main.lua.d ~/.config/wireplumber/main.lua.d.backup 2>/dev/null || true
Jeśli wcześniej skopiowałeś konfigurację z przewodnika napisanego dla WirePlumber 0.5, usuń ją lub przenieś w inne miejsce przed testowaniem na standardowym Ubuntu 24.04. WirePlumber 0.4 i 0.5 używają różnych formatów konfiguracji.
4. Dostosuj zachowanie bufora ALSA za pomocą WirePlumber 0.4
W Ubuntu 24.04 jest to zazwyczaj najistotniejsza modyfikacja na poziomie ALSA, ponieważ WirePlumber tworzy i konfiguruje węzły PipeWire oparte na ALSA. W dokumentacji WirePlumbera opisano to api.alsa.period-sizejako rozmiar okresu w próbkach oraz api.alsa.headroomjako dodatkowe buforowanie między wskaźnikami sprzętowymi i programowymi. Większość urządzeń USB jest traktowana jako urządzenia wsadowe, a rozmiar okresu wpływa zarówno na częstotliwość przerwań, jak i zachowanie buforowania.
Utwórz regułę użytkownika:
nano ~/.config/wireplumber/main.lua.d/51-alsa-tuning.lua
Użyj reguły, która dotyczy tylko problematycznego węzła wyjściowego. Najpierw pobierz nazwę węzła za pomocą wpctl statuslub pw-cli list-objects Node. Następnie dostosuj ten przykład:
local rule = {
matches = {
{
{ "node.name", "matches", "alsa_output.*" },
},
},
apply_properties = {
["api.alsa.period-size"] = 1024,
["api.alsa.headroom"] = 0,
},
}
table.insert(alsa_monitor.rules, rule)
Nie traktuj 1024 jako uniwersalnej wartości magicznej. To konserwatywny punkt testowy. Jeśli zniekształcenie nadal występuje, porównuj kolejno wartości 512, 1024 i 2048. Dłuższe okresy mogą poprawić tolerancję na opóźnienia w harmonogramowaniu w niektórych systemach, ale zwiększają opóźnienie; krótsze okresy mogą zmniejszyć opóźnienie, ale zwiększyć częstotliwość przerwań i narazić na niedobory na obciążonej maszynie. Zachowaj najmniejszą wartość, która pozostaje stabilna dla Twojego obciążenia.
Jeśli urządzenie ma uszkodzone wejście/wyjście mapowane w pamięci, WirePlumber również je udostępnia api.alsa.disable-mmap. Dokumentacja źródłowa wyraźnie opisuje to jako zabezpieczenie przed utratą kompatybilności i zaznacza, że dostęp do odczytu/zapisu jest wolniejszy, więc nie należy go włączać, chyba że zniekształcenie wyraźnie koreluje z zachowaniem mapowania pamięci.
["api.alsa.disable-mmap"] = true,
Inną opcją specyficzną dla danego urządzenia jest session.suspend-timeout-seconds. Jeśli DAC trzeszczy lub zniekształca sygnał za każdym razem, gdy się wybudza, sprawdzenie dłuższego limitu czasu – lub 0wyłączenie wstrzymania dla danego węzła – może pomóc w ustaleniu przyczyny. Wyłączenie wstrzymania utrzymuje urządzenie ALSA w stanie zajętym, więc jest to raczej kompromis niż domyślne zalecenie.
5. Używaj .asoundrc tylko wtedy, gdy aplikacja faktycznie korzysta bezpośrednio z ALSA
Opcja „per-user” ~/.asoundrcmoże być przydatna w przypadku starszych aplikacji, które pomijają PipeWire i otwierają pliki PCM ALSA bezpośrednio. Może być również przydatna do testowania stałej częstotliwości próbkowania lub miksowania programowego. Jednak globalne nadpisanie domyślnej wartości ALSA może kolidować z wtyczką ALSA PipeWire, dlatego w miarę możliwości należy używać nazwanego PCM zamiast zastępować go pcm.!default.
Na przykład wtyczka ALSA dmixobsługuje jawne wartości rate, period_size, i buffer_size. Nazwany testowy PCM może wyglądać następująco:
pcm.stable_test {
type plug
slave.pcm "stable_dmix"
}
pcm.stable_dmix {
type dmix
ipc_key 2048
ipc_key_add_uid true
slave {
pcm "hw:0,0"
rate 48000
period_time 0
period_size 1024
buffer_size 4096
}
}
Wymień hw:0,0na rzeczywistą kartę i urządzenie z [brakuje aplay -linformacji o urządzeniu]. Następnie przetestuj bez zmiany ustawień domyślnych systemu:
aplay -D stable_test /usr/share/sounds/alsa/Front_Center.wav
Podpis: Użytkownik może zdefiniować stałe parametry ALSA na potrzeby kontrolowanych testów; należy ostrożnie korzystać z celu .asoundrcbezpośredniego, ponieważ omija on automatyczną konwersję formatu.hw
Projekt ALSA zauważa, że dmixma on stałą konfigurację bazową, chyba że wartości zostaną określone w definicji modułu podrzędnego, podczas gdy plugwtyczka może wykonywać konwersję formatu i szybkości transmisji. Dlatego łączenie nazwanego plugPCM z oddzielnie dostrojonym dmixPCM jest bezpieczniejsze w eksperymentach niż zmuszanie każdego programu do bezpośredniego otwierania surowego sprzętu.
6. Uruchom ponownie usługi audio użytkownika i przetestuj ponownie
Po zmianie reguły WirePlumber zrestartuj stos audio użytkownika. Najpierw zamknij aplikacje aktywnie korzystające z dźwięku.
systemctl --user restart wireplumber pipewire pipewire-pulse
Następnie powtórz ten sam materiał testowy, który był używany przed zmianą. Otwórz Ustawienia > Dźwięk i upewnij się, że oczekiwane urządzenie wyjściowe i profil są nadal wybrane.
Podpis: Po ponownym uruchomieniu usług audio sprawdź, czy Ubuntu nadal wybiera odpowiednie urządzenie wyjściowe i profil, zanim ocenisz, czy zniekształcenie zostało naprawione.
Jak ocenić, czy zmiana zadziałała
- Ten sam plik testowy jest odtwarzany wielokrotnie bez trzasków, buczenia, przycinania ani krótkich przerw.
- Zniekształcenia nie powracają po przejściu urządzenia w stan bezczynności i wybudzeniu.
- Standardowe aplikacje desktopowe, przeglądarki i połączenia wideo nadal korzystają z oczekiwanego urządzenia wyjściowego.
- Opóźnienie pozostaje akceptowalne w zależności od zastosowania; odtwarzanie muzyki może wytrzymać dłuższe buforowanie niż monitorowanie na żywo lub granie.
- Poprawka pozostaje stabilna po wylogowaniu i ponownym zalogowaniu lub ponownym uruchomieniu komputera.
Kiedy modyfikacje ALSA nie są właściwym rozwiązaniem
Nie zwiększaj buforów, jeśli objawem jest ewidentne przesterowanie sprzętowe, luźny kabel, przesterowane wejście analogowe, awaria koncentratora USB lub uszkodzony głośnik. Sprawdź również poziomy miksera za pomocą alsamixer; zniekształcenia występujące tylko przy głośności bliskiej 100% mogą być związane ze wzmocnieniem, a nie z harmonogramem.
Jeśli problem pojawił się po aktualizacji jądra lub oprogramowania układowego, przetestuj inne obsługiwane jądro z menu GRUB przed utworzeniem coraz bardziej złożonych reguł audio. Jeśli problem dotyczy tylko Bluetooth, skup się na kodeku/profilu Bluetooth, a nie na ustawieniach okresu ALSA. Jeśli problem dotyczy tylko HDMI, najpierw sprawdź profil HDMI i odbiornik/monitor.
Lista kontrolna wycofania
- Usuń lub zmień nazwę
~/.config/wireplumber/main.lua.d/51-alsa-tuning.lua.
- Przywróć
~/.asoundrckopię zapasową lub usuń plik testowy.
- Uruchom ponownie
wireplumber, pipewire, i pipewire-pulse.
- Uruchom ponownie
wpctl status, speaker-testaby sprawdzić, czy domyślne zachowanie zostało przywrócone.
Podsumowanie
W Ubuntu 24.04 należy zacząć od reguł ALSA opracowanych dla WirePlumber 0.4, a nie od ogólnego .asoundrczamiennika dla całego systemu. Należy zidentyfikować konkretny węzeł wyjściowy, zmieniać po jednej właściwości i porównywać ten sam testowy dźwięk po każdej zmianie. Rozmiar okresu, taki jak 1024, jest rozsądnym punktem wyjścia do diagnostyki, ale prawidłowa wartość zależy od urządzenia i obciążenia. Należy zarezerwować disable-mmap, zawiesić zmiany i dostosować dmixPCM w przypadkach, gdy testy wskazują konkretnie na te zachowania.