计算MP3帧的长度(以毫秒为单位)

假设一个MP3帧长度以字节为单位104:如何以毫秒为单位得到它? 是否有任何公式或其他事情要做?

嗯,这很奇怪,但没有人正确回答这个问题。 我一直在调查,这是公式:

帧长度(以ms为单位)=(每帧采样数/采样率(以hz为单位))* 1000

典型的MP3(MPEG Layer III,版本1)每帧有1152个样本,采样率(通常)为44100hz。 所以(1152/44100)* 1000 =每帧26,122449毫秒。

请注意,帧长度(时间)不依赖于比特率。

更多信息: http : //www.mp3-converter.com/mp3codec/frames.htm

您需要解析MP3帧头以获取MP3版本和图层编号(有关帧头格式,请参阅此文档 )。 完成后,您可以使用以下查找表来获取帧中的样本数。

private static readonly int[,] samplesPerFrame = new int[,] { { // MPEG Version 1 384, // Layer1 1152, // Layer2 1152 // Layer3 }, { // MPEG Version 2 & 2.5 384, // Layer1 1152, // Layer2 576 // Layer3 } }; 

我使用不同的方法来计算mp3文件中每一帧的时间。假设所有帧在文件中都有相同的大小..所以我只是以毫秒为单位得到mp3文件的总时间..然后计算总帧数文件,最后将总时间除以总帧数。所以公式看起来像:

 float frameTime = totalTimeMillisec / totalFrames; 

你将获得轨道中每一帧的总时间(以毫秒为单位)。完成后我得到了大约52毫秒……这与Mark Heath所说的类似。

无论如何,谢谢大家的解决方案..

框架与时间不一样。 但是如果你知道总的大小,你可以做这样的开销+帧*时间=总大小。

http://en.wikipedia.org/wiki/MP3上有一个关于MP3文件结构的条目,但您应该尝试查找一个包含更多详细信息的文件。

帧头包含称为比特率的字段。 给定此比特率和帧数据大小,您可以确定该帧数据中的实际音乐时间。 我希望公式为:DataSize = BitRate * TimeInterval。

有关比特率编码的详细信息,请参见http://www.mp3-tech.org/programmer/frame_header.html 。

由于数据已加密,因此您无法知道播放的比特率,直到数据被解密为止。 没有人谈论如何加密(压缩)和解压缩数据。 我所知道的是Lame程序将采用波形文件,然后对其进行过滤/重采样,然后以某种方式压缩数据,然后将其放入帧中。 我不知道这些mp3播放器是否在每个频道中使用8或16位字。 但是比特率和所有都与通道字节的大小和播放的采样率有关。 与首先输入编码器的数据不同。 如何查看玩家所玩的最终结果就是这里的诀窍。 CBR为以后学习VBR提供了很好的参考。

如何获取一个样本一个通道的16位(每个样本的WORD)并压缩ot用于MP3数据? 结果是12位还是更少? 什么是压缩程序?