LINUX.ORG.RU

Путеводитель по джунглям звуковых API в Linux

 ,


0

0

Программистам часто трудно решить, какие из звуковых API для каких целей использовать при создании аудиопрограмм для Linux. Леннарт Пёттеринг предлагает разобраться в этих джунглях.

>>> Подробности

Ответ на: комментарий от AVL2

> Во первых, он там далеко несвежий, а во вторых, это извращение.

Это извращение, потому что дебиан отстой? Разумно.

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

>Это извращение, потому что дебиан отстой? Разумно.

это извращение, потому что глупо использовать так дистрибутив, нацеленный на противоположные задачи. Все равно как на асфальтоукладчике в формулу1 лезть. А извращенцы, это те, кто при этом еще вслух гордится задержками на уровне 40 мс...

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

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

а какие задачи сейчас противоположны работе со звуком?

> Все равно как на асфальтоукладчике в формулу1 лезть.

Чем дебиан похож на асфальтоукладчик, забирающийся в формулу-1, я так и не понял. Но красочные и столь же безосновательные сравнения это всегда круто. Браво.

melkor217 ★★★★★
()
Ответ на: комментарий от AVL2

> Ну вообще-то не понял, в чем тут вопрос? есть источники сигнала, это выход приложения, есть приемники сигнала, это все входы, которые видит джек. Коммутируй мышкой и все...

Суть проблемы в том, что jackd не может (и не должен мочь - он не для этого) подключать и отключать устройства на лету (без перезапуска) и не может работать сразу с несколькими устройствами (вернее, может, но это потребует синхронизации этих устройств - в представленном примере не годится).

В общем, jackd и pulseaudio решают разные задачи и противопоставлять их совершенно бессмысленно. Разработчики, кстати, прекрасно это понимают и пытаются наладить взаимодействие обоих серверов.

Fice ★★
()
Ответ на: комментарий от Fice

>Сталкивался с пробемой с AC'97 на VIA: искажения на высоких частотах. С виндой не сравнивал. Сначала подумал, что встроенная звуковуха настолько негодная, но закрались сомнения. Посмотрел документацию по модулю snd-via82xx, там сказано, что из-за DXS возможен шумный вывод по причине бага в BIOS

все возможно. однако я на схожем чипсете прекрасно жил с дефолтной альсой

black7
()
Ответ на: комментарий от Fice

>Суть проблемы в том, что jackd не может (и не должен мочь - он не для этого) подключать и отключать устройства на лету (без перезапуска)

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

>и не может работать сразу с несколькими устройствами (вернее, может, но это потребует синхронизации этих устройств - в представленном примере не годится).

Это уже другое дело. Хотя, в общем непонятно, чем синхронизация не угодила.

>В общем, jackd и pulseaudio решают разные задачи и противопоставлять их совершенно бессмысленно.

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

AVL2 ★★★★★
()
Ответ на: комментарий от jackill

>Вместо путеводителей лучше бы перестали строить пирамиды из костылей и написал ОДИН API. Не два, не три, не друг на друге, а один.

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

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

> имхо это надуманная причина. Получается, я не могу сначала запустить джек, а потом подключить файрвайр-карту? Это явный недостаток реализации.

Подключать устройство на лету, не нарушив режим реального времени? Фантастика.

> чем синхронизация не угодила.

Синхронизация требует аппаратной поддержки.

Fice ★★
()
Ответ на: комментарий от AVL2

> Не могу понять, почему нельзя подключение устройств на лету и переключение вывода сделать в ней?

Ну это все равно потребует выделение какого-то кода в демон, работающий в userspace. Так вот он собственно и появился.

Fice ★★
()
Ответ на: комментарий от linux4ever

>карты CA0106 постоянно вылетают вместе с модулями, без пульсаудио все в порядке. Также пройдись по лору и найди кучу проблем вида запаздывает/убегает звук.

Это не моя вина, что LOR стал филиалом Убунтового форума, на котором кроме школотного "Пыщ-Пыщ" ничего не увидишь.

Led ★★★☆☆
()
Ответ на: комментарий от farafonoff

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

Не асилил?

Led ★★★☆☆
()
Ответ на: комментарий от melkor217

>а какие задачи сейчас противоположны работе со звуком?

мускуль запустить, апач. в тексте, как положено. можно в vserver.

>Чем дебиан похож на асфальтоукладчик,

старое, доброе решение проблем десятилетней давности. Токмо не для графики, не для музыки, не для игрушек и т.д.

>Но красочные и столь же безосновательные сравнения это всегда круто. Браво.

Ну надо бы и свой моск подключать потихоньку. 40 мс на джеке, это ведь не с потолка свалилось?

AVL2 ★★★★★
()
Ответ на: комментарий от AVL2

> мускуль запустить, апач. в тексте, как положено. можно в vserver.

так и не понял, чем же оно противоположно работе со звуком. отличается, да, но не противоположно.

> старое, доброе решение проблем десятилетней давности.

и проблем десятилетней давности тоже.

>Токмо не для графики, не для музыки, не для игрушек и т.д.

фейл. попробуй же анстейбл-ветку. софт свежий (нестабильный, как ты любишь), музыка записывается, игрушки играются.

> 40 мс на джеке, это ведь не с потолка свалилось?

К слову, свалилось оно не с потолка, а с дефолтной убунты, generic-ядра, процессора на 800Mhz и дефолтной звуковушки с кривыми дровами от интел.

Кстати, я упоминал о цифрах _порядка_ 20-40 мс. Реальная задержка при работе оказалась 20-30 мс, из которых задержка джека 6 мс, а остальное висит на медленном звуковом процессоре. Убунту настраивать я боюсь (привет, дебиан), но даже тут есть возможности для оптимизации Такие дела.

Нотариально заверенный скриншот прилагается. http://img44.imageshack.us/img44/710/200908270204231024x600s.png

melkor217 ★★★★★
()
Ответ на: комментарий от melkor217

>фейл. попробуй же анстейбл-ветку. софт свежий (нестабильный, как ты любишь), музыка записывается, игрушки играются.

спасибо, убунты я уже наелся...

>К слову, свалилось оно не с потолка, а с дефолтной убунты, generic-ядра, процессора на 800Mhz и дефолтной звуковушки с кривыми дровами от интел.

ничего из этого не нужно.

AVL2 ★★★★★
()
Ответ на: комментарий от melkor217

Ну а разница между стабильной убунтой и нестабильным дебианом, кроме того, что в дебиане еще половины не будет из за лицензий?

AVL2 ★★★★★
()

Про OSS4 это он серьезно? Я ей давно пользуюсь. И по моему мнению качество звука на моей M-Audio Rev. 7.1 попантовее, чем в ALSA.

beda
()
Ответ на: комментарий от melkor217

> чем же оно противоположно работе со звуком.

Тем, что для обработке звука очень помогает real-time'овость ядра и софта, а для решения задачи "мускуль запустить, апач" эта же real-time'овость ничуть не помогает. И даже немножечко вредит.

VladimirP ★★★★
()
Ответ на: комментарий от kranky

> Вы совершенно правы! OSS только для понтов и нужен.

Не понимаю. Я не для мерки письками запостил, а действительно спросить. Вот сидел на alsa раньше на звуковухе SB Live 24bit (CA0106). Потом решил попробовать OSS. Слух не идеальный, но на гитаре играю и ноты различаю. Звук на OSS мне ощутился заметно лучше. Купил M-Audio Revolution 7.1, но на ALSA возвращаться не стал. Вот спрашиваю объективное мнение. Проблем с OSS почти нет, кроме USB микрофона. OSS его видет, но не пишет с него.

beda
()
Ответ на: комментарий от AVL2

По крайней мере я не выдаю перлов в духе полоумных пейсателей джека: "Что-то мы написали какую-то херню, но ничего, перепишем с C на C++ в версии 2.0 и все будет торчком! Следите за анонсами!"

Если ты хочешь сладко подрочить и кончить на jackd, то возьми, скажем, audacious и заставь его играть звук через alsa-jack, а потом поставь audacious на паузу. Внезапно проигрывание звука останавливается во всех приложениях. Я не в курсе, чего там надо "супер-прафисеанальным музыканатам", но простых пользователей такое положение вещей не устраивает. Я даже не буду говорить о том, что время от времени jackd может рандомно взвиснуть (этому можно поспособствовать, перематывая звук в айдиоплеере, работающим через alsa плагин джека).

Итого со звуком на линуксе имеем:

1. OSS (имеется в виду проприетарщина от 4front) -- теплый ламповый звук, очень простое, интуитивно понятное API, но проприетарно и объявлено кернель-хацкерами как не Ъ. 2. ALSA -- заикания, щелчки, непонятный уровень громкости (к счастью, у меня только с громкостью проблемы), вырвиглазное API, но классный механизм плагинов, на который большинству пользователей просто положить с прибором. 3. Всякое говнецо вроде джеков и пульсаудей, вдохновленное убогим arts'ом. Тут все просто: глючные пионэрские поделки, которые на десктопе нормальному человеку нахрен не вперлись. Разве что "прафесианалы" с ними поковыряются и уйдут обратно в свою винду со словами: "Че-та звук в линуксе галимый".

В итоге лучшим решением было бы решение всех дистрибутивов почесаться и предоставить по умолчанию пакеты с OSS от 4front. Лично мне проприетарность _работающих_ драйверов от NVidia никоим образом жить не мешает.

linuxfan
()
Ответ на: комментарий от linuxfan

>Лично мне проприетарность _работающих_ драйверов от NVidia никоим образом жить не мешает.

Тут я провожу некую аналогию между драйверами видеокарт и звука: в обоих случаях проприетарщина от некоторых производителей рулит (nvidia, 4front), но есть и откровенно галимая проприетарщина (frglx от ATI/AMD, creative).

И, кстати, если ваша ALSA такая клевая и прогрессивная, где там EAX эффекты и аппартный эквалайзер -- возможности, присутствующие в виндовом драйвере встроенной звуковой карты?

linuxfan
()
Ответ на: комментарий от linuxfan

> В итоге лучшим решением было бы решение всех дистрибутивов почесаться и предоставить по умолчанию пакеты с OSS от 4front. Лично мне проприетарность _работающих_ драйверов от NVidia никоим образом жить не мешает.

Насколько я знаю OSS4 имеет открытый исходный код, кроме тех драйверов, чьи производители, давшие спецификации 4Front, этого делать не разрешают.

beda
()
Ответ на: комментарий от beda

> Насколько я знаю OSS4 имеет открытый исходный код, кроме тех драйверов, чьи производители, давшие спецификации 4Front, этого делать не разрешают.

Нет, они повторяют модель Nvidia: собранные объектные файлы драйверов и малюсенькая прослойка, которую надо компилировать.

linuxfan
()
Ответ на: комментарий от linuxfan

> Нет, они повторяют модель Nvidia: собранные объектные файлы драйверов и малюсенькая прослойка, которую надо компилировать.

А чего тогда у меня минуты 2 gentoo компилит? Надо будет поковырять тарбол.

beda
()
Ответ на: комментарий от linuxfan

Да, ОСС рулит. Вот кстати ответ Леннарта на тему почему ОСС рулит:
----

OSS4 does a lot of signal processing (resampling, mixing) in the kernel. That is a big no-no, it's verboten in the Linux world. The kernel is supposed to include drivers, not processing algorithms. In its current form OSS4 would have exactly zero chance to even be considered by the Linux kernel people. If you'd rip out all the mixing, resampling, conversion, remapping then not much would be left of OSS4, except that a slightly updated OSS3 API. Then, the driver support in ALSA these days is actually much better than OSS4 since a lot of hw manufacturers nowadays work with the Linux community to improve the in-kernel drivers. OSS4 doesn't have that advantage. The ALSA people work well together with the rest of the kernel people, the OSS people absolutely don't. Then, the fact that the OSS API is a kernel API is one of the biggest issues, due to its ioctl-caused awkwardness and the impracticability to virtualize. It's also not extensible. Let's say I wanted to add DRC to the mixing code: I'd have to code that in kernel space -- and floating point calculations aren't even allowed in kernel space! It's just the wrong place to do these processing tasks in the kernel. Also on Linux interfacing with FireWire or Bluetooth audio happens in userspace and can thus never be covered by OSS4. And let's not even touch RAOP or UPnP audio devices! And this list goes on and on and on. There are so many fundentamental issues with OSS, it's an endless list. OSS4 is not just the worse system, it's a fundamentally wrong system. (At least on Linux. On niche Unixes different requirements apply)
----

eugene2k
()
Ответ на: комментарий от linuxfan

>Нет, они повторяют модель Nvidia: собранные объектные файлы драйверов и малюсенькая прослойка, которую надо компилировать.

А ты всё повторяешь бред. "тёплый и ламповый", но всё равно - бред. Хорошь херню пороть - собирай учебники, готовся - в понедельник в школу тебе!

Led ★★★☆☆
()
Ответ на: комментарий от eugene2k

А вот тогда скажите как управлять параметрами платы с помощью alsa? Вот, например, с sb live 24bit я мог настроить многоканальный звук только добавлением описания "движков" в конфиге и прописыванием использование этой настройке прямо в xine конфиге. В ossxmix это делается простым переключением в GUI интерфейсе.

А с покупкой M-Audio в настройках появился еще принудительный ресемплинг вплоть до 192kHz.

Неговоря что есть поддержка настройки громкости для каждого приложения.

Как такова добиться в alsa? KMix такого, на сколько я помню, не позволяет. А пользоваться всякими прослойками типа pulseaudio как то не тянет, ибо никогда не пользовался (может и зря).

