Когда передо мной встала задача параллельного проигрывания нескольких аудиофайлов на Кубинский , я еще понятия не имел об этом.
В 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 #Разработка систем связи
-
Удобство Нетбуков
19 Oct, 24 -
Этнопсихология
19 Oct, 24 -
Антилокер: Защита От Программ-Вымогателей
19 Oct, 24 -
Liveandroid 0.3 Выпущен
19 Oct, 24