Il y a quelques mois, avec Android ICS (4.0), j'ai développé un module du noyau Android qui interceptait le module "pcmC0D0p" pour récupérer tout le son du système.
Mon objectif est de diffuser TOUT le son (ou au moins la musique jouée) vers une enceinte distante via AirPlay.
Le module du noyau a fonctionné, mais il y avait plusieurs problèmes (versions du noyau, privilèges root, etc.) donc j'ai arrêté de travailler dessus.
Maintenant, nous avons Android 4.1 et 4.2 et j'ai un nouvel espoir !
Qui a une idée de comment capturer l'audio dans Android ?
J'avais les idées suivantes :
-
Connexion via Bluetooth sur le même téléphone, définissez le routage sur BT et récupérez l'audio à "l'autre bout" : cela ne devrait pas fonctionner.
-
Intercepter l'audio avec un module kernel comme cela a été fait auparavant : hardcore, faire fonctionner mais pas applicable.
-
Kit de connexion audio JACK : malheureusement, Android utilise "tinyALSA" et non "ALSA". TinyALSA ne supporte aucun filtre comme JACK (mais cela a apporté l'idée avec le module du noyau).
-
Utiliser PulseAudio en remplacement d'AudioFlinger, mais ceci n'est pas non plus applicable
EDIT (je les ai oubliés) :
-
J'ai compilé "tinymix" (baby-version de ALSA-mixer) à partir de tinyALSA (l'ALSA sur Android) et j'ai essayé de diriger la sortie audio vers l'entrée micro - mais sans succès ( pas comprendre pour moi ). Et cela nécessite également un enracinement : non applicable
-
J'ai testé OpenSL ES mais je ne suis pas un C-crack et cela s'est terminé par "Je peux enregistrer un micro, mais pas plus" (peut-être que je me suis trompé ?).
Je viens de trouver ROUTE_TYPE_LIVE_AUDIO :
Un appareil qui prend en charge le routage audio en direct permettra au média audio d'être acheminé vers les destinations prises en charge. Il peut s'agir des haut-parleurs internes ou des prises audio sur le dispositif lui-même, des dispositifs A2DP, et autres.
Une fois lancé, ce routage est transparent pour l'application. Tous les fichiers audio jouée sur le flux média sera acheminée vers la destination sélectionnée. destination sélectionnée.
Peut-être que cela vous aide d'une manière ou d'une autre ?
Je suis à court d'idées mais je veux "casser cette noix", peut-être quelqu'un peut-il m'aider ?
EDITAR:
Je suis vraiment nouveau dans le codage C & kernel (mais j'ai créé avec succès un module d'interception audio compilé en croisé) - mais n'est-il pas possible d'écouter au point où les données PCM passent de l'espace utilisateur (JAVA, couche C ?) à l'espace kernel (tinyALSA, module kernel), sans piratage et enracinement ?