beda
()
Ответ на: комментарий от Led

> Хорош_ь_ херню пороть - собирай учебники, готовЬся - в понедельник в школу тебе!

Лол, научись для начала по-русски без ошибок писать, а потом уже лезь в разговоры больших дядек о звуковых API Linux.

linuxfan
()
Ответ на: комментарий от eugene2k

>Also on Linux interfacing with FireWire or Bluetooth audio happens in userspace and can thus never be covered by OSS4

Следует читать как: "в линуксе звуковые устройства с интерфейсам firewire или bluetooth никогда не будут работать хорошо".

Меня лично уже сильно напрягает это фанатичное "отделение kernel space ото всего подряд". Сильно попахивает больными идеями микроядра.

linuxfan
()

Отзовитесь, есть ли люди, которые используют OSS4? Все ли вас в ней устраивает? Если нет, то что конкретно?

beda
()
Ответ на: комментарий от beda

> Отзовитесь, есть ли люди, которые используют OSS4? Все ли вас в ней устраивает? Если нет, то что конкретно?

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

> Про OSS4 это он серьезно? Я ей давно пользуюсь. И по моему мнению качество звука на моей M-Audio Rev. 7.1 попантовее, чем в ALSA.

Есть несколько вариантов:
1. Вам кажется (объективно оценить качество звука непросто: когда ожидаешь, что что-то должно звучать лучше, кажется, что это действительно так).
2. Проблемы конфигурации. Например, где-то происходит преобразование частоты дискретизации. Если это преобразование необходимо, его можно настроить по-разному (отношение качество/использование CPU). В ALSA оно может возникнуть, если используется dmix.
3. Баг в драйвере может приводить к искажениям, если вы обнаружили явные искажения - пишите багрепорт.

Слово "попантовее" намекает на вариант 1.

Fice ★★
()
Ответ на: комментарий от Fice

Преимущества я нашел именно в управлении для M-Audio. В ossxmix легко переключается Stereo на Multich и выбирается частота дискретизации, а так же отключение ресемплинга.

В том же окне настраивается аппаратная громкость всех 8-ми каналов, а так же виртуальные миксеры для каждого канала приложения и общего.

Как-нибудь найду и поставлю вторую систему сбоку и попробую протестировать качество. У меня аккустика не ахти, но все же не настольная система (Radiotechnika S-90F немного доработанные).

Но пока весомых доводов в пользу той или иной системы я не услышал. Как я понимаю других низкоуровневых API, кроме ALSA и OSS в Linux нет (Дрова от Creative и т.п. в рассмотрение не беру). Все же скажите, почему не стоит пользоваться OSS4? Проблемы с установкой в gentoo никаких нет.

# layman -a oss-overlay

# emerge oss

beda
()
Ответ на: комментарий от eugene2k

> Для многоканального звука туториал тут:

Вот и я писал про то, что приходится править asoundrc и прописывать в настройках каждого плеера. Мне кажется это не удобно, хотя может и правильно.

В общем, без собственных тестов не обойтись.

beda
()
Ответ на: комментарий от beda

А запись со всего работала на CA0106? А несколько программ одновременно как звук выводили? (у самого CA0106, думаю попробовать)

farafonoff ★★
()
Ответ на: комментарий от beda

> как управлять параметрами платы с помощью alsa?

Смотря какими. В общем случае микшер настраивается через alsamixer, а любые хитрые настойки можно задать, изменив один единственный файл ~/.asoundrc. Возможно есть GUI-шные проги, лень искать. Да и по возможностям никакой GUI не заменит редактирование конфига.

> Вот, например, я мог настроить многоканальный звук [...] Как такова добиться в alsa?

Многоканальный звук в ALSA должен работать "из коробки", ничего настраивать не надо. Или имелось ввиду что-то другое?

> Но пока весомых доводов в пользу той или иной системы я не услышал.

Мне больше всего нравится гибкость настроек в ALSA. Например, любители эффектов могут прикрутить LADSPA-плагины.

Или, скажем, у меня есть 6-канальная звуковуха, во front-канал воткнуты стерео-колонки, в back-канал - наушники. В ALSA я могу настроить, чтобы одни программы играли в колонки, а другие в это же время - в наушники.

Любопытно, где-то еще (oss/pulse/jack/...) можно сделать подобное?

sergem
()
Ответ на: комментарий от sergem

> Как? ;)

Примерно так:

load-module module-alsa-sink device=front
load-module module-alsa-sink device=rear

