Pergunta

Atualmente, uso as classes Audiotrack e AudiorCord no Android.

Eu uso os dados do PCM puro, mas queria saber quais são minhas opções para outros codecs?

A partir de esta página Parece que só posso codificar e decodificar usando a AMR estreita banda?

Atualmente, configurei as aulas de áudio da seguinte forma:

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

Então, minha pergunta é como altero a codificação de PCM para um dos outros codecs suportados?

Quando tento alterar o coding_pcm_16bit no AudioFormat, só recebo as opções de codificação padrão ou inválida junto com as opções PCM.

Quaisquer links para tutoriais sobre codificação e decodificação de áudio no Android seriam ótimos se alguém soubesse de alguma ou alguma ajuda aqui apreciada muito.

Obrigado

EDITAR: Eu mudei meu código para o seguinte:

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

O código é executado corretamente, mas estou me perguntando que ele realmente codifica o áudio como amr_nb e se essa não for uma maneira adequada de fazê -lo?

Eu estava recebendo um buffer transbordando ao usar o PCM bruto, mas nenhum apareceu desde o uso do novo código com o mediareCorder.audioencoder.amr_nb usado em vez do audioformat.pcm

Foi útil?

Solução

Como a documentação declara para AudioRecord e AudioTrack:

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

Você só pode trabalhar com PCM de 8 e 16 bits. Se você deseja áudio em outros formatos, não use AudioRecord e AudioTrack (tentar MediaRecorder e MediaPlayer) ou você terá que transcodificá -lo usando seu próprio código, possivelmente alavancando o NDK.

AudioRecord e AudioTrack são projetados especificamente para casos em que o áudio em questão não é suportado pelo mecanismo multimídia OpenCore, porque não é um codec suportado ou não é um protocolo de streaming suportado (por exemplo, SIP).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top