我研究了MP3帧长的计算方法,例如calculating-the-length-of-mp3-frames-in-milliseconds,what-is-a-sample-in-mp3,但仍然有些奇怪。
我生成了一个16秒的波形,并用LAME编码器将其编码为mp3。编码器发出614帧,44.1 kHz:
Encoding as 44.1 kHz j-stereo MPEG-1 Layer III (11x) 128 kbps qval=3, Frame 614/614
如果我计算
1152/44100 (length of 1 frame) * 614 (frames)
,我得到16,0392s
。即使最后一帧不完整,1152/44100 * 614仍略高于16s。
如果我计算出差异:
16s = x/44100 * 614 => x = 16/614 * 44100 = 1149,1857
16s = x/44100 * 613 => x = 16/614 * 44100 = 1151,0603
(负1帧)
对这些值进行插值让我猜想我的每帧样本应该在1150左右。
我的目标是扩展mp3拆分器库,以按音符长度对mp3进行切片。分离器库也有同样的问题,它计算出的长度略大。 lib读取每个帧头,然后读取adds the length to a total length by the above formula。根据lib,每个标头具有相同的信息,1152
以44100
的采样率采样。
如果我删除最后一帧,为什么我的计算不能精确到16s /略低于16s?