Запись аудиоданных 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... Это должно быть лучшим решением.