В настоящее время я использую классы AudioTrack и AudioRecord в Android.
Я использую чистые данные PCM, но мне было интересно, какие у меня варианты для других кодеков?
С этой страницы кажется, я могу кодировать и декодировать только с помощью узкополосного AMR?
В настоящее время я настроил классы Audio следующим образом:
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);
Итак, мой вопрос: как мне изменить кодировку с PCM на один из других поддерживаемых кодеков?
Когда я пытаюсь изменить ENCODING_PCM_16BIT в AudioFormat, я получаю только параметры кодировки по умолчанию или недопустимую кодировку вместе с параметрами PCM.
Любые ссылки на учебные пособия по кодированию и декодированию звука на Android были бы замечательными, если бы кто-нибудь знал о какой-либо или любой помощи здесь с большой благодарностью.
Спасибо
РЕДАКТИРОВАТЬ: я изменил свой код на следующий:
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);
Код работает правильно, но мне интересно, действительно ли он кодирует звук как AMR_NB, и если это неправильный способ сделать это?
При использовании необработанного PCM у меня происходило переполнение буфера, но с тех пор, как я использовал новый код с MediaRecorder.AudioEncoder.AMR_NB вместо AudioFormat.PCM, этого не произошло.