android-以编程方式获取AMR音频文件的持续时间

问题描述 投票:0回答:2

有人知道如何获取AMR文件的持续时间吗?真诚的,我对AMR编码了解不多。

mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

我想在停止录制后获取文件的持续时间,而无需创建任何MediaPlayer并从中获取持续时间。对于常规的Wav文件,我只需执行以下操作:

fileLength / byteRate

但是对于AMR,我不知道byteRate,但我不确定这样做是否可以,因为WAV是原始PCM数据(未压缩),而AMR已压缩。

android audio wav amr
2个回答
5
投票

也许3GP容器包含有关内容长度的信息?如果您想阅读3GPP file format spec,可以使用。


对于原始的.amr文件,您必须遍历所有帧以找到音频的长度,因为每个帧都可以使用不同的比特率进行编码。

执行此操作的过程将是:

  • 跳过文件的前6个字节(AMR签名)。

  • 文件的其余部分将是音频帧,每个音频帧都以一个字节的头开头。读取该字节,然后查看3..6位(编解码器模式)。对于AMR-NB,有效的编解码器模式是0..7,您可以使用下表将其映射到以字节为单位的帧大小。

  • 一旦知道了当前帧的大小,就跳过它并解析下一帧。重复直到到达文件末尾。

如果您已经计算了文件中的帧数,则可以将该数字乘以20来获得音频的长度(以毫秒为单位。)>

帧大小表:

编解码器模式帧大小----------------------0 131 142 163 184 205 216 277 32

([Source


© www.soinside.com 2019 - 2024. All rights reserved.