2015-05-28 7 views
2

Приложение для Android использует MediaCodec для декодирования аудиопотока и воспроизведения его с помощью AudioTrack. При тестировании с Dell Venue 3830 (процессор Intel, Kitkat OS) его воспроизведение прекрасное, но при тестировании с использованием Samsung GT-S7582 (процессор Armv7, JellyBean OS) производят странный громкий шум. Есть ли способ преодолеть этот шум?Android AudioTrack странный шум в Samsung Mobile

конфигурации декодера Mediacodec

String mimeType = "audio/3gpp"; 
    AudioDecoder = MediaCodec.createDecoderByType(mimeType); 

    MediaFormat mMediaFormat = new MediaFormat(); 
    mMediaFormat = MediaFormat.createAudioFormat(mimeType,sampleRate,1); 

    AudioDecoder.configure(mMediaFormat,null, null, 0); 
    AudioDecoder.start(); 

AudioTrack Конфигурация

mAudioTrack = new AudioTrack(
       AudioManager.STREAM_VOICE_CALL, 
       sampleRate, 
       AudioFormat.CHANNEL_OUT_MONO , 
       AudioFormat.ENCODING_PCM_16BIT, 
       AudioTrack.getMinBufferSize(8000,AudioFormat.CHANNEL_OUT_MONO,AudioFormat.ENCODING_PCM_16BIT)*8, 
       AudioTrack.MODE_STREAM); 

ответ

2

Как правило, вы можете настроить AudioTrack только после того как вы получили INFO_OUTPUT_FORMAT_CHANGED от декодера, а также использовать информацию из MediaFormat от MediaCodec.getOutputFormat настройка параметров. Например. для AAC, даже если сам файл является монофоническим, некоторые декодеры могут декодировать его как стерео. (Но это не вызовет громких шумов, это будет звучать в два раза медленнее.)

Поскольку вы декодируете AMR-NB, а не AAC, он, вероятно, не возвращается в стереосистеме, но вы все равно можете захотеть проверьте вывод MediaFormat, чтобы узнать, возвращает ли декодер данные в некотором неожиданном формате.

Вы также можете использовать MediaCodecList для поиска другого декодера, вместо того чтобы полагаться на MediaCodec.createDecoderByType, который просто выбирает первый декодер. На большинстве устройств есть декодер google SW, но некоторые устройства также могут иметь HW-декодер, который может вести себя по-разному. Путем ручного повторения списка и предпочтения тех, которые начинаются с OMX.google (например, OMX.google.amrnb.decoder в вашем случае), вы можете получить более предсказуемое поведение. (Для видео, как правило, не требуется использовать SW-кодеки, если только они не являются единственным выбором, так как есть огромная разница в производительности между ними, но для звука разница не должна быть слишком большой в большинстве случаев.)

 Смежные вопросы

  • Нет связанных вопросов^_^