Как устроена звуковая система в Linux?
Опубликовано 15 октября, 2013 - 18:47 пользователем pomodor
Есть ли на сайте спецы, которые расскажут как устроена звуковая система в Linux? Как устроена в Windows 7 примерно представляю — потрясающе убого. Единственная возможность получить качественный звук — попросить Windows вообще не прикасаться к аудиоданным (режим WASAPI Exclusive) и выводить их напрямую.
Звуком в Linux тоже не очень доволен. Подозреваю, что это из-за микшеров, ресемплеров и прочих эффектов. Вопрос: как в Линуксе отказаться от множества промежуточных программных уровней?
И раз уж зашла речь о качественном звуке, кто чем проигрывает FLAC в Linux?
field_vote:
Чингачгук
15 октября, 2013 - 20:16
И что там "убого"? WASAPI - это стандартный API в Windows, который может использоваться любым софтом. В Linux со звуком вообще беда - введите в поисковик Linux Audio Mess и посмотрите картинки.
Будет интересно почитать, как можно вывести побитовый звук в Linux. До недавнего времени без специальных патчей для ядра это вообще была нереальная задача. Как с этим обстоит дело сейчас?
pomodor
15 октября, 2013 - 22:16
Так жеж WASAPI Exclusive — это когда звук выводится в обход звуковой системы Windows. Это ж как нужно постараться, чтобы написать такую звуковую подсистему, которую лучше сразу отключить, чтобы получить качественный звук? ;)
Что касается Линукса, то его за звук хвалят. Например, за такие минимальные задержки, что даже никаких ASIO не требуется:
К сожалению, когда дело доходит до практики звук получается малость говнистым. Надеюсь специалисты пояснят какие программные обработчики можно смело выпилить, чтобы искажений было меньше.
Да ладно. Уже сто лет как можно просто взять файл в PCM в нужными характеристиками и засунуть его в /dev/девайс.
Чингачгук
15 октября, 2013 - 22:35
WASAPI - это и есть часть звуковой подсистемы Windows (Windows Audio Session Application Programming Interface). Звук можно пустить в обход виндовых софтверных обработчиков, которые не так уж и плохи, на самом деле. Проблемы со звуком могут быть у тех старых приложений, которые использовали DirectSound, но на то они и старые. У нового софта проблем со звуком в Windows нет никаких.
Ясное дело. Ядро+ASIO+PulseAudio вообще ужас.
Чингачгук
15 октября, 2013 - 22:38
...и он волшебным образом воспроизведётся в обход звуковых серверов? :))
pomodor
15 октября, 2013 - 22:53
Ну Вы сказанули. Никакого ASIO в Линуксе нет, ибо не нужен:
pomodor
15 октября, 2013 - 23:03
И что же здесь волшебного? Даже просто логически рассуждая это становится очевидным. После обработки звука в ALSA его же нужно передать ядру для отсылки в железо.
Чингачгук
15 октября, 2013 - 23:29
И микшер ALSA даст побитовый вывод? :)
Чингачгук
15 октября, 2013 - 23:32
Виноват, опечатался. Не ASIO, конечно же, а ядро+ALSA+PulseAudio.
А ALSA нужен хотя бы потому, что может организовать побитовый вывод с низкими задержками. Как и WASAPI, впрочем.
pomodor
15 октября, 2013 - 23:36
Причем здесь микшер? Я говорю о том, что если ALSA передает куда-то звук после обработки, следовательно туда можно передать звук сразу, без обработки через ALSA. Не удивлюсь, если это просто какое-нибудь устройство в /dev. Надеюсь, специалисты подскажут, а я всего лишь вывел теоретическую возможность существования подобных вещей.
Чингачгук
16 октября, 2013 - 00:01
Так в том и вопрос, как это сделать без микширования и ресэмплинга? Т.е. передать звук не после обработки, а без обработки? В Windows это можно сделать через WASAPI или ASIO. Интересно, как это сделать в Linux?
Чингачгук
16 октября, 2013 - 16:11
Так и есть. Только это не одно устройство, а несколько.
Есть /dev/audio и /dev/dsp. Они передают битовый поток в ALSA, которая уже перенаправляет этот поток в нужное устройство (на одно или на несколько сразу), которые расположены в каталоге /dev/snd. А вон там уже лежат псевдофайлы, записывая в которые направляешь поток байт прямо на связанное с этим псевдофайлом устройство.
Чингачгук
16 октября, 2013 - 16:54
В самой ALSA? Проще простого:
Для прямого доступа без микширования подаёте звук на нужное устройство (там front, rear, side), т.е. на любой другой кроме default. Хотя современные программные микшеры хоть в ALSA, хоть в PulseAudio очень хороши (в отличии от ...) и смысла их отключать я не вижу.
Отключение передискритизации осуществляется добавление префикса "plug:" перед именем устройства.
Причём это можно делать для каждого приложения отдельно.
Чингачгук
16 октября, 2013 - 18:53
Поподробнее, пжлста! Устройство - это звуковая карта с цифро-аналоговым преобразователем. Что такое "front, rear,side"??? Вопрос простой - как подать цифру напрямую на ЦАП карты, например, звук 24/96, чтобы он так и пришёл на ЦАП в 24/96 без ресемплинга, микширования и т.п.?
Чингачгук
16 октября, 2013 - 22:18
Видели на звуковой карте разъёмы для передних, задних и т.п. колонок? Вот это они и есть.
aplay --device=front --channels=1 --format=U24_3LE --rate=96 --disable-resample --disable-softvol my.superb.sound
Т.к. вы не указали, я на свой вкус выбрал беззнаковость и остроконечность.
Чингачгук
26 марта, 2014 - 12:52
Через ALSA звук хуже, чем через ASIO в W. и это касается дискретных аудиокарт, комбайнов. Пульсаудио вообще не стоит принимать всерьез.
Товарищ pomidorium прав, звук гавнистый. Не надо иметь музыкальные уши или же быть аудиофилом. Звук плоский и пластиковый. Все кто утверждают обратное, просто не имеют аппаратуры и аудиокарт по стоимости более 5 тыс. На гениусах за 500 рублей разницы не услышит никто и пойдет доказывать, что вывод звука не хуже и даже превосходит качество в популярной ОС.
Как раз вот такое присутствует только на встройках и дешевых карточках, а также гениусах, к звуку эти устройства не относится, скорее ближе к интерьеру или же мебели для домашних животных.
Проблема есть и все чаще встречаются на форумах подобные рассуждения, решений никаких нет. Только ответы, что якобы все враки, звук великолепен и на этом завершается ветка.
А вот уже использование в качестве транспорта, по мнениям большинства владельцев дискретных решений, аля полноценный ЦАП с внешним питанием, транспорт цифры в Линупс, ничем не уступает цифре в W. Но это уже более дорогое решение от 40 тыс. и из другой оперы...
Чингачгук
12 июля, 2016 - 11:22
Увеличить детальность в Linux можно отрубив из автозагрузки или удалив Pulseaudio и в /usr/share/alsa/alsa.conf изменить значение defaults.pcm.minperiodtime на 0, defaults.pcm.rate_converter на "samplerate_best" и слушайте музыку через hw в настройках плеера или впишите использование hw в .asoundrc.
Комментировать