在我的 Android 应用程序中,我正在录制用户的声音,并将其保存为 .3gp 编码的音频文件。
我想要做的是打开它,即表示音频样本的序列 x[n],以便执行一些音频信号分析。
有谁知道我该怎么做?
您可以使用 Android MediaCodec类来解码 3gp 或其他媒体文件。解码器输出是标准的 PCM 字节数组。您可以直接将此输出发送到 Android AudioTrack 类进行播放或继续使用此输出字节数组进行进一步处理,例如 DSP。要应用 DSP 算法,必须将字节数组转换为浮点/双精度数组。有几个步骤可以获得字节数组输出。总而言之,它看起来如下所示:
实例化媒体编解码器
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可能与此处相关。