Opzioni di codec di AudioRecord e audiotrack Android?
Domanda
Attualmente utilizzo le classi AudioTrack e Audrecord in Android.
Uso i dati PCM puri ma mi chiedevo quali fossero le mie opzioni per altri codec?
Da questa pagina Sembra che posso solo codificare e decodificare usando AMR Streight Band?
Attualmente ho impostato 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 posso cambiare la codifica da PCM a uno degli altri codec supportati?
Quando provo a modificare Encoding_PCM_16BIT su Audioformat, ottengo solo le opzioni di codifica predefinita o non valida insieme alle opzioni PCM.
Qualsiasi collegamento ai tutorial sulla codifica e sulla decodifica dell'audio su Android sarebbe bello se qualcuno conosce uno o qualsiasi aiuto qui molto apprezzato.
Grazie
MODIFICARE: Ho cambiato il mio codice in quanto segue:
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 funziona correttamente ma mi chiedo che codifica effettivamente l'audio come AMR_NB e se questo non è un modo corretto per farlo?
Stavo ottenendo un overflow buffer quando ho usato il PCM grezzo ma nessuno è apparso da quando ho usato il nuovo codice con mediaRecord.audioencoder.amr_nb usato al posto dell'audioformat.pcm
Soluzione
Come afferma la documentazione per AudioRecord
e AudioTrack
:
audioFormat the format in which the audio data is represented. See ENCODING_PCM_16BIT and ENCODING_PCM_8BIT
Puoi lavorare solo con PCM a 8 e 16 bit. Se si desidera audio in altri formati, né non usare AudioRecord
e AudioTrack
(Tentativo MediaRecorder
e MediaPlayer
) o dovrai transcoderlo usando il tuo codice, eventualmente sfruttando l'NDK.
AudioRecord
e AudioTrack
sono progettati specificamente per i casi in cui l'audio in questione non è supportato dal motore multimediale OpenCore, perché non è un codec supportato o non un protocollo di streaming supportato (ad esempio, SIP).