Исправление искажений звука в Ubuntu 24.04 с помощью настроек ALSA.

Искажения звука в Ubuntu 24.04 могут возникать на нескольких уровнях: в самом приложении, PipeWire, WirePlumber, ALSA, драйвере ядра или в аудиооборудовании. Практический подход заключается в том, чтобы сначала определить затронутое устройство, а затем изменять параметры буфера или устройства по одному. В стандартной версии Ubuntu 24.04 PipeWire работает поверх ALSA, а WirePlumber управляет устройствами ALSA, поэтому большинству пользователей следует настроить свойства ALSA, доступные через WirePlumber, прежде чем заменять конфигурацию ALSA по умолчанию.

В Ubuntu 24.04 изначально поставлялся PipeWire 1.0.4, и текущие пакеты Noble в Ubuntu продолжают использовать WirePlumber 0.4.17 вместо более нового формата конфигурации 0.5. Эта информация о версии важна, потому что WirePlumber 0.4 использует фрагменты Lua в каталоге `<package.json>` ~/.config/wireplumber/main.lua.d/. Более новый wireplumber.conf.dсинтаксис, который вы можете увидеть в текущей документации разработчиков, применяется к WirePlumber 0.5 и более поздним версиям. Перед копированием любой конфигурации проверьте установленную версию.

Официальные источники информации: примечания к выпуску Ubuntu 24.04 LTS , пакет WirePlumber для обновлений Noble в Ubuntu , справочник по настройке WirePlumber 0.4 ALSA и справочник по плагину ALSA PCM .

Краткий справочник: с чего начать?

СимптомПервая практическая проверкаВозможная корректировка
Потрескивание под нагрузкой на процессорУбедитесь, что раковина подключена правильно, и следите за наличием протечек.Попробуйте использовать больший размер периода ALSA, например, 1024 или 2048 кадров.
Искажения наблюдаются только на одном USB ЦАП.Определите точный узел ALSA/PipeWire.Применяйте правило только к этому узлу; избегайте глобального правила.
Шум при выходе устройства из режима ожиданияВоспроизводится через несколько секунд тишины.Увеличьте или отключите время ожидания приостановки для этого конкретного узла.
Проблемы в устаревшем приложении, использующем только ALSA.Протестируйте приложение с использованием aplayPCM или с явным указанием PCM.~/.asoundrcИспользуйте для каждого пользователя символ plug/dmix
Искажения при одной частоте дискретизацииТестирование материала с частотой 44,1 кГц и 48 кГц.Выберите поддерживаемую аппаратную частоту дискретизации и позвольте PipeWire выполнять передискретизацию при необходимости.

1. Определите аппаратное обеспечение ALSA и аудиостек.

Для начала отобразите список устройств воспроизведения и проверьте, какой аудиосервер активен. Не предполагайте, что hw:0,0это ваши колонки; HDMI, USB-гарнитуры, веб-камеры и док-станции могут менять нумерацию карт памяти между загрузками.

aplay -l
wpctl status
pactl info
wireplumber --version
pipewire --version
В терминале Ubuntu отображается вывод команды aplay -l с использованием встроенного аналогового устройства и устройства воспроизведения HDMI.

Подпись: В aplay -lописании устройства воспроизведения аналогового сигнала отделены от HDMI, что помогает избежать применения настроек ALSA к неправильной карте.

Если pactl infoотображается сообщение «PulseAudio (on PipeWire)», это нормально для Ubuntu 24.04. Интерфейс, совместимый с PulseAudio, предоставляется PipeWire. В стандартной версии Ubuntu 24.04/Noble wireplumber --versionобычно должна отображаться серия 0.4.x, если вы не установили другую сборку.

2. Перед изменением настроек подтвердите наличие искажений.

Используйте повторяемый тест, а не оценивайте изменения по случайным видеороликам из интернета. Короткий WAV-файл speaker-testили известная музыкальная композиция сделают сравнение «до» и «после» более информативным. Также проверьте, возникает ли проблема одинаково на аналоговом выходе, HDMI, Bluetooth и USB. Если проблема затрагивает только один канал, сузьте круг поиска до этого канала.

