小智 18
嗯,这很奇怪,但没有人正确回答这个问题.我一直在调查,这是公式:
帧长度(以毫秒为单位)=(每帧采样数/采样率(以赫兹为单位))*1000
典型的MP3(MPEG Layer III,版本1)每帧有1152个样本,采样率(通常)为44100hz.所以(1152/44100)*1000 =每帧26,122449毫秒.
请注意,帧长度(时间)不依赖于比特率.
更多信息:http://www.mp3-converter.com/mp3codec/frames.htm
Mar*_*ath 10
您需要解析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
}
};
Run Code Online (Sandbox Code Playgroud)
我使用不同的方法来计算 mp3 文件中每一帧的时间。假设文件中所有帧的大小相同。所以我只得到 mp3 文件的总时间(以毫秒为单位)。然后计算 mp3 文件中的总帧数文件并最后将总时间除以总帧数..因此公式如下所示:
float frameTime = totalTimeMillisec / totalFrames;
Run Code Online (Sandbox Code Playgroud)
您将获得轨道中每一帧的总时间(以毫秒为单位)。完成后,我得到了大约 52 毫秒...这与 Mark Heath 所说的类似。
不管怎样,谢谢大家的解决方案。
| 归档时间: |
|
| 查看次数: |
21288 次 |
| 最近记录: |