假设一个MP3帧长度以字节为单位104:如何以毫秒为单位得到它?是否有任何公式或其他事情要做?
答案 0 :(得分:16)
帧长度(以毫秒为单位)=(每帧采样数/采样率(以赫兹为单位))* 1000
典型的MP3(MPEG Layer III,版本1)每帧有1152个样本,采样率(通常)为44100 hz。所以(1152/44100)* 1000 =每帧26,122449毫秒。
请注意,帧长度(时间)不取决于比特率。
答案 1 :(得分:9)
您需要解析MP3帧头以获取MP3版本和图层编号(有关帧头格式,请参阅this document)。完成后,您可以使用以下查找表来获取帧中的样本数。
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
}
};
答案 2 :(得分:1)
我用不同的方法来计算mp3文件中每一帧的时间。 假设所有帧在文件中都有相同的大小..所以我只是以毫秒为单位得到mp3文件的总时间..然后计算文件中的总帧数,最后将总时间除以总帧数。所以公式看起来如此像:
float frameTime = totalTimeMillisec / totalFrames;
您将获得轨道中每一帧的总时间(以毫秒为单位)。 在我完成之后,我得到了大约52毫秒......这与马克希思所说的相似......
无论如何,感谢大家的解决方案......
答案 3 :(得分:0)
框架与时间不一样。但是如果你知道总大小,你可以做这样的开销+帧*时间=总大小。
答案 4 :(得分:0)
http://en.wikipedia.org/wiki/MP3在MP3文件结构上有一个条目,但你应该尝试找到一个有更多细节的条目。
帧头包含称为比特率的字段。给定此比特率和帧数据大小,您可以确定该帧数据中的实际音乐时间。我希望公式为:DataSize = BitRate * TimeInterval。
有关比特率编码的详细信息,请参阅http://www.mp3-tech.org/programmer/frame_header.html。
答案 5 :(得分:0)
由于数据已加密,因此您无法知道播放的比特率,直到数据被解密为止。 没有人谈论如何加密(压缩)和解压缩数据。 我所知道的是Lame程序将采用波形文件,然后对其进行过滤/重采样,然后以某种方式压缩数据,然后将其放入帧中。我不知道这些MP3播放器是否在每个频道中使用8或16位字。但是比特率和所有都与通道字节的大小和播放的采样率有关。与首先输入编码器的数据不同。 如何查看玩家所玩的最终结果就是这里的诀窍。 CBR为以后学习VBR提供了很好的参考。
如何将一个样本一个通道的16位(每个样本的WORD)取出并压缩ot用于MP3数据?结果是12位还是更少? 是什么叫压缩程序?