Можно и наоборот: виртуальное многоканальное устройство из нескольких карточек (с автоматической компенсацией расхождения частот дискретизации, если они не синхронизированы аппаратно). В общем, много чего можно - читайте FAQ.

Fice ★★
()
Ответ на: комментарий от beda

> Все же скажите, почему не стоит пользоваться OSS4? Проблемы с установкой в gentoo никаких нет.

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

Fice ★★
()
Ответ на: комментарий от Fice

> Примерно так:
> load-module module-alsa-sink device=front

> load-module module-alsa-sink device=rear


А разве это не привязка к двум _разным_ реальным устройствам front и rear (причем именно к устройствам в ALSA)? Я имел ввиду - когда есть _одно_ реальное 6-канальное устройство, ALSA позволяет сделать из него два виртуальных.

Вероятно, можно сделать эти два устройства в ALSA, и потом привязать пульс к ним. Но тогда зачем нужен пульс. Вопрос был - можно ли средствами пульса сделать разделение одного реального устройства на 2 виртуальных? Если можно, то как?

> Можно и наоборот: виртуальное многоканальное устройство из нескольких карточек


Это действительно есть в FAQ, а вот варианта два виртуальных из одного реального там нет...

sergem
()
Ответ на: комментарий от sergem

> А разве это не привязка к двум _разным_ реальным устройствам front и rear (причем именно к устройствам в ALSA)?

По сути — да. Если я не ошибаюсь, для многоканальных карт в ALSA устройства front и rear существуют по умолчанию, поэтому предложенный способ самый простой.

> Я имел ввиду - когда есть _одно_ реальное 6-канальное устройство, ALSA позволяет сделать из него два виртуальных.

Если нужно разделить устройство средствами только pulseaudio (например, он выводит звук не через ALSA), можно использовать module-remap-sink (см. http://www.pulseaudio.org/wiki/Modules#module-remap-sink).

Fice ★★
()
Ответ на: комментарий от Fice

> Если я не ошибаюсь, для многоканальных карт в ALSA устройства front и rear существуют по умолчанию

У моей карты - нет. Вероятно, они есть по-умолчанию только в картах, где они видятся как два разных физических устройства.

> можно использовать module-remap-sink

Да. Это как раз то, что я спрашивал. Спасибо, сохранил в заметках.

Аналоги для Jack/OSS будут? ;)

sergem
()
Ответ на: комментарий от sergem

> Вероятно, они есть по-умолчанию только в картах, где они видятся как два разных физических устройства.

Нет, они виртуальные. По моему, они просто прописаны в конфигурации по умолчанию для определенных карточек.

> Аналоги для Jack/OSS будут? ;)

Про OSS не знаю. В jack любой выход (отдельный канал) устройства или приложения можно подключить к любому входу.

Fice ★★
()
Ответ на: комментарий от sergem

> Любопытно, где-то еще (oss/pulse/jack/...) можно сделать подобное?

В jack у многоканальной звуковухи (аппаратный клиент) будет несколько портов. Можно любую программу подключить к любому порту... Например мышкой в patchage или qjackctl.

naryl ★★★★★
()
Ответ на: комментарий от farafonoff

> А запись со всего работала на CA0106? А несколько программ одновременно как звук выводили? (у самого CA0106, думаю попробовать)

Запись работала и под alsa и под oss.

beda
()

Всем спасибо за разъяснения. У меня 2 колонки, поэтому много канальный звук OSS не использовал в боевом режиме.

Вчера решил потестировать. Включил фильм "Спиздили" (извините за мат) рипнутый с HDTV и запустил в режиме 5.1 через mplayer + его фронтенд smplayer.

Наблюдал следующую картину. Основной голос, который должен идти через центральный канал при перематывании постоянно перекидывался на разные каналы, так же вместо rear каналов использовались side (определял по индикаторам в ossxmix). И вместе с этим всем шло пищание из front-ов.

При стерео все хорошо.

Вот такие пироги! ;( То ли я че не докрутил, то ли плохо работают дрова. Толи плеер глючит, надо будет на другом попробовать.

Буду ставить рядом вторую точно такую же gentoo, только с alsa. И смотреть/слушать/крутить.

Я никогда не пользовался pulseaudio. Скажите, для чего он может быть полезен в связке с alsa? beda (*) (28.08.2009 10:17:30)

beda
()
Ответ на: комментарий от farafonoff

> А запись со всего работала на CA0106? А несколько программ одновременно как звук выводили? (у самого CA0106, думаю попробовать)

Запись работала и под alsa и под oss. Одновременный вывод тоже без нареканий. Могут возникнуть проблемы со старыми играми, которые захватывают звук монопольно.

beda
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.