speaker-test -c 2 -t wav
aplay /usr/share/sounds/alsa/Front_Center.wav

Для USB-устройств ядро ​​предоставляет информацию о потоке по адресу /proc/asound/. Точный путь зависит от карты, поэтому /proc/asound/cardsсначала проверьте его, а не копируйте номер карты наугад.

Терминал Ubuntu отображает информацию о потоке ALSA PCM, включая частоту 48000 Гц, два канала и формат S16_LE.

Подпись: Информация о потоке ALSA может отображать активную частоту дискретизации, количество каналов и формат сэмплов для воспроизводимого потока; номер карты зависит от аппаратного обеспечения.

3. Создайте резервную копию текущей пользовательской конфигурации.

Перед редактированием сохраните все существующие переопределения ALSA или WirePlumber. Изменения на уровне пользователя безопаснее, чем редактирование файлов в каталоге /usr/share, поскольку обновления пакетов могут заменить системные файлы.

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

Если вы ранее скопировали конфигурацию из руководства, написанного для WirePlumber 0.5, удалите или переместите её перед тестированием на стандартной Ubuntu 24.04. WirePlumber 0.4 и 0.5 используют разные форматы конфигурации.

4. Настройка поведения буфера ALSA с помощью WirePlumber 0.4

В Ubuntu 24.04 это обычно наиболее важная настройка на уровне ALSA, поскольку WirePlumber создает и настраивает узлы PipeWire, использующие ALSA. В документации WirePlumber api.alsa.period-sizeразмер периода описывается как в примерах, так и api.alsa.headroomкак дополнительная буферизация между аппаратными и программными указателями. Большинство USB-устройств обрабатываются как пакетные устройства, и размер периода влияет как на частоту прерываний, так и на поведение буферизации.

Создайте правило для пользователя:

nano ~/.config/wireplumber/main.lua.d/51-alsa-tuning.lua

Используйте правило, которое нацелено только на проблемный выходной узел. Сначала получите имя узла с помощью wpctl statusили pw-cli list-objects Node. Затем адаптируйте этот пример:

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)

Не следует рассматривать 1024 как универсальное магическое значение. Это консервативная контрольная точка. Если искажения сохраняются, сравните 512, 1024 и 2048 по очереди. Большие периоды могут улучшить устойчивость к задержкам планирования в некоторых системах, но увеличивают задержку; меньшие периоды могут уменьшить задержку, но увеличить частоту прерываний и могут выявить переполнения буфера на перегруженной машине. Выбирайте наименьшее значение, которое остается стабильным для вашей рабочей нагрузки.

Если устройство имеет нарушенный ввод-вывод с отображением в память, WirePlumber также предоставляет доступ к этой функции api.alsa.disable-mmap. В документации разработчика это явно описывается как резервный вариант обеспечения совместимости и отмечается, что доступ на чтение/запись осуществляется медленнее, поэтому не следует включать эту функцию, если искажение явно не коррелирует с поведением mmap.

["api.alsa.disable-mmap"] = true,

Ещё один вариант, специфичный для конкретного устройства, — это [указать опцию] session.suspend-timeout-seconds. Если ЦАП издаёт щелчки или искажения каждый раз при пробуждении, увеличение времени ожидания или 0отключение режима приостановки для этого узла может помочь выявить причину. Отключение режима приостановки заставляет устройство ALSA быть постоянно занятым, поэтому это скорее компромисс, чем рекомендация по умолчанию.

5. Используйте файл .asoundrc только в том случае, если приложение действительно использует ALSA напрямую.

Использование именованного PCM для каждого пользователя ~/.asoundrcможет быть полезно для старых приложений, которые обходят PipeWire и открывают PCM-файлы ALSA напрямую. Это также может быть полезно для тестирования поведения с фиксированной частотой дискретизации или программным микшированием. Однако глобальное переопределение значения по умолчанию ALSA может помешать работе плагина PipeWire ALSA, поэтому по возможности используйте именованный PCM-файл вместо замены pcm.!default.

Например, dmixплагин ALSA поддерживает явное указание значений rate, period_size, и buffer_size. Именованный тестовый PCM может выглядеть следующим образом:

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
    }
}

Замените hw:0,0на фактические данные карты и устройства из файла aplay -l. Затем протестируйте, не изменяя системные настройки по умолчанию:

aplay -D stable_test /usr/share/sounds/alsa/Front_Center.wav
Редактирование пользовательского файла .asoundrc в GNU nano на Ubuntu с использованием аппаратного PCM, частотой 48000 Гц, размером периода 1024 и размером буфера 4096.

Подпись: Для контролируемого тестирования каждый пользователь может задать фиксированные параметры ALSA; следует с осторожностью использовать .asoundrcпрямое целевое значение, поскольку оно обходит автоматическое преобразование формата.hw

В проекте ALSA отмечается, что dmixбазовая конфигурация фиксирована, если значения не указаны в определении ведомого устройства, в то время как plugплагин может выполнять преобразование формата и скорости передачи данных. Именно поэтому объединение именованного plugPCM с отдельно настроенным dmixPCM безопаснее для экспериментов, чем принудительное открытие каждым программным обеспечением необработанных аппаратных данных напрямую.

6. Перезапустите пользовательские аудиослужбы и повторите проверку.

После изменения правила WirePlumber перезапустите пользовательский аудиостек. В первую очередь закройте приложения, которые активно используют звук.

systemctl --user restart wireplumber pipewire pipewire-pulse

Затем повторите тестирование с тем же тестовым материалом, что и до внесения изменений. Откройте «Настройки» > «Звук» и убедитесь, что выбраны ожидаемое устройство вывода и профиль.

В панели «Звук» настроек Ubuntu отображаются встроенные динамики, выбранные с профилем «Аналоговый стереовыход».

Подпись: После перезапуска аудиослужб убедитесь, что Ubuntu по-прежнему выбирает нужное устройство вывода и профиль, прежде чем судить о том, устранено ли искажение.

Как определить, сработала ли настройка?

  • Один и тот же тестовый файл воспроизводится многократно без треска, жужжания, искажений или коротких провалов.
  • Искажения не возвращаются после перехода устройства в режим ожидания и пробуждения.
  • Обычные настольные приложения, браузеры и видеозвонки по-прежнему используют ожидаемое устройство вывода.
  • Задержка остается приемлемой для вашего сценария использования; воспроизведение музыки может выдерживать большую буферизацию, чем мониторинг в реальном времени или игры.
  • Решение проблемы остается стабильным после выхода из системы и повторного входа или перезагрузки.

Когда изменения в ALSA не являются правильным решением

Не следует продолжать увеличивать буферы, если симптомом явно является аппаратное искажение, неплотно прилегающий кабель, перегрузка аналогового входа, неисправность USB-концентратора или плохой динамик. Также проверьте уровни микшера alsamixer; искажения, возникающие только при громкости около 100%, могут быть связаны с усилением, а не с проблемой планирования.

Если проблема возникла после обновления ядра или прошивки, протестируйте другое поддерживаемое ядро ​​из меню GRUB, прежде чем создавать всё более сложные правила обработки звука. Если проблема затрагивает только Bluetooth, сосредоточьтесь на кодеке/профиле Bluetooth, а не на настройках периода ALSA. Если проблема затрагивает только HDMI, сначала проверьте профиль HDMI и ресивер/монитор.

Контрольный список отката

  • Удалить или переименовать ~/.config/wireplumber/main.lua.d/51-alsa-tuning.lua.
  • Восстановите данные ~/.asoundrcиз резервной копии или удалите файл, предназначенный только для тестирования.
  • Перезапустите wireplumber, pipewire, и pipewire-pulse.
  • Повторите запуск wpctl status, speaker-testчтобы убедиться, что вернулось поведение по умолчанию.

