2010-02-03 4 views
5

J'utilise actuellement les classes AudioTrack et AudioRecord sous Android.Options de codec Android AudioRecord et AudioTrack?

J'utilise les données PCM pur mais je me demandais quelles sont mes options pour les autres codecs?

De this page il semble que je peux seulement encoder et décoder en utilisant AMR à bande étroite?

Je suis actuellement mis en place les classes audio comme suit:

arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        AudioFormat.ENCODING_PCM_16BIT, 
        buffersize); 

atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        AudioFormat.ENCODING_PCM_16BIT, 
        buffersize, 
        AudioTrack.MODE_STREAM); 

Donc, ma question est de savoir comment puis-je modifier le codage de PCM à l'un des autres codecs pris en charge? Lorsque j'essaie de changer ENCODING_PCM_16BIT sur AudioFormat, je n'ai que les options de codage par défaut ou invalides avec les options PCM.

Tous les liens vers des didacticiels sur l'encodage et le décodage audio sur Android serait génial si quelqu'un sait de n'importe quelle aide ici grandement appréciée.

Merci

EDIT: Je ont changé mon code à ce qui suit:

arec = new AudioRecord(MediaRecorder.AudioSource.MIC, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        **MediaRecorder.AudioEncoder.AMR_NB**, 
        buffersize); 

atrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL, 
        11025, 
        AudioFormat.CHANNEL_CONFIGURATION_MONO, 
        **MediaRecorder.AudioEncoder.AMR_NB**, 
        buffersize, 
        AudioTrack.MODE_STREAM); 

Le code fonctionne correctement mais je me demande-t-il encode en fait le Audio comme AMR_NB et si cela est pas une bonne façon de le faire?

Je recevais un débordement de mémoire tampon lors de l'utilisation PCM brut, mais aucun n'a paru depuis en utilisant le nouveau code avec le MediaRecorder.AudioEncoder.AMR_NB utilisé à la place du Comme l'indique la documentation AudioFormat.PCM

+4

Il y a longtemps que vous avez posté votre question, mais c'est peut-être intéressant pour quelqu'un ... Vous ne codez pas AMR_NB. Les drapeaux sont juste des champs int. MediaRecorder.AudioEncoder.AMR_NB est 0x01 ... identique à AudioFormat.ENCODING_DEFAULT. Donc, vous utilisez simplement l'encodage par défaut. – hacksteak25

Répondre

2

pour AudioRecord et AudioTrack:

audioFormat  the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT 

vous ne pouvez travailler qu'avec des PCM 8 bits et 16 bits. Si vous voulez l'audio dans d'autres formats, n'utilisez pas AudioRecord et AudioTrack (essayez MediaRecorder et MediaPlayer) ou vous devrez le transcoder en utilisant votre propre code, en utilisant éventuellement le NDK.

AudioRecord et AudioTrack sont conçus spécifiquement pour les cas où l'audio en question est pas pris en charge par le moteur multimédia OpenCore, soit parce que ce n'est pas un codec pris en charge ou non un protocole de diffusion en continu pris en charge (par exemple, SIP).

Questions connexes