gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:04 24 4
gpt4 key购买 nike

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

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

有人知道我该怎么做吗?

最佳答案

您可以使用 Android MediaCodec解码 3gp 或其他媒体文件的类。解码器输出是标准 PCM 字节数组。您可以直接将此输出发送到 Android AudioTrack 类进行播放或继续使用此输出字节数组进行进一步处理,例如 DSP。要应用 DSP 算法,必须将字节数组转换为浮点/ 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 talk可能与此相关。

关于java - 如何读取 3gp/AMR-NB 音频格式的原始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14267707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com