LINUX.ORG.RU

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

 ,


0

0

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

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

Только надо помнить, что оный Леннарт - автор пульсаудива и лютый кедофоб. У них как-то с Аароном Сайго в блогах был срач средней степени эпичности по линуксозвуку.

ethercrow
()

>Используйте GStreamer! (Но если вы собираетесь писать только для KDE, тогда используйте альтернативный вариант — Phonon).

и получИте глючный 10001 лисапед внезапно не воспроизводящий практически ничего из известных форматов и непрогнозируемо зависающий на всем остальном.

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

>Только надо помнить, что оный Леннарт - автор пульсаудива и лютый кедофоб.

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

anonizmus
()

хорошая статья, спасибо

ei-grad ★★★★★
()

># Хочу добавить звук к своей игре!

>Используйте звуковой API из SDL для полноэкранных игр, а libcanberra для простых игр со стандартным пользовательским интерфейсом типа Gtk+.


А с OpenAL чего?

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

> А с OpenAL чего?

Лично для меня с точки зрения программирования OpenAL сложнее, чем SDL.

cruxish ★★★★
()

Phonon классная штука, но чтобы под него собирать на любой из платформ нужно побороть ряд неприятных проблем

Зачем нужен Pulse Audio я так и не понял

Gary ★★★★★
()

>GStreamer не очень подходит для воспроизведения простого PCM

Интересно, почему это он не очень для PCM подходит? А зафига он такой крутой из себя нужен, если для простого PCM не подходит? :)

Zubok ★★★★★
()

Да, Jack, конечно хорошая штука.

У меня например так настроено Alsa -> Jack -> Alsa HW

Все программы которые Jack понимают, воспроизводят звук через Jack.

А те, которые Jack не понимают, воспроизводят звук через Alsa.

Еще alsa используется для роутинга midi - довести ноты до секвенсора.

Единственная проблема с которой я столкнулся - Jack использует разделяемую память и формат хранения данных разный для 64 бит и 32 бит. Поэтому запустить одновременно звук в 32 битных программах и в 64 битных программах было просто невозможно. Исправить это, как я понимаю, невозможно. К счастью с появлением 64 битного flash_plugin проблема потеряла остроту.

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

Я к тому, что Леннарт утверждает, что в убунте разработчики криво интегрировали пульсаудио, и потому он криво работает, а в дебиане, федоре и мандриве хорошо интегрировали и там все хорошо работает.

http://0pointer.de/blog/projects/jeffrey-stedfast.html

eugene2k
()

Хорошая статья. Пойду-ка напишу метроном на Phonon. А то gtick кривой, неудобный и (OSS?) падает.

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

> Уж не потому ли что в убунте криво работает?

и чего там в бубунте криво работает то? все там ОК.

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

> На уровне 20-40мс, насколько я помню. На rt-ядре должно быть лучше.

Без rt сильно не экспериментировал, но 20мс держит.
Сейчас на 2.6.29-rt - 1.33мс.

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

>На уровне 20-40мс, насколько я помню. На rt-ядре должно быть лучше. Jackd действительно неимоверно крут и удобен.

для тех целей, для которых создавался джек, это очень много.

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

AVL2 ★★★★★
()

> Я к тому, что Леннарт утверждает, что в убунте разработчики криво интегрировали пульсаудио, и потому он криво работает, а в дебиане, федоре и мандриве хорошо интегрировали и там все хорошо работает.

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

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

Полностью согласен - Jack рулит, пульс - УГ в полном смысле слова. В Федоре он тоже криво работает. Например, когда запускаешь timidity++ или Qsynth/FlidSynth - звук появляется с задрежкой в СЕКУНДЫ. Жуть. Этому модному редхетовскому звуковику надо руки поотрывать и ноги возле самой головы. Самое противное, что эту хрень теперь кругом пихают... тьфу. Спасает только то, что она легко удаляется.

Может, когда допилят ванильное ядро до RТ, попустит слегка... Но у парня видать амбиций полно, а ума - дефицит. Уже 2 года всем голову морочит, а довести до ума (читай, до состояния Jack) не может.

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

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

это про что? про GStreamer или Phonon? просто описание подходит и к тому и к другому.

mono ★★★★★
()

Очень полезная информация, спасибо!

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

Если почитать по ссылке, то там еще было несколько причин указано по которым пульс плохо мог работать. Например из-за проблем в ALSA. Или в esd.

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

>это про что? про GStreamer или Phonon? просто описание подходит и к тому и к другому.

10001 лисапед, это к жстримеру, остальное - к обоим.

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

> А там, где идут одиночные потоки для которых такие задержки некритичны, джек попросту не нужен.

Да, джек много где не нужен. Кстати, насколько я понял, упор делался на гибкость, а не задержку. Не нравятся задержки - обрабатывайте звук хоть хардварно, там все возможности джека предоставляет аудиокабель :)

Для меня вот 20мс не очень критично. Кстати, судя по описанию в дебе, авторы считают эту задержку "маленькой".

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

>Если почитать по ссылке, то там еще было несколько причин указано по которым пульс плохо мог работать.

Причина простая - автор мудак. Поэтому кривое УГ пульсаудио было без сожаления снесено нахер, и ALSA дальше рулит всем звуком, как и было до обновления на 9.04 негродеба

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

>>У меня например так настроено Alsa -> Jack -> Alsa HW

>и никаких проблем с задержками?

Никаких. Внешняя USB карта. Задержка в jack около 5 мс. Ядро - Gentoo (1000Hz preemptive). Но это на десктопе с Core2Duo.

На ноутбуке с дохлым Celeron так настроить не получилось. Вышло только через alsa напрямую.

Главное, что можно писать под alsa и это сможет работать и через jack тоже. Если же нужен какой-нибудь специфический функционал - то добро пожаловать в jack. Идеально, если программа поддерживает оба интерфейса jack и alsa.

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

>Re: Путеводитель по джунглям звуковых API в Linux Если почитать по ссылке, то там еще было несколько причин указано по которым пульс плохо мог работать. Например из-за проблем в ALSA. Или в esd.

пульс недолжен зависеть от проблем с альзой и, тем более, с esd. От альзы требуется просто вывести поток на устройство. Если она и это не может, то это не проблема, это неработающая альза. Esd вообще сбоку.

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

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

> Скайп с лагами в полминуты например.

как воспроизвести? я тестовые звонки делал - все ок. на 9.04 - вообще шоколадно, а на 9.10 - небольшие провалы бывают, когда через BT гарнитуру.

isden ★★★★★
()

ох, не могу читать, когда после каждого второго предложения "!" стоит.

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

>Да, джек много где не нужен. Кстати, насколько я понял, упор делался на гибкость, а не задержку. Не нравятся задержки - обрабатывайте звук хоть хардварно, там все возможности джека предоставляет аудиокабель :)

гибкость, это как раз пульсаудио.

джек, это коммутация и миксинг каналов с минимальной задержкой. 2-5 мс - вот норма для такого интерфейса.

>Для меня вот 20мс не очень критично. Кстати, судя по описанию в дебе, авторы считают эту задержку "маленькой".

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

ЗЫ

А дебиан вообще отстой...

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

>Я к тому, что Леннарт утверждает, что в убунте разработчики криво интегрировали пульсаудио, и потому он криво работает, а в дебиане, федоре и мандриве хорошо интегрировали и там все хорошо работает.

Ха-ха-ха, "в федоре", и не упоминайте даже!!! Нормальный звук без тормозов, пауз, рассинхронизации в федоре появлялся после полного прибития пульсеаудио.

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

>Вот это кстати, неправда.. джистример появился в 99 году. Тогда уж Phonon велосипед..

новый плейер на жстримере - 1001 велосипед.

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

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

> Никаких. Внешняя USB карта. Задержка в jack около 5 мс. Ядро - Gentoo (1000Hz preemptive). Но это на десктопе с Core2Duo.

а что за usb карта?

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

Pulseaudio -- замена джеку? Вот уж не думал. Нет, ну правда.

> А дебиан вообще отстой...

Теперь я понял. Все, сказанное тобой в этом треде -- ложь.

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

> Зачем нужен Pulse Audio я так и не понял

Не все звуковые устройства поддерживаются через ALSA. Как минимум, firewire-интерфейсы работают не через ALSA. Кроме того, pulseaudio позволяет легко выбирать, какому приложению куда выводить звук. Например, можно не останавливая воспроизведение переключить плеер со встроенной звуковой карты на bluetooth или usb-наушники.

Для меня pulseaudio решил проблему вывода всего звука через firewire-интерфейс (приложения -> pulseaudio -> jackd+ffado).

Fice ★★
()

баян. обсудили на linux plumbers conference в прошлом году.

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

> Например, можно не останавливая воспроизведение переключить плеер со встроенной звуковой карты на bluetooth или usb-наушники.

а еще можно ввод/вывод от одного приложения, допустим, от скайпа, завести на BT наушники, не трогая остальные потоки.

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

> gstreamer - УГ

Почему?

Gstreamer прекрасно работает плюс позволяет устанавливать все кодеки один раз, а не держать велосипедный плагин для каждого плеера для поддержки каждого формата. А возможность строить цепочки плагинов из командной строки (gst-launch) - наиболее вменяемое средство для перекодирования чего угодно во что угодно.

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

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

Для того, чтобы можно было управлять потоками с приложений (перенаправлять на другие устройства, менять громкость), которые не поддерживают pulseaudio.

Почему-то на нескольких подопечных мне компьютерах с разным железом все это прекрасно работает (дистрибутивы Fedora и Mandriva). Стабильно работает даже вариант приложение -> alsa -> pulseaudio -> jackd+ffado (и это позволяет выводить звук практически с любого приложения через fw-интерфейс).

Fice ★★
()

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

леннарт конечно молодец, только тот кому сложно понять чем отличаются oss/alsa/pulse/portaudio/esd/arts/jack/nas/gstreamer не заслуживает звания "программист"

достаточно почитать "выхлоп" eix, посетить сайты и прочитать описание. это максимум час чтения

black7
()

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

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