Android alsa snd_pcm_open по умолчанию нет такого файла или каталога

Я пытаюсь реализовать Baresip для Android, он использует кастом alsa модуль для управления аудио устройствами.

Этот модуль использует этот код для открытого обработчика устройства:

err = snd_pcm_open(&st->write, device, SND_PCM_STREAM_PLAYBACK, 0);

Я попытался передать 'default', 'plug:hw:0,0', 'hw:0,0', 'hw:00,0' в эту функцию. Все результаты возвращают ошибку -2, что означает отсутствие такого файла.

У меня два вопроса. Есть ли возможность передать некоторую строку в эту функцию для правильной обработки аудио устройства? И вообще, реально ли взаимодействовать со звуковыми устройствами напрямую из jni, используя эту функцию?

Спасибо всем!

2 ответа

Вы можете использовать ALSA в Android только на рутованных устройствах.

Если вы хотите воспроизводить аудио из собственного кода на стандартном устройстве, у вас есть как минимум два варианта:

  1. Используйте официальный стабильный API: OpenSL ES (для этого требуется версия Android 2.3+)
  2. Есть родной OpenAL реализация для Android, которая использует JNI для вызова Java AudioTrack: https://github.com/AerialX/openal-soft-android (это будет работать на Android версии 2.1+)

Я бы порекомендовал использовать OpenAL только если у вас есть существующий код, который необходимо перенести на Android, или, по какой-то причине, вы должны поддерживать Android версии 2.1. В других случаях OpenSL ES это правильный выбор.

Я не думаю, что ALSA поддерживается Android. API ALSA недоступен для нативного кода Android (NDK)

для Android следует использовать модуль "opensles", который предоставляет Audio-драйвер для нативного интерфейса.

Baresip поддерживает несколько аудио-драйверов, например, модуль "alsa" для Linux или "opensles" для Android NDK. Пожалуйста, смотрите здесь для получения подробной информации о модуле opensles:

http://www.creytiv.com/doxygen/baresip-dox/html/opensles_8c.html

Другие вопросы по тегам