当前位置: 首页 > 面试题库 >

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

宗政霄
2023-03-14
问题内容

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

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

有人知道我该怎么做吗?


问题答案:

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

  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();
  1. 捕获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讨论可能与此处有关。



 类似资料:
  • 我现在正在Android上对一个h264字节流进行解码。流是从第三方产品发送的,我不太确定它的视频格式。该文件说,流由PPS和SPS NAL单位组成。但我接收到的h264字节流包括以0x00、0x00、0x00、0x01开头的序列,并且在我接收到的样本中,第5个字节可能是0x09、0x21或0x06。这让我兴奋了一段时间,因为它似乎与通常的0x67或0x68指示器不同。有人知道NAL单元头中的0x

  • 这里我有记录音频流文件的代码。问题是我想保存这个文件与正确的文件扩展名(主要是. mp3和. aac)。我该如何实现这一点?

  • 问题内容: 我在转换WAV文件的音频格式时遇到麻烦。 我正在从麦克风录制声音,并且声音以以下格式录制:PCM_SIGNED 44100.0 Hz,16位,单声道,2字节/帧 我想将上述格式转换为ULAW 8000.0 Hz,8位,单声道,1字节/帧 我正在使用以下代码, 我收到以下错误, java.lang.IllegalArgumentException:不支持的转换:ULAW 8000.0 H

  • 问题内容: 我有一个原始图像,其中每个像素对应一个16位无符号整数。我正在尝试使用PIL Image.fromstring()函数进行读取,如以下代码所示: PIL文档通知fromstring()函数的第一个参数为’mode’。但是,在查阅文档并进行谷歌搜索时,我无法找到有关该参数真正含义的详细信息(我相信它与色彩空间或类似的东西有关)。有谁知道我在哪里可以找到有关fromstring()函数以及

  • 本文向大家介绍你知道有哪些常见的视频(音频)编码格式和视频(音频)格式吗?相关面试题,主要包含被问及你知道有哪些常见的视频(音频)编码格式和视频(音频)格式吗?时的应答技巧和注意事项,需要的朋友参考一下 视频:.ogg .mov .webp .avi .rmvb .mp4 音频:.mp3 .wav 只能想到这么多 webp?不是图片格式吗

  • 我的Android项目中的raw文件夹中有各种音频文件。我的代码不起作用。当我单击共享按钮应用程序时,它崩溃了。 这是我的代码: 和Android清单添加: