Запись аудиоданных PCM на аудиоустройство из нативного кода

Можно ли записывать сэмплы PCM на аудиоустройство под Android напрямую из нативного кода? Я смог воспроизвести сэмплы PCM, отправив данные в сокет и поиграв с AudioTrack. Можно ли избежать всего этого пути к аудиоустройству путем прямого доступа к нативному коду? Спасибо!

2 ответа

Решение

Да, вы можете попробовать использовать ваши аудио устройства напрямую. Доступ работает через узлы виртуальных устройств Linux, размещенные в /dev/.

На моем HTC Desire это было бы

/dev/msm_pcm_out

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

ПРЕДУПРЕЖДЕНИЕ Выполнение следующих команд приведет к появлению бесконечно белого шума, если вы не убьете программу "cat" или не перезагрузите свой телефон

Команда (НА КОРНЕВОМ ТЕЛЕФОНЕ)

su

а также

cat /dev/urandom > /dev/msm_pcm_out

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

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

Я думаю, что Android-способ - грязный, но самый портативный и удобный способ воспроизводить звуки через NDK.

Перечитывая это, я спрашиваю себя, почему я не подумал о простом использовании AudioTrack из нативного кода с использованием JNI... Это должно быть лучшим решением.

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