Меню Рубрики

Установка звука в линуксе

Настройка звука в Ubuntu

У меня есть хобби — написание музыки. Поэтому после установки свежей версии Ubuntu на свой ноутбук мне понадобилось настроить звук чуть более тонко, чем обычным пользователям. К моему сожалению, сделать это у меня не вышло. Тем не менее, я хочу рассказать о шагах, которые немного приблизили меня к результату. Я надеюсь, что кому-то это сэкономит время. А может, с помощью читателей я смогу пройти дальше. Если вы пользуетесь Linux и можете произнести слова sidechain и компрессия в одном осмысленном предложении — Добро пожаловать!

Кратко

Для начала более подробно о сути задачи: есть ноутбук Asus N55 с Kubuntu 17.10 на борту. Нужно добиться той же конфигурации, которую можно получить на Windows:

  • Без подключения сабвуфера драйвер работает в режиме 2.0
  • При подключении сабвуфера драйвер переключается в режим 2.1. При этом переключении к каналам применяются частотные фильтры — НЧ для сабвуфера и ВЧ для колонок
  • При подключении наушников, вывод звука переключается на них, вывод на колонки/сабвуфер приостанавливается
  • При необходимости низких задержек можно с помощью выбора другого драйвера перейти в режим, обеспечивающий монопольный захват звуковой карты

Сразу после установки получаем нерабочий сабвуфер и нерабочие наушники.
В результате моих опытов мне удалось добиться следующего состояния системы:

  • Драйвер работает в режиме 2.1
  • При подключении сабвуфера ничего не изменяется
  • При подключении наушников, вывод звука переключается на них, вывод на колонки/сабвуфер приостанавливается, но фильтры продолжают работать и в наушники идут только ВЧ
  • При необходимости низких задержек можно адресоваться к карте через ALSA, но в этом режиме не работает сабвуфер, фильтры. Но работает переключение на наушники

Для знакомства с LMMS(с которой как оказалось нормально работать нельзя, но это отдельная тема) этого в общем-то хватает.
Если вы тоже добрались до этого состояния, то ничего нового этой статьей я вам не расскажу.

Обзор

Вы когда-нибудь задумывались о том, как устроена звуковая система Linux? Вот и я нет — обычно звук либо был не нужен, либо как-то работал, колонки играли — ни о каких фокусах подключения сабвуфера или наушников речи не было.
Похоже, теперь самое время узнать об этом немного больше. Гугление показало следующую картину:

Мысль первая: удаляем PulseAudio — ставим JACK

Мало кто говорит, что PulseAudio де-факто является стандартом для интеграции звука, по крайней мере в Ubuntu. Практически любой софт, который издает звуки, будет с большой долей вероятности пользоваться PulseAudio API. FF, например, для поддержки JACK надо отдельно собирать.
Поэтому удалять PulseAudio не стоит, если вы не уверены, что все чем вы будете пользоваться, умеет работать с JACK. Видимо, поэтому существует еще вариант интеграции Jack-PulseAudio. Но от этого варианта я отказался, т.к. для работы в том софте, где требуются низкие задержки, меня устраивает монопольный доступ через ALSA(под Windows это работает так же — там, где нужна низкая задержка, запрашивается монопольный доступ). Возможно, когда дело дойдет до установки какого-нибудь Ardour, мне придется вернуться к этому варианту.

Мысль вторая: ALSA и PulseAudio надо настраивать

Так, ну хорошо, JACK не нужен. Выходит, чтобы все заработало, мне надо настроить ALSA-компонент для своей карточки и интеграцию его с PulseAudio

PulseAudio

Тут нам из коробки предлагают вот такую UI консоль

Мне кажется, к такому инструменту пояснения излишни. После применения настроек вы сразу сможете слышать изменения, так что пробуйте.
Еще amarao советует обратить внимание на pactl /pacmd. Если я доберусь — напишу, что там к чему с этими утилитами

Диагностика ALSA

Первым делом понадобятся хоть какие-то инструменты для диагностики — это пакет alsa-utils
sudo apt install alsa-utils
Теперь посмотрим, как видит наше оборудование система
aplay -l

Кроме того, настройки надо проверять. Для этих целей обнаружилась утилита speaker-test

вызов speaker-test —help покажет, что умеет утилита, но мне особенно интересна конфигурация
speaker-test -Dplughw:1,0 -c4

  • -D — id устройства. 1,0 — это индексы устройства и подустройства, их мы видели выше в выводе aplay
    а вот структура текстовой части описана тут
  • -c — количество каналов на которые будет выведен тест
    В моем случае первые 2 канала работают хорошо, а вот дальше интересно — 3й канал LFO не звучит, но зато звучит 4й канал. Такое ощущение, что LFO настроен как… стерео. Мне кажется, это часть моей проблемы.

Настройка ALSA

Тут и тут советуют поизучать dmix — это модуль микшера каналов в ALSA — буду смотреть

alsamixer

alsamixer — псевдографический интерфейс микшера. Половина советов по настройке ограничивается этой утилитой. И действительно, именно эта утилита часто покажет, когда канал неожиданно замьютился или у него сбросился уровень громкости.

Но настройка в микшере результата не дала.

hdajacksensetest

Следующая полезная утилита — hdajacksensetest. Показывает какие разъемы детектируют подключение внешних устройств.

Ок, я вижу, что мой внешний сабвуфер подключен на порт 0x1a.
Давайте попробуем найти как можно объяснить карте, куда выводить LFO.

hdajackretask

Большинство советов по настройке маппинга указывают на утилиту hdajackretask:

Тут вроде бы все понятно — есть порты, есть маппинг. К сожалению, никакие манипуляции с портом 0x1a к успеху не привели.
Может, после настройки надо явно перезагружать сервисы?
sudo alsa force-reload
Нет, смотрим дальше.

HDAAnalyzer

Для настройки маппинга есть еще одна утилита:
скачать ее можно в виде python-скрипта(. ) вот тут.

Выглядит эта штука как прокачанный вариант hdajackretask — она даже умеет строить схему маршрутизации портов графически. Но эксперименты с этой штукой тоже не привели ни к чему, кроме полной потери звука.
Никакого гайда по настройке я не нашел, поэтому пробовал методом проб и ошибок.

Правка конфигов

Других утилит, способных помочь в настройке звука я не обнаружил. Остается попробовать только одно — искать и править конфиги. С помощью гугла и find, мне удалось обнаружить несколько локаций.

PulseAudio

/usr/share/pulseaudio
в папке alsa-mixer тут лежат конфиги. Т.к. Pulseaudio более-менее работает тут я ничего трогать не стал.
/etc/pulse/daemon.conf
Как я понял, это настройки службы pulseaudio — один из немногих конфигов, изменения в котором на что-то влияют. именно тут настройками:
enable-lfe-remixing = yes
lfe-crossover-freq = 200
я заставил звучать свой сабвуфер из Pulseaudio так, как он должен. Для lfe-crossover-freq 200 — это очевидно частота среза в герцах.
Но тут же становится очевидно, что настроить нечто более сложное(при подключении наушников прекращать отправлять бас на сабвуфер) в этом конфиге возможности нет.

/usr/share/alsa/*
Тут лежит несколько shell-скриптов, в т.ч. alsa-info.sh, который может быть полезен при подготовке дефекта в трекере и т.д.
а в папке pcm какие-то конфиги, разобраться в которых мне не удалось:

Трогать их я пока не решился.
/etc/modprobe.d/alsa-base.conf — второй доказанно полезный конфиг. Вот эта строчка, дописанная в низ конфига, реально заставила работать наушники под ALSA:
options snd-hda-intel model=auto,auto probe_mask=1
Про настройку этого конфига написано довольно много. Одна из его целей, как я понял — сопоставить устройствам кодеки(model). Кодеки это… какой-то пресет маппингов… Есть табличка (копия есть тут). Думаю, в большинстве случаев для стандартных конфигураций этого действительно достаточно.
Там описаны модели для разных контроллеров. Но если для вас они не срабатывают, то вам рекомендуют добавить свою конфигурацию.
Звучит классно, но тут я должен сделать 2 ремарки:

  • гайда как сделать свою конфигурацию — что конфигурить, куда сохранять, коммитить и т.д. я не нашел.
  • После изменения настроек в alsa-base.conf нужно перезагружать ОС. Без перезагрузки никакие sudo alsa force-reload и даже хардкорный echo 1 | sudo tee /sys/class/sound/hwC1D0/reconfig не заставляют ALSA перечитать кодек устройства.

Кстати, в /sys/class/sound/hwC1D0/ — лежат файлы уже непосредственно устройства, т.е. как я понял hdajackretask работает именно с этими файлами. Тут тоже, наверное, можно сделать что-то полезное, если знать куда что писать.

Выводы

На этом у меня все. После правок в daemon.conf и alsa-base.conf , я получил результат, описанный в начале. Это все, чем я мог помочь вам в деле настройки звука под Ubuntu.
Большинство приведенной тут информации я получил здесь и документации ALSA на Arch Linux.
Как я и говорил, после проделанной работы появляется больше вопросов, чем ответов:

  • как так pulseaudio нормально работает с сабвуфером, а ALSA нет.
  • какие все-таки конфиги надо править для правки маппинга портов??
  • как оформить вот свою модель HD-Audio.
  • насколько ALSA эффективна по сравнению с аналогами в других ОС? подходит ли она вообще для работы со звуком?

Общий вывод, который я могу сделать по результатам проделанной работы: в целом видно, что если GUI, например, сообщество более-менее занимается, то звуковая подсистема явно остается за бортом.
На сегодняшний день возможности использования этой подсистемы не выдерживают никакой конкуренции с аналогами в других популярных ОС.
Такие досадные проблемы, как неработающий сабвуфер или наушники, или отсутствие НЧ-фильтра для сабвуфера, заставляют еще раз подумать, прежде чем отказываться от предустановленного софта. Ведь никому не хочется получать от своей железки меньше отдачи из-за кривостей ОС.

з.ы. Если есть еще какие-то инструменты, мануалы, про которые полезно знать при настройке звука — пишите, я добавлю их в статью
з.з.ы. По поводу своей конкретной проблемы я завел тикет, владельцы Asus N55 — велкам:
https://bugs.launchpad.net/ubuntu/+source/alsa-driver/+bug/1733029

Редакторский дайджест

Присылаем лучшие статьи раз в месяц

Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.

Похожие публикации

Воссоздание старой DOS-игры на C++ 17

Энтузиаст воссоздал звуковую карту Sound Blaster 1.0 — рассказываем, чем примечателен проект

JAVA SOUND API основы

Вакансии

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Комментарии 58

тут много странной неописанной магии

к сожалению хороших гайдов еще не выгуглил, но доки намекают на немалые возможности… а ещё если все это «запитонить на гуях. »

Поздравляю вы столкнулись с intel hda. У меня была такая проблема поначалу. Но параметр options snd-hda-intel model всё поправил. В последних версиях вроде само работает из коробки.

Но есть другие чудеса в ubuntu. (У меня 14.04 LTS)
1. Например хочется записать звук который воспроизводится на колонки. Оказывается это делается весьма замысловато.

/etc/modprobe.d/sound.conf
options snd_hda_intel index=0
options snd_aloop index=1

/etc/modprobe.d/sound.conf
options snd_hda_intel index=0
options snd_aloop index=1

Получается, если звук на компьютере не задействуется по прямому назначению — можно добавить «входной» канал:

При замыкании разъёмов аудиовыхода/микрофона соответствующим сопротивлением можно инициировать запуск shell-скрипта?

вот еще интересный, наверное, проект

там еще был какой-то проект по графическому проектированию звука, но наиболее зрелые что-то не очень-то и развиваются(ИМХО) ну и внезапные падение порой… случаются

Странно, что до сих пор не нашлось аналога Canonical или RedHat, зарабатывающего на Linux в сообществе звукорежиссеров etc.

Софт там специфичный и под линь его нет. Это во-первых.

Производители софта плотно играют в игры, которыми, формально, должен бы заинтересоваться антимонопольный, но всем пофиг. Это мы еще не говорим о стоимости портирования. Это во-вторых.

Лейблы накопили просто феерическое количество форматов и сорцов, которые они пока не знают ни как монетизировать, ни как конвертить и вообще что с ним делать. Там сильная привязка к старым системам. Это в третьих.

Звукорежиссеры не определяют тренды, а следуют им. Что и как будет использоваться, определяют лейблы, которые сидят на контенте. И для независимых, кстати, тоже, т.к. это выбор софта и инфраструктуры. Можно легко и непринужденно, например, прибить ремиксеров всего мира к конкретному софту и платформе. Это в четвертых.

Поэтому звукорежиссеры переедут на линь последними, когда он станет мейнстримом и лейблы скажут ну ок, мигрируем.

Все, все что мог помимо NDA сказать — сказал.

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

Оплата работы — идет за время. Уменьшил скорость из-за освоения нового софта — все равно, что поднял расценки.

Звукорежиссеру очень важна программа, с которой идет работа. Тот самый автоматизм на уровне пальцев. Смена программы — это примерно год-два на освоение на уровне автоматизма. Даже смена версии происходит со скрипом из-за мелких отличий в интерфейсе.

Кроме программы используется набор плагинов, тем или иным способом, обрабатывающих звук. Часть из них купленная, часть — вылеченная «таблеткой от жадности», но в целом этот набор — подороже программы. И опять-таки, переучиться на другой набор — можно, но долго. А для плагинов из имеющегося набора, звукорежиссер просто знает, что при каких положениях ручек, этот набор выдаст.

Железо — очень специфично. Например звуковая карта за $5000 — это всего лишь АЦП, без ЦАП (для ЦАП — вторая звуковуха). Подключается оно по FireWire и предназначено для монтажа в стойку. Поток данных — больше характерен для видео, чем для аудио — 192кГц на 48 бит на 8 каналов.

Сама операционка и комп — не важны. Когда Logic Pro перестал выходить под windows, то проще было сменить железо и устроить hackintosh, чем переходить на другую программу.

Водяное охлаждение… ну или оно, или вытаскивать экран, клавиатуру и мониторы в другую комнату. Водяное — было сделать проще, чем IP-KVM.

Задачки там чудные. Что стоит устройство внутреннего телевидения ради передачи кивка от аккомпаниатора к солисту.

Такого уровня студий — 5-10 в Питере, наверное до 1000 в России. Это же не высший пилотаж, а почти любительская студия.

но при этом доступ этот монопольный — включить песню в VLC и открыть видео в браузере, увы, не получится

Тут вас кто-то обманул. Я, прочтя это, сильно удивился, пошёл запустил видео в vlc, открыл youtube ролик в хроме и включил песню в амароке. Все три источника заиграли одновременно и беспроблемно. Голая alsa.
Ну, то есть kde поверх неё ещё 😉

Насколько я знаю, в kde есть для этого phonon.

У меня тоже всё работает безо всяких дурацких надстроек (типа pulseaudio). Единственное назначение pulseaudio — удовлетворить зависимости того плохо написанного софта, который не знает про alsa но знает про pulseaudio (например ms после покупки скайпа быстро его привели к данному состоянию).

Поддерживая gentoo, alsa only. Все работает шикарно на ноуте 12 года

ALSA же нужна для работы с драйвером устройства, т. е. она, к примеру, не сможет обеспечить вам вывод одновременно звука с просматриваемого вами ётюба и музыки с какого-нибудь плейера

Слушайте, но смешно же. Попробуйте уже сами, всё прекрасно выводится, я же написал, что хотя и был уверен, но удивился и специально пошёл проверять — включил vlc, YouTube и amarok.
Зы пришлось отказаться от файрфокса, который не осилил в алса, это менее болезненно, чем лезть в этот кошмар с пульсой.

Так микшер входит в пакет ALSA и делает всё то, о чём вы написали «вы несколько недопонимаете зачем нужен общесистемный микшер, каковым и является PulseAudio». Зачем мне выводит напрямую в устройство и иметь проблемы с монопольным доступом, если я могу выводить это через микшер, который уже есть в алсе? И, тк у меня уже есть микшер, зачем мне ещё пульс городить? Вывод из vlc и ютюба спокойно работает «из коробки».

Вы на вопрос так и не ответили. Зачем нужен микшер из левой надстройки (pulseaudio), когда микшер есть и без неё?

Сколько помню, он всегда из коробки работал. Другое дело, что у альсы обычно фиксированная задержка (latency), на встроенном звуке порядка 20-25 мс, а у пульсы она динамическая, вплоть до 0.5 мс. Но там хватает своих проблем, например, если ядро не PREEMPT, даже со всеми реалтаймовыми и высокоприоритетными хаками пульса порой скипает, т.е. буфер опустошается, и слышен щелчок. При этом пульса начинает адаптироваться и увеличивать внутренние вотермарки и минимальную задержку. Если проц был сильно нагружен, то задержка может прыгнуть очень высоко, вплоть до 100-160 мс, и что интересно, механизмов автоматического её снижения, а также задания отличного от 0.5 мс минимума в коде нет, я смотрел (можно задать фиксированную задержку, как в альсе, но динамическая всегда начинается от 0.5). Задержка сбросится только после перезапуска демона.

Я чисто из-за этих трюков собираю собственное ядро с CONFIG_PREEMPT и таймером 1000 Гц, потому что в дебиане 100 Гц без преемптивности. Раньше долго сидел на альсе, но пульса в итоге пролезла везде и победила, да и стримить с ней куда проще, чем городить лупбэки.

Сколько помню, он всегда из коробки работал.

Попробуйте всё-таки Jack.
Правда я не думаю что получится сделать с ним такую конфигурацию, как описана в начале поста (хотя qjackctl поддерживает разные скрипты, которые можно запускать при старте/остановке сервера), но вполне вероятно что проблем именно с написанием музыки будет чуть меньше.
По крайней мере, у меня так. Я где-то семь лет уже занимаюсь тем же хобби и 4 года из них с Jack. Не могу сказать что работает он безупречно (его тоже надо настраивать и разные версии могут работать по разному), однако с задачей обрабатывать звук в реальном времени он справляется. А так работаю в Ardour, выходы на аппаратуру переключаю из него же.
Плюс удобная маршрутизация через какую-нибудь Catia есть (в qjackctl тоже можно, но там несколько топорно это сделано, на мой взгляд).
Кроме того, пользуюсь ещё и модулем jack-pulseaudio. Можно создать «мост» через который звук pulseaudio будет поступать в jack (решит задачу «записать звук с колонок», о которой писали в комментариях, правда несколько иным путем, поскольку он не с колонок будет записываться а с приложения, которое будет передавать звук на колонки), и наоборот. В Cadence есть поддержка «мостов» alsa-jack, pulseaudio-jack, alsa-midi и т.д.
Посмотрите этот софт, возможно, он поможет.

Cadence и qjackctl — софт для запуска и конфигурации Jack. Не могу сейчас точно написать (далеко от компьютера), но вроде бы скрипты для запуска и прочего есть только в qjackctl. Но я не уверен.

И ещё, последнее — Jack может здорово забивать свой собственный лог, который, как правило, находится в домашней папке (если вы запускаете его от обычного пользователя, разумеется). Поэтому убедитесь заранее в том, что на диске есть место, и периодически проверяйте размер лога Jack. Я не имею ввиду что так случается постоянно, но у меня раз в 3-4 месяца точно бывает, при том что я работаю с ним по выходным. В моем случае система установлена на ssd (домашний раздел, конечно, тоже), где не очень много места, поэтому лог Jack размером в пару десятков гигабайт иногда приходится удалять.
Возможно, я его просто плохо настроил. Возможно, это его баг. Не задавался этим вопросом, но предупредить, мне кажется, стоит.

источник

Читайте также:  Установка лотков водоотводных в отмостку