Сведение Звука На Кубинском Языке

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

В Linux уже много лет нет проблем с микшированием звука: ALSA умеет это делать изначально, и многие звуковые серверы предлагают свои услуги на любой вкус и бюджет. Оказалось, что проблема есть, и она шире, чем я думал изначально.



Проблема №1. Решено.

Фонон и импульсный звук

Итак, с рассматриваемой проблемой я впервые столкнулся, когда писал приложение на QT. В качестве звукового API был выбран Phonon. И, как только я первый раз запустил приложение, я обнаружил, что аудиодрайвера от Sunxi не умеют микшировать звук.

Обескураженный этим обстоятельством, я проверил пульс.

и не получил результата.

Точнее, результаты были разные: иногда щелчки и хрипы, иногда полная тишина.

В зависимости от того, какие еще пакеты были установлены.

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

Для тех, кто никогда не заходил в настройки пульсаудио, сделаю немного отступление Pulse может работать в двух режимах: системном и пользовательском.

Давайте рассмотрим оба по отдельности: 1. Системный.

Не рекомендуется в многопользовательских системах.

Почему — смотрите документацию, там больше информации об этом.

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

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

импульсный доступ (не пульс, это важно).

Чтобы включить этот режим в Debian, вам необходимо в файле /etc/default/pulsaudio включите параметр: PULSEAUDIO_SYSTEM_START=1. Далее удаляем из группы аудио все пользователи, кроме пульс .

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

2. Сессионный.

Работает как на многопользовательских, так и на встроенных системах.

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

По умолчанию этот режим включен в Debian. Чтобы пользователь мог взаимодействовать со звуковой картой, его необходимо добавить в группу аудио Потому что в контексте более глобальной проблемы некоторые неочевидные моменты могут очень усложнить жизнь.

Когда первая итерация не принесла желаемого результата, я решил узнать, что знает Google об этой проблеме.

Google отреагировал скупо и неохотно.

Все, что я смог узнать, это то, что vlc-бэкенд phonon использовать не следует, следует использовать gstreamer (для меня это было несколько удивительно, поскольку я всегда считал vlc основным медиа-движком).

В итоге первая проблема была решена абсолютно черной магией: установка пакета gstreamer0.10-плагины-уродливые .

И фонон начал играть.



Проблема №2. Нерешённый.

VoIP и пульсаудио

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

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

Поэтому пульс снова есть.

В этот раз всё оказалось смешнее: chan_alsa что-то делает с пульсом, что пока его не выгрузишь, звук не воспроизводится ни сам, ни какое-либо другое приложение.

При запуске импульса с детальной отладкой удаётся поймать ошибку, вся суть которой сводится к тому, что «у вас кривоват драйвер карты, отправьте эти данные разработчикам драйвера».

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

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

например на линфон.

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

ну может быть в пересэмплировании voip аудиопотока в родной PCM карты.

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

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

И если кто-нибудь найдет решение, буду очень благодарен.

Теги: #cubian #cubieboard #pulseaudio #phonon #qt4 #asterisk #voip #voip #alsa #oss #Qt #Разработка систем связи

Вместе с данным постом часто просматривают: