如何读取3gp / AMR-NB音频格式的原始值?

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

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

有谁知道我怎么能这样做?

您可以使用Android MeidiaCodec类来解码3gp或其他文件。 解码器输出是标准PCM字节arrays。 您可以直接将此输出发送到Android AudioTrack类,以播放或继续此输出字节数组,以便进一步处理(如DSP)。 要应用DSP算法,必须将字节数组转换为float / double数组。 获取字节数组输出有几个步骤。 总之,它看起来如下:

  1. 实例化MediaCodec

    String mMime = "audio/3gpp" MediaCodec mMediaCodec = MediaCodec.createDecoderByType(mMime); 
  2. 创建媒体格式并配置媒体编解码器

     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(); 
  3. 从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谈话可能与此相关。