Je veux enregistrer de l'audio à partir du microphone et de l'accès pour possible la lecture en temps quasi-réel. Je ne suis pas sûr de la façon d'utiliser le Android AudioRecord classe pour enregistrer de l'audio micro et d'y accéder rapidement.
Pour le AudioRecord classe, le site officiel dit "l'application interroge le AudioRecord objet dans le temps', et 'la taille de la mémoire tampon rempli détermine la durée de l'enregistrement avant l'exécution non lus de données". Plus tard, il est suggéré qu'une plus grande mémoire tampon doit être utilisé lors de l'interrogation de moins en moins fréquemment. Ils n'ont jamais fait de montrer un exemple de code.
Un exemple que j'ai vu dans un livre utilise le AudioRecord classe continue de lire un tampon fraîchement remplie avec live audio micro, et puis l'app écrit ces données à un fichier SD. Le pseudo-code ressemble à quelque chose comme
set up AudioRecord object with buffer size and recording format info
set up a file and an output stream
myAudioRecord.startRecording();
while(isRecording)
{
// myBuffer is being filled with fresh audio
read audio data into myBuffer
send contents of myBuffer to SD file
}
myAudioRecord.stop();
Comment ce code synchronise sa lecture avec le taux d'enregistrement est difficile - est le booléen "isRecording" séquencé et hors d'ailleurs? Il semble que ce code peut lire trop souvent ou trop peu, selon le temps de la lecture et de l'écriture prend.
Le site doc dit aussi que le AudioRecord classe a une classe imbriquée nommé OnRecordPositionUpdateListener qui est définie comme une interface. L'information suggère que quelque part, vous spécifiez la période que vous souhaitez pour être informé de l'avancement de l'enregistrement, et le nom de votre gestionnaire d'événements, et un appel est automatiquement mis à votre gestionnaire d'événements à la fréquence spécifiée. Je pense que la structure, en pseudo-code serait quelque chose comme:
set target of period update message = myListener
set period to be about every 250 ms
other code
myListener()
{
if(record button was recently tapped)
handle message that another 250 ms of fresh audio is available
ie, read it and send it somewhere
)
J'ai besoin de trouver un code spécifique qui me permet de saisir et de traiter les mic audio avec un retard de moins de 500 ms. Android offre une autre classe appelée MediaRecorder, mais il ne prend pas en charge la diffusion en continu, et je veux écouter de la vivre mic audio via un réseau Wi-Fi en temps quasi-réel. Où puis-je trouver des exemples concrets?