Chinaunix首页 | 论坛 | 博客
  • 博客访问: 15357902
  • 博文数量: 2005
  • 博客积分: 11986
  • 博客等级: 上将
  • 技术积分: 22535
  • 用 户 组: 普通用户
  • 注册时间: 2007-05-17 13:56
文章分类

全部博文(2005)

文章存档

2014年(2)

2013年(2)

2012年(16)

2011年(66)

2010年(368)

2009年(743)

2008年(491)

2007年(317)

分类: 嵌入式

2009-07-13 20:56:29

看了一些网上的资料,发现计算基本上都是
layer1 :
(48000*bitrate)/sampling_freq + padding
layer2&3:
(144000*bitrate)/sampling_freq + padding
. mpeg2.0
layer1 :
(24000*bitrate)/sampling_freq + padding
layer2&3 :
(72000*bitrate)/sampling_freq + padding
这样的形式的,可这样的话,不是所有的帧大小都一样了么
难道跟每一帧所延续的时间没有关系么,或者每一帧大小都是一样的么?
还有,这个长度究竟是什么意思呢,bitrate单位是bps
sampling_freq的单位是Hz,除出来是什么啊

回答(2)
bitrate/sampling_freq 得到的是每个sample所要的byte数,layer3每帧有1152个sample,
所以再乘以1152/8就得到所用bit数了。

也有每帧384个采样,192个采样和576采样,以及这里所说的1152个采样等[luther.gliethttp]

. mpeg1.0      layer1  : 帧长= (48000 *bitrate)/sampling_freq + padding
               layer2&3: 帧长= (144000*bitrate)/sampling_freq + padding
. mpeg2.0      layer1  : 帧长= (24000 *bitrate)/sampling_freq + padding
layer2&3: 帧长= (72000 *bitrate)/sampling_freq + padding
例如:位率为64kbps,采样频率为44.1kHz,padding(帧长调节)为1时,帧长为210字节。
帧头后面是可变长度的附加信息,对于标准的MP3文件来说,其长度是32字节,紧接其后的是压缩的声音数据,当解码器读到此处时就进行解码了。
从这里来看,应该是这样的
(1152/8)*(64kbps/44.1kHz) = (144*64kbps)/44.1kHZ = (144*64)/44.1 =208.9795918367347 也就等于采样了209字节,所以padding等于1,于是帧长为209+1=210字节
上面的公式之所有都乘以了1000,是因为上面是bitrate,比特速率,这里直接运算时用的是64k,即64*1000,
总算明白公式中的系数来源了,感谢网络上无私奉献的人们[luther.gliethttp]

上面(1152/8)*(64kbps/44.1kHz)只是表示,每个采样点需要采集(64kbps/44.1kHz)个比特,一共采样1152次,但是并没有细说这1152次按什么间隔来采样,即2次采样之间的时间间隔为多少,那该怎么理解呢,无论帧长是多少,每帧的播放时间都是26ms  比如每帧有1152个采样,那么1152/26ms=44.3个/ms那么就需要每毫秒输出44个采样,所以从这里来看,sampl_freq采样率,应该也按同样的方式进行样点采集,比如1152个采样点如果26ms是等分输出的话,即每隔26/1152=0.022569ms输出一个sample数据的话,那么mp3生成时,它的采样也应该按照每26/1152=0.022569ms采一组样点才行[luther.gliethttp]


阅读(2520) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~