Микширование звука в Cubian

Автор: admin от 1-01-2015, 13:48, посмотрело: 697

Когда передо мной встала задача проиграть параллельно несколько аудио-файлов на Cubian, я ещё об этом не догадывался. Уже много лет в линуксе проблема микширования звука отсутствует: и ALSA умеет это нативно, и множество саунд-серверов предлагают свои услуги на любой вкус и кошелёк.
Но оказалось, что проблема есть, и она обширнее, чем я предполагал изначально:


Проблема №1. Решённая. Phonon и pulseaudio


Итак, впервые я столкнулся с рассматриваемой проблемой, когда писал приложение на QT. В качестве звукового API был выбран phonon. И, стоило мне запустить приложение впервые, как я обнаружил, что аудио-драйвера от sunxi не умеют микшировать звук. Обескураженный этим обстоятельством, я установил пульс… и не получил никакого результата. Точнее, результаты были разными: то щелчки и хрипение, то полная тишина. В зависимости от того, какие ещё пакеты устанавливались. Перепробовав все доступные саунд-демоны (а их в дебиане оказалось не так много), я вернулся на пульс, потому что проблема так и не решилась и, очевидно, лежала где-то глубже.
Для тех, кто в настройки pulseaudio никогда не вдавался, я сделаю небольшое Потому как в контексте более глобальной проблемы некоторые неочевидные моменты могут сильно затруднить жизнь.
Когда первая итерация не принесла желаемого результата, я решил выяснить, что знает об этой проблеме гугль. Гугль отвечал скупо и неохотно. Я смог выяснить только то, что vlc-backend фонона использовать не стоит, надо использовать gstreamer (для меня это было несколько удивительно, потому что я всегда считал vlc основным медиа-движком).
В результате, первая проблема была решена совсем уж чёрной магией: установкой пакета gstreamer0.10-plugins-ugly. И фонон заиграл.

Проблема №2. Нерешённая. VoIP и pulseaudio


Второй задачей было по одной команде отправлять на аудиовыход поток с VoIP-а, а по другой – проигрывать аудиофайл. Первая часть решается астериском с chan_alsa. Но chan_alsa полностью занимает устройство и не отдаёт, пока не выгрузишь модуль. Поэтому снова пульс.
В этот раз всё оказалось забавнее: chan_alsa делает с пульсом нечто такое, что пока его не выгрузишь, звук не играет ни он сам, ни любое другое приложение. При запуске пульса с подробным дебагом удаётся выловить ошибку, вся суть которой сводится к «у вас кривые драйвера карточки, отправьте вот эти данные разработчикам драйверов». Ну, раз проблема в драйверах ALSA, я решил попробовать OSS. В этот раз звук даже был, но с такими перерывами, что затея сразу потеряла смысл.
Так как всё это происходило на фоне уже решённой первой проблемы и отлично играющего sox'а, я подумал, что проблема не столько в драйверах, сколько в модуле астериска, и решил заменить его… например, на linphone. Когда проблема в точности повторилась с софтфоном, возникли подозрения, что дело не в конкретном приложении, а… ну, может быть в ресэмплинге войпового аудиопотока в родной для карточки PCM.
Так как задачи проигрывать звук одновременно из разных источников в этом случае не было, а linphone занимает устройство только на время непосредственно проигрывания звука, было решено удалить из схемы пульс.

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

Источник: Хабрахабр

Категория: Операционные системы » Linux

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
Полужирный Наклонный текст Подчеркнутый текст Зачеркнутый текст | Выравнивание по левому краю По центру Выравнивание по правому краю | Вставка смайликов Выбор цвета | Скрытый текст Вставка цитаты Преобразовать выбранный текст из транслитерации в кириллицу Вставка спойлера
Введите два слова, показанных на изображении: *