2010-02-03 15 views
5

Attualmente utilizzo le classi AudioTrack e AudioRecord in Android.Opzioni di codec audio AudioRecord e AudioTrack Android?

ho utilizzare i dati PCM puri ma mi chiedevo quali sono le mie opzioni sono per altri codec?

Da this page sembra posso solo codificare e decodificare utilizzando AMR banda stretta?

Io attualmente istituito le classi audio come segue:

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); 

Quindi la mia domanda è: come faccio a cambiare la codifica da PCM a uno degli altri codec supportati?

Quando provo a modificare ENCODING_PCM_16BIT in AudioFormat, ottengo solo le opzioni di codifica predefinita o non valida insieme alle opzioni PCM.

Eventuali collegamenti a tutorial su codifica e decodifica audio su Android sarebbe bello se qualcuno sa di qualsiasi o di qualsiasi aiuto qui molto apprezzato.

Grazie

EDIT: ho cambiato il mio codice al seguente:

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); 

Il codice viene eseguito correttamente, ma mi chiedo cosa realmente codificare l'audio come AMR_NB e se questo è non è un modo corretto per farlo?

mi è stato sempre un overflow del buffer quando si utilizza PCM grezzo ma nessuno sono apparsi in quanto utilizzando il nuovo codice con il MediaRecorder.AudioEncoder.AMR_NB utilizzato al posto del AudioFormat.PCM

+4

E 'da molto tempo che avete inviato la tua domanda, ma forse è ancora interessante per qualcuno ... Lei non è la codifica a AMR_NB. Le bandiere sono solo campi int. MediaRecorder.AudioEncoder.AMR_NB è 0x01 ... uguale a AudioFormat.ENCODING_DEFAULT. Quindi stai solo usando la codifica predefinita. – hacksteak25

risposta

2

Come afferma di documentazione per AudioRecord e AudioTrack:

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

si può lavorare solo con 8-bit e 16-bit PCM. Se si desidera che l'audio in altri formati, o non utilizzare AudioRecord e AudioTrack (provate MediaRecorder e MediaPlayer) oppure si dovrà convertire utilizzando il proprio codice, possibilmente sfruttando l'NDK.

AudioRecord e AudioTrack sono progettati specificamente per i casi in cui l'audio in questione non è supportato dal motore multimediale opencore, sia perché non è un codec supportato o meno un protocollo di streaming supportato (ad esempio, SIP).