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

Sol*_*ake 10 .net c# audio mp3

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

小智 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)


Sol*_*ake 0

我使用不同的方法来计算 mp3 文件中每一帧的时间。假设文件中所有帧的大小相同。所以我只得到 mp3 文件的总时间(以毫秒为单位)。然后计算 mp3 文件中的总帧数文件并最后将总时间除以总帧数..因此公式如下所示:

float frameTime = totalTimeMillisec / totalFrames;
Run Code Online (Sandbox Code Playgroud)

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

不管怎样,谢谢大家的解决方案。