Итог

Для Ubuntu 24.04 начните с целевых правил WirePlumber 0.4 ALSA, а не с широкой .asoundrcзамены в масштабах всей системы. Определите точный выходной узел, изменяйте по одному свойству за раз и сравнивайте один и тот же тестовый аудиофайл после каждого изменения. Размер периода, например, 1024, является разумной отправной точкой для диагностики, но правильное значение зависит от устройства и рабочей нагрузки. Зарезервируйте disable-mmap, приостановите изменения и используйте пользовательские dmixPCM-файлы для случаев, когда ваши тесты указывают именно на такое поведение.

Оставить комментарий

Как безопасно восстановить потерянные разделы и данные с жесткого диска

Как безопасно восстановить потерянные разделы и данные с жесткого диска

Узнайте, как восстановить потерянные разделы и файлы с помощью TestDisk и PhotoRec. Защитите исходный диск, проведите безопасное сканирование и сохраните восстановленные данные на другой диск.

Как сканировать QR-коды на настольном компьютере с Linux

Как сканировать QR-коды на настольном компьютере с Linux

Сканируйте QR-коды в Linux с помощью CoBang, используя веб-камеру или файл изображения. См. варианты установки, шаги настройки и решения проблем с доступом к камере Flatpak.

Как изменить настройки веб-камеры в Linux с помощью Cameractrls

Как изменить настройки веб-камеры в Linux с помощью Cameractrls

Изменяйте настройки веб-камеры в Linux с помощью Cameractrls: настраивайте экспозицию, цвет, подавление мерцания и другие поддерживаемые параметры, а затем проверяйте совместимые видеорежимы.

Как установить PhpStorm на Linux: Toolbox, Tar.gz, Snap и AUR

Как установить PhpStorm на Linux: Toolbox, Tar.gz, Snap и AUR

Установите PhpStorm на Linux с помощью JetBrains Toolbox или автономного архива tar.gz, а также через Snap и Arch AUR. Java уже включена в комплект.

Как создать резервную копию CD-ROM в формате ISO в Linux

Как создать резервную копию CD-ROM в формате ISO в Linux

Создайте образ CD-ROM ISO в Linux с помощью GNOME Disks или dd. Определите оптический привод, отслеживайте процесс копирования, проверяйте образ и узнавайте, когда поврежденный диск или аудиодиск требует использования другого инструмента.

Как вырезать изображение в Linux с помощью GIMP

Как вырезать изображение в Linux с помощью GIMP

Удаление фона фотографии в Linux с помощью GIMP: обведите контур объекта, удалите выделенный фон, сохранив прозрачность, и экспортируйте многоразовый PNG-файл.

Как установить Cisco Packet Tracer на Linux

Как установить Cisco Packet Tracer на Linux

Загрузите Cisco Packet Tracer 9.0.1 для Ubuntu 64-бит, установите DEB-пакет с помощью APT, примите лицензионное соглашение в Терминале и войдите в систему, чтобы начать лабораторную работу.

Скачайте FlightGear бесплатно: официальное руководство по установке

Скачайте FlightGear бесплатно: официальное руководство по установке

Скачайте FlightGear бесплатно с официального сайта. Сравните пакеты для Windows, macOS и Linux, установите файлы данных и совершите свой первый полет.

Настольное приложение Google Tasks: как им пользоваться на компьютере

Настольное приложение Google Tasks: как им пользоваться на компьютере

Откройте Google Задачи в браузере, добавьте ярлык Chrome или запустите приложение, и управляйте задачами с указанием даты через Календарь и Gmail.

OKSampler: Бесплатный и простой музыкальный сэмплер для клавишных ритмов.

OKSampler: Бесплатный и простой музыкальный сэмплер для клавишных ритмов.

OKSampler сопоставляет MP3-клипы с клавишами клавиатуры и может зацикливать аудио. Узнайте, что делает эта старая бесплатная программа, на чем заканчиваются ее старые функции и что нужно проверить перед загрузкой.