Несколько месяцев назад, с Android ICS (4.0), я разработал модуль ядра Android, который перехватил "pcmC0D0p" -модуль для извлечения всего системного аудио.
Моя цель - передать весь звук (или, по крайней мере, воспроизведенную музыку) на удаленный динамик через AirPlay.
Работал модуль ядра, но там, где несколько проблем (версии ядра, root-привилегии и т.д.), поэтому я прекратил работать над этим.
Теперь у нас есть Android 4.1 и 4.2, и у меня есть новая надежда!
У кого есть идея, как захватить аудио в Android?
У меня были следующие идеи:
-
Подключить через bluetooth к тому же телефону, установить маршрутизацию в BT и захватить аудио на "другом конце": это не должно работать
-
Перехватите аудио с помощью модуля ядра, как это делалось раньше: hardcore, заставить его работать, но не применимо
-
JACK Audio Connection Kit: к сожалению, Android использует "tinyALSA", а не "ALSA". TinyALSA НЕ поддерживает любые фильтры, такие как JACK (но это приносило идею с помощью модуля ядра)
-
Используйте PulseAudio в качестве замены для AudioFlinger, но это также неприменимо
ИЗМЕНИТЬ (забыли):
-
Я скомпилировал "tinymix" (baby-версия ALSA-mixer) из tinyALSA (ALSA на Android) и попытался направить аудио-выход на микрофон, но без успеха (непонятно для меня). И это также требует укоренения: не применимо
-
Я тестировал OpenSL ES, но я не C-crack, и это закончилось тем, что "я могу записывать микрофон, но не более" (может быть, я ошибся?)
Я только что нашел ROUTE_TYPE_LIVE_AUDIO:
Устройство, поддерживающее прямую аудио маршрутизацию, позволит использовать медиа-аудио поток для маршрутизации в поддерживаемые адресаты. Это может включать внутренние громкоговорители или аудиоразъемы на самом устройстве, устройства A2DP, и многое другое.
После запуска эта маршрутизация прозрачна для приложения. Все аудио, воспроизводимое в медиапотоке, будет перенаправлено на выбранный назначения.
Может быть, это помогает в любом случае?
У меня заканчиваются идеи, но я хочу "взломать этот орех", может быть, кто-то может мне помочь?
EDIT:
Я действительно новичок в C и кодировании ядра (но я успешно создал кросс-скомпилированный модуль аудио-перехвата) - но разве он не может прослушивать в точке, где данные PCM идут от userpace (JAVA, C-layer?) в пространство ядра (tinyALSA, модуль ядра), без взлома и укоренения?