Napraw zniekształcenia dźwięku w Ubuntu 24.04 za pomocą poprawek konfiguracji ALSA

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

ObjawPierwsze sprawdzenie praktycznePotencjalna poprawka
Trzaski przy obciążeniu procesoraSprawdź, czy odpływ jest prawidłowy i zwróć uwagę na przerwy w dostawie prąduPrzetestuj większy rozmiar okresu ALSA, np. 1024 lub 2048 ramek
Zniekształcenia tylko na jednym przetworniku cyfrowo-analogowym USBZidentyfikuj dokładny węzeł ALSA/PipeWireZastosuj regułę tylko do tego węzła; unikaj reguły globalnej
Hałas podczas wybudzania urządzenia ze stanu czuwaniaOdtwórz po kilku sekundach ciszyZwiększ lub wyłącz limit czasu zawieszenia dla danego węzła
Problemy w starszej aplikacji obsługującej wyłącznie ALSAPrzetestuj aplikację za pomocą aplayPCM lub jawnego PCMUżyj na użytkownika ~/.asoundrcz plug/dmix
Zniekształcenie przy jednej częstotliwości próbkowaniaTestuj materiał 44,1 kHz i 48 kHzWybierz 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
Terminal Ubuntu pokazujący wynik polecenia aplay -l z wbudowanym urządzeniem analogowym i urządzeniem odtwarzającym HDMI

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.

Terminal Ubuntu pokazujący informacje o strumieniu ALSA PCM, w tym częstotliwość 48000 Hz, dwa kanały i format S16_LE

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
GNU nano w systemie Ubuntu edytuje plik użytkownika .asoundrc przy użyciu sprzętowego PCM, częstotliwości 48000 Hz, rozmiaru okresu 1024 i rozmiaru bufora 4096

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 dmix​​ma 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.

Panel Dźwięk w Ustawieniach Ubuntu pokazujący wbudowane głośniki wybrane za pomocą profilu wyjścia analogowego stereo

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.

Zostaw komentarz

Jak bezpiecznie odzyskać utracone partycje i dane z dysku twardego

Jak bezpiecznie odzyskać utracone partycje i dane z dysku twardego

Dowiedz się, jak odzyskać utracone partycje i pliki za pomocą TestDisk i PhotoRec. Zabezpiecz dysk źródłowy, przeskanuj go bezpiecznie i zapisz odzyskane dane na innym dysku.

Jak skanować kody QR na komputerze stacjonarnym z systemem Linux

Jak skanować kody QR na komputerze stacjonarnym z systemem Linux

Skanuj kody QR w systemie Linux za pomocą CoBang, używając kamery internetowej lub pliku obrazu. Zobacz opcje instalacji, kroki konfiguracji i poprawki dotyczące dostępu do kamery Flatpak.

Jak zmienić ustawienia kamery internetowej w systemie Linux za pomocą Cameractrls

Jak zmienić ustawienia kamery internetowej w systemie Linux za pomocą Cameractrls

Zmień ustawienia kamery internetowej w systemie Linux za pomocą narzędzia Cameractrls: dostosuj ekspozycję, kolor, redukcję migotania i inne obsługiwane elementy sterujące, a następnie sprawdź zgodne tryby wideo.

Jak zainstalować PhpStorm na Linuksie: Toolbox, Tar.gz, Snap i AUR

Jak zainstalować PhpStorm na Linuksie: Toolbox, Tar.gz, Snap i AUR

Zainstaluj PhpStorm na Linuksie za pomocą JetBrains Toolbox lub samodzielnego archiwum tar.gz, a także opcji Snap i Arch AUR. Java jest już dołączona.

Jak wyciąć obraz w systemie Linux za pomocą programu GIMP

Jak wyciąć obraz w systemie Linux za pomocą programu GIMP

Usuń tło zdjęcia w systemie Linux za pomocą programu GIMP: narysuj obiekt, usuń wybrane tło, zachowaj przezroczystość i wyeksportuj plik PNG, który można ponownie wykorzystać.

Jak wykonać kopię zapasową płyty CD-ROM w postaci obrazu ISO w systemie Linux

Jak wykonać kopię zapasową płyty CD-ROM w postaci obrazu ISO w systemie Linux

Utwórz obraz ISO płyty CD-ROM w systemie Linux za pomocą GNOME Disks lub dd. Zidentyfikuj napęd optyczny, monitoruj kopiowanie, zweryfikuj obraz i dowiedz się, kiedy uszkodzona płyta lub płyta audio wymaga użycia innego narzędzia.

Jak skonfigurować dwa panele w środowisku XFCE 4

Jak skonfigurować dwa panele w środowisku XFCE 4

Utwórz oddzielny panel XFCE 4 dla każdego wyświetlacza, przypisz drugi panel do odpowiedniego wyjścia, określ jego położenie i rozmiar, a następnie dodaj potrzebne elementy uruchamiające i statusu.

Jak zainstalować Cisco Packet Tracer w systemie Linux

Jak zainstalować Cisco Packet Tracer w systemie Linux

Pobierz Cisco Packet Tracer 9.0.1 dla systemu Ubuntu 64-bit, zainstaluj pakiet DEB za pomocą APT, zaakceptuj licencję w terminalu i zaloguj się, aby rozpocząć laboratorium.

Pobierz FlightGear za darmo: Oficjalny przewodnik instalacji

Pobierz FlightGear za darmo: Oficjalny przewodnik instalacji

Pobierz FlightGear za darmo z oficjalnej strony. Porównaj pakiety dla systemów Windows, macOS i Linux, zainstaluj pliki danych i rozpocznij swój pierwszy lot.

OKSampler: darmowy, prosty sampler muzyczny do rytmów klawiszowych

OKSampler: darmowy, prosty sampler muzyczny do rytmów klawiszowych

OKSampler mapuje klipy MP3 na klawisze klawiatury i umożliwia zapętlanie dźwięku. Dowiedz się, co robi ten starszy, darmowy program, gdzie kończą się jego stare funkcje i co sprawdzić przed pobraniem.