Варианты кодека Android AudioRecord и AudioTrack? - PullRequest
5 голосов
/ 03 февраля 2010

В настоящее время я использую классы AudioTrack и AudioRecord в Android.

Я использую чистые данные PCM, но мне было интересно, какие у меня есть варианты для других кодеков?

От эта страница кажется, что я могу кодировать и декодировать только с использованием узкополосного AMR?

В настоящее время я настроил классы аудио следующим образом:

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 были бы хороши, если бы кто-нибудь знал о какой-либо или какой-либо помощи здесь, очень признателен.

Спасибо

РЕДАКТИРОВАТЬ: Iизменили мой код следующим образом:

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

1 Ответ

2 голосов
/ 03 февраля 2010

Как указано в документации для AudioRecord и AudioTrack:

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

Вы можете работать только с 8-битным и 16-битным PCM. Если вам нужен звук в других форматах, либо не используйте AudioRecord и AudioTrack (попробуйте MediaRecorder и MediaPlayer), либо вам придется перекодировать его, используя собственный код, возможно, используя NDK.

AudioRecord и AudioTrack разработаны специально для случаев, когда рассматриваемое аудио не поддерживается движком мультимедиа OpenCORE, либо потому, что это не поддерживаемый кодек, либо не поддерживаемый протокол потоковой передачи (например, SIP).

...