2010-02-22 5 views
2

Je dois être en mesure de diffuser de l'audio à partir d'un format de fichier personnalisé sur le côté C++ du système Android. Je travaille sur le portage d'un lecteur multimédia personnalisé et je dois être en mesure d'ouvrir un fichier personnalisé et de diffuser de l'audio à partir de celui-ci. Ceci est important car je ne pense pas que le portage de tout le lecteur vers JAVA est faisable du point de vue de la performance et que le déplacement des buffers audio via l'interface JNI sera trop lent pour maintenir une cadence d'images correcte. Je peux gérer la vidéo sur le côté NDK à travers OpenGL ES, mais l'Audio Je n'ai aucune idée de comment y arriver.Android lire l'audio brut à partir du côté C++

Répondre

1

Le NDK ne prend pas en charge la lecture des trames audio actuellement. Vous devez utiliser l'API java AudioTrack pour y parvenir.

2

Je vous recommande de transmettre l'audio via le JNI et de voir comment il fonctionne réellement. J'ai trouvé que le JNI est en fait très efficace (si mis en œuvre correctement) et ne serait pas surpris s'il est plus que suffisamment rapide pour ce dont vous avez besoin. Juste une note sur la mise en œuvre, n'obtenez pas de Java pour créer un tampon chaque fois que vous voulez passer du son, créez simplement un tampon en Java (ou via le JNI) et ensuite le memcpy chaque fois que vous avez besoin de mettre à jour.

En outre, vous devriez noter que TOUTES les classes audio sur Android sont actuellement écrites en C++ et exécutées par le JNI. Si c'est assez rapide pour aller dans un sens (je travaille actuellement sur un jeu où nous pouvons soumettre plus de 0,5 Mo de données audio de Java à AudioTrack sur certaines images sans problème), alors ce ne sera probablement pas trop mal à aller l'autre comme fondamentalement la même opération, à savoir le verrouillage du tampon, écrire, déverrouiller aller à l'audio, et verrouiller le tampon, lire, déverrouiller dans les classes audio.

Questions connexes