3 votes

Enregistrer deux canaux en même temps sur Android MediaRecorder ou en utilisant AudioRecord ?

Puis-je enregistrer plus d'un canal en même temps en utilisant MediaRecorder ou AudioRecord ? Ce que je veux, c'est être capable d'enregistrer les deux MediaRecorder.AudioSource.VOICE_UPLINK et VOICE_DOWNLINK en même temps. Cela peut être dans deux fichiers séparés ou dans le même fichier avec deux canaux. J'ai essayé d'utiliser deux instances distinctes de MediaRecorder. Mais seule la première enregistre. La seconde indique que l'entrée n'est pas disponible. J'ai également essayé d'utiliser un MediaRecorder et un AudioRecord en même temps. Là encore, les deux fonctionnent individuellement mais lorsque AudioRecord arrive après le démarrage de MediaRecorder, les erreurs suivantes s'affichent.

05-21 03:40:42.735: E/AudioRecord(1322): Could not get audio input for record source 1
05-21 03:40:42.735: E/AudioRecord-JNI(1322): Error creating AudioRecord instance:     initialization check failed.
05-21 03:40:42.825: E/AudioRecord-Java(1322): [ android.media.AudioRecord ] Error code -20     when initializing native AudioRecord object.

J'ai également essayé de placer le deuxième MediaRecorder sur un nouveau fil. Encore une fois, le même résultat. Je me demande donc s'il est possible d'enregistrer simultanément. Je me suis également demandé si je pouvais utiliser un AudioRecord avec deux canaux et définir deux entrées séparées pour VOICE_UPLINK et VOICE_DOWNLINK, mais je ne sais pas comment définir les sources, si cela est possible.

Merci d'avance

EDITAR:

La réponse de Lucifer signifie que AudioRecord ne peut pas être appelé de manière asynchrone avec plus d'une instance fonctionnant en même temps. Quelqu'un connaît-il un moyen par lequel AudioSource.VOICE_UPLINK et AudioSource.VOICE_DOWNLINK peuvent être enregistrés en même temps ? Peut-être en utilisant une seule instance d'AudioRecord avec plusieurs canaux ?

2voto

Lucifer Points 14471

D'après mes connaissances, AudioRecording est une méthode synchronisée. Vous ne pouvez donc pas utiliser deux enregistrements en même temps.

Lorsque votre code est utilisé pour le deuxième processus d'enregistrement, il affiche l'erreur suivante 05-21 03:40:42.735: E/AudioRecord(1322): Could not get audio input for record source 1 ce qui signifie simplement que le canal d'enregistrement est déjà occupé par le premier.

Cependant, cela peut être possible par le traitement parallèle de deux fils de telle manière que le premier fil enregistre pendant une durée spécifique. Lorsque le contrôle passe au deuxième fil, le premier fil arrête d'enregistrer et le deuxième commence à enregistrer et vice versa. Mais pour les appareils mobiles, cela devient plus complexe. Il est donc préférable d'enregistrer un canal à la fois.

Vous pouvez créer une file d'attente d'enregistrement, qui effectuera les enregistrements un par un.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X