在我的Android应用程序中,我正在记录用户的语音,然后将其保存为.3gp编码的音频文件。

我想做的是打开它,即表示音频样本的序列x [n],以便执行一些音频信号分析。

有人知道我该怎么做吗?

最佳答案

您可以使用Android MediaCodec类解码3gp或其他媒体文件。解码器输出是标准PCM字节数组。您可以直接将此输出发送到Android AudioTrack类,以播放或继续此输出字节数组以进行进一步处理,例如DSP。要应用DSP算法,必须将字节数组转换为浮点/ double 数组。有几个步骤可以获取字节数组输出。概括来说,它如下所示:

  • 实例化MediaCodec
    String mMime = "audio/3gpp"
    MediaCodec  mMediaCodec = MediaCodec.createDecoderByType(mMime);
    
  • 创建媒体格式并配置媒体编解码器
    MediaFormat mMediaFormat = new MediaFormat();
    mMediaFormat = MediaFormat.createAudioFormat(mMime,
        mMediaFormat.getInteger(MediaFormat.KEY_SAMPLE_RATE),
        mMediaFormat.getInteger(MediaFormat.KEY_CHANNEL_COUNT));
    
    mMediaCodec.configure(mMediaFormat, null, null, 0);
    mMediaCodec.start();
    
  • 从MediaCodec捕获输出(应在线程内处理)
    MediaCodec.BufferInfo buf_info = new MediaCodec.BufferInfo();
    int outputBufferIndex = mMediaCodec.dequeueOutputBuffer(buf_info, 0);
    byte[] pcm = new byte[buf_info.size];
    mOutputBuffers[outputBufferIndex].get(pcm, 0, buf_info.size);
    

  • Google IO talk可能与此处相关。

    10-07 19:46
    查看更多