Как устроена звуковая система в Linux?

Есть ли на сайте спецы, которые расскажут как устроена звуковая система в Linux? Как устроена в Windows 7 примерно представляю — потрясающе убого. Единственная возможность получить качественный звук — попросить Windows вообще не прикасаться к аудиоданным (режим WASAPI Exclusive) и выводить их напрямую.

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

И раз уж зашла речь о качественном звуке, кто чем проигрывает FLAC в Linux?

field_vote: 
Ваша оценка: Нет Средняя: 4.3 (3 оценки)

Как устроена в Windows 7 примерно представляю — потрясающе убого. Единственная возможность получить качественный звук — попросить Windows вообще не прикасаться к аудиоданным (режим WASAPI Exclusive) и выводить их напрямую.

И что там "убого"? WASAPI - это стандартный API в Windows, который может использоваться любым софтом. В Linux со звуком вообще беда - введите в поисковик Linux Audio Mess и посмотрите картинки.
Будет интересно почитать, как можно вывести побитовый звук в Linux. До недавнего времени без специальных патчей для ядра это вообще была нереальная задача. Как с этим обстоит дело сейчас?

Так жеж WASAPI Exclusive — это когда звук выводится в обход звуковой системы Windows. Это ж как нужно постараться, чтобы написать такую звуковую подсистему, которую лучше сразу отключить, чтобы получить качественный звук? ;)

Что касается Линукса, то его за звук хвалят. Например, за такие минимальные задержки, что даже никаких ASIO не требуется:

ALSA — программный микшер, который эмулирует совместимость для других слоев. Также предоставляет API для программистов и работает с такой низкой и стабильной задержкой, что способна конкурировать с ASIO из Windows и CoreAudio из Mac OS X.

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

как можно вывести побитовый звук в Linux. До недавнего времени без специальных патчей для ядра это вообще была нереальная задача.

Да ладно. Уже сто лет как можно просто взять файл в PCM в нужными характеристиками и засунуть его в /dev/девайс.

Так жеж WASAPI Exclusive — это когда звук выводится в обход звуковой системы Windows. Это ж как нужно постараться, чтобы написать такую звуковую подсистему, которую лучше сразу отключить, чтобы получить качественный звук? ;)

WASAPI - это и есть часть звуковой подсистемы Windows (Windows Audio Session Application Programming Interface). Звук можно пустить в обход виндовых софтверных обработчиков, которые не так уж и плохи, на самом деле. Проблемы со звуком могут быть у тех старых приложений, которые использовали DirectSound, но на то они и старые. У нового софта проблем со звуком в Windows нет никаких.

К сожалению, когда дело доходит до практики звук получается малость говнистым.

Ясное дело. Ядро+ASIO+PulseAudio вообще ужас.

Уже сто лет как можно просто взять файл в PCM в нужными характеристиками и засунуть его в /dev/девайс

Да ладно. Уже сто лет как можно просто взять файл в PCM в нужными характеристиками и засунуть его в /dev/девайс.

...и он волшебным образом воспроизведётся в обход звуковых серверов? :))

Ядро+ASIO+PulseAudio вообще ужас

Ну Вы сказанули. Никакого ASIO в Линуксе нет, ибо не нужен:

Сфера применения данного аудиоинтерфейса, как правило, ограничивается Microsoft Windows, так как в других операционных системах (например, в Mac OS X или Linux) отсутствуют подобные проблемы с задержками и микшированием

И что же здесь волшебного? Даже просто логически рассуждая это становится очевидным. После обработки звука в ALSA его же нужно передать ядру для отсылки в железо.

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

И микшер ALSA даст побитовый вывод? :)

Ну Вы сказанули. Никакого ASIO в Линуксе нет

Виноват, опечатался. Не ASIO, конечно же, а ядро+ALSA+PulseAudio.
А ALSA нужен хотя бы потому, что может организовать побитовый вывод с низкими задержками. Как и WASAPI, впрочем.

Причем здесь микшер? Я говорю о том, что если ALSA передает куда-то звук после обработки, следовательно туда можно передать звук сразу, без обработки через ALSA. Не удивлюсь, если это просто какое-нибудь устройство в /dev. Надеюсь, специалисты подскажут, а я всего лишь вывел теоретическую возможность существования подобных вещей.

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

Так в том и вопрос, как это сделать без микширования и ресэмплинга? Т.е. передать звук не после обработки, а без обработки? В Windows это можно сделать через WASAPI или ASIO. Интересно, как это сделать в Linux?

Не удивлюсь, если это просто какое-нибудь устройство в /dev.

Так и есть. Только это не одно устройство, а несколько.
Есть /dev/audio и /dev/dsp. Они передают битовый поток в ALSA, которая уже перенаправляет этот поток в нужное устройство (на одно или на несколько сразу), которые расположены в каталоге /dev/snd. А вон там уже лежат псевдофайлы, записывая в которые направляешь поток байт прямо на связанное с этим псевдофайлом устройство.

Так в том и вопрос, как это сделать без микширования и ресэмплинга?

В самой ALSA? Проще простого:
Для прямого доступа без микширования подаёте звук на нужное устройство (там front, rear, side), т.е. на любой другой кроме default. Хотя современные программные микшеры хоть в ALSA, хоть в PulseAudio очень хороши (в отличии от ...) и смысла их отключать я не вижу.
Отключение передискритизации осуществляется добавление префикса "plug:" перед именем устройства.
Причём это можно делать для каждого приложения отдельно.

Для прямого доступа без микширования подаёте звук на нужное устройство (там front, rear, side), т.е. на любой другой кроме default.

Поподробнее, пжлста! Устройство - это звуковая карта с цифро-аналоговым преобразователем. Что такое "front, rear,side"??? Вопрос простой - как подать цифру напрямую на ЦАП карты, например, звук 24/96, чтобы он так и пришёл на ЦАП в 24/96 без ресемплинга, микширования и т.п.?

Устройство - это звуковая карта с цифро-аналоговым преобразователем. Что такое "front, rear,side"???

Видели на звуковой карте разъёмы для передних, задних и т.п. колонок? Вот это они и есть.

Вопрос простой - как подать цифру напрямую на ЦАП карты, например, звук 24/96, чтобы он так и пришёл на ЦАП в 24/96 без ресемплинга, микширования и т.п.?

aplay --device=front --channels=1 --format=U24_3LE --rate=96 --disable-resample --disable-softvol my.superb.sound

Т.к. вы не указали, я на свой вкус выбрал беззнаковость и остроконечность.

Через ALSA звук хуже, чем через ASIO в W. и это касается дискретных аудиокарт, комбайнов. Пульсаудио вообще не стоит принимать всерьез.
Товарищ pomidorium прав, звук гавнистый. Не надо иметь музыкальные уши или же быть аудиофилом. Звук плоский и пластиковый. Все кто утверждают обратное, просто не имеют аппаратуры и аудиокарт по стоимости более 5 тыс. На гениусах за 500 рублей разницы не услышит никто и пойдет доказывать, что вывод звука не хуже и даже превосходит качество в популярной ОС.

Видели на звуковой карте разъёмы для передних, задних и т.п. колонок
"front, rear,side"

Как раз вот такое присутствует только на встройках и дешевых карточках, а также гениусах, к звуку эти устройства не относится, скорее ближе к интерьеру или же мебели для домашних животных.
Проблема есть и все чаще встречаются на форумах подобные рассуждения, решений никаких нет. Только ответы, что якобы все враки, звук великолепен и на этом завершается ветка.

А вот уже использование в качестве транспорта, по мнениям большинства владельцев дискретных решений, аля полноценный ЦАП с внешним питанием, транспорт цифры в Линупс, ничем не уступает цифре в W. Но это уже более дорогое решение от 40 тыс. и из другой оперы...

Увеличить детальность в Linux можно отрубив из автозагрузки или удалив Pulseaudio и в /usr/share/alsa/alsa.conf изменить значение defaults.pcm.minperiodtime на 0, defaults.pcm.rate_converter на "samplerate_best" и слушайте музыку через hw в настройках плеера или впишите использование hw в .asoundrc.

Комментировать

Filtered HTML

  • Use [fn]...[/fn] (or <fn>...</fn>) to insert automatically numbered footnotes.
  • Доступны HTML теги: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <blockquote> <strike> <code> <h2> <h3> <h4> <h5> <del> <img>
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.