【问题标题】:Android AudioTrack weird noise in Samsung Mobile三星手机中的 Android AudioTrack 奇怪的噪音
【发布时间】:2015-08-10 22:25:08
【问题描述】:

我的 Android 应用程序使用 MediaCodec 解码音频流并使用 AudioTrack 播放它。使用 Dell Venue 3830(Intel 处理器,Kitkat OS)进行测试时,它运行良好,但在使用 Samsung GT-S7582(Armv7 处理器,JellyBean OS)进行测试时,它会产生奇怪的噪音。有什么办法可以克服这种噪音吗?

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

音轨配置

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

【问题讨论】:

    标签: android audio android-mediacodec audiotrack


    【解决方案1】:

    通常,您可能只想在从解码器获得INFO_OUTPUT_FORMAT_CHANGED 后设置AudioTrack,并使用来自MediaCodec.getOutputFormat 设置参数的MediaFormat 中的信息。例如。对于 AAC,即使文件本身是单声道的,一些解码器也可以将其解码为立体声。 (但这不会产生很大的噪音,只会让它听起来慢一倍。)

    由于您正在解码 AMR-NB,而不是 AAC,它可能不会以立体声返回,但您可能仍想检查输出 MediaFormat 以查看解码器是否以某种意外格式返回数据。

    您也可以使用MediaCodecList 来寻找另一个解码器,而不是依赖于仅选择第一个解码器的MediaCodec.createDecoderByType。在大多数设备上,都有 google SW 解码器,但有些设备也可以有 HW 解码器,其行为可能会有所不同。通过手动迭代列表并首选以OMX.google 开头的列表(如您的情况下的OMX.google.amrnb.decoder),您可能会获得更可预测的行为。 (对于视频,人们通常不想使用 SW 编解码器,除非它们是唯一的选择,因为两者之间的性能差异很大,但对于音频,在大多数情况下差异应该不会太大。)

    【讨论】:

      猜你喜欢
      • 2018-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-15
      • 2022-11-08
      相关资源
      最近更新 更多