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

È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top