Opções do Android AudiorCord e Codec Codec?
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
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).