Question

J'utilise actuellement les classes audiotrack et audiorecord dans Android.

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

De cette page il semble que je ne peux coder 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);

Alors, ma question est de savoir comment puis-je changer le codage de PCM à l'un des autres codecs pris en charge?

Lorsque je tente de changer ENCODING_PCM_16BIT sur AudioFormat Je ne reçois que les options d'encodage par défaut ou non valide avec les options PCM.

Les liens vers des tutoriels sur l'encodage et le décodage audio sur Android serait génial si quelqu'un sait de tout ou d'une aide très appréciée ici.

Merci

EDIT: J'ai 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 ce n'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 AudioFormat.PCM

Était-ce utile?

La solution

Comme la documentation indique 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 avec 8 bits et PCM 16 bits. Si vous voulez audio dans d'autres formats, soit ne pas utiliser AudioRecord et AudioTrack (essayez MediaRecorder et MediaPlayer) ou vous devrez transcoder en utilisant votre propre code, tirant parti peut-être 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).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top