首页 > 编程知识 正文

mp3文件格式不支持怎么办,cda格式怎么转换成mp3

时间:2023-05-06 16:29:49 阅读:107197 作者:2340

Mp3文件格式:

参考: https://www.cn blogs.com/ranson7zop/p/7655474.html

33559 www.cn blogs.com/ranson7zop/p/7655474.html

基于mp3文件进行描述,如下图所示。

下图中的10个字节表示ID3V2.4的标签头。0x49 44 33表示ID3,0 x 04表示ID3的版本号。 (4表示ID3V2.4;0x 00 00 00 23表示标签大小,标签头的10个字节除外。 通过计算标签大小可以偏移到数据帧。 下表显示标签大小为0x23 10=45。

如下图所示,标签框架是鼠标选择的部分,大小为35字节。0x54 53 53 45表示TSSE中的音频标记。 这取决于音频文件。0x00 0000f表示帧大小,0x0000存储标志。 后面的几个0x000000000是用于扩展的。

下图显示了第一个数据帧。 帧头为FFFBD000

1111 1111 1111 1011 1101 0000 0000 0000

固定在前11位1,

12-13,版本11 -”mpeg 1

14-15 01 -第3层

16 CRC检查1-”不检查

17-20、比特率(编码率) 1101-)、256k/s

21至22 :采样率00=44100

第23位)帧长调整,其值为0 -不需要调整

第24名:未使用

第25-26位:通道模式,其值为00-立体声Stereo

第27-28位:仅在扩展模式、信道模式为01 (联合立体声)时使用,此处不使用

第29位)版权,其值为0-无版权

第30名)原始标记,其值不是9-原始文件

第31名到第32名:强调方式,其值为00-未定义

帧大小和帧长度。 帧大小或帧中的采样数表示一帧中的采样数,它是一个常量。 其值如下表所示

MPEG 1

是mpeg2(LSF )

是mpeg2.5(LSF )

第1层

384

384

384

第2层

1152

1152

margin-left:0cm;">1152

Layer 3

1152

576

576

 

 

 

 

 

帧长度是压缩时每一帧的长度,包括帧头。它将填充的空位也计算在内。LayerI的一个空位长4字节,LayerII和LayerIII的空位是1字节。当读取MPEG文件时必须计算该值以便找到相邻的帧。注意:因为有填充和比特率变换,帧长度可能变化。

从头中读取比特率,采样频率和填充的值后可以进行计算,

LyaerI使用公式:

帧长度(字节) = (( 每帧采样数/ 8 * 比特率 ) / 采样频率 ) + 填充 * 4

LyerII和LyaerIII使用公式:

帧长度(字节)= (( 每帧采样数/ 8 * 比特率 ) / 采样频率 ) + 填充

例:

LayerIII 比特率 128000,采样频率 44100,填充0  =〉帧大小 417字节;

如图 2.3中,比特率为128K,采样率为44.1K,填充0,则其帧长度为:

(1152 / 8 * 128K)/44.1K = 417 (字节)

 

2)每帧的持续时间

每帧的持续时间可以通过计算获得,下面给出计算公式

每帧持续时间(毫秒) = 每帧采样数 / 采样频率 * 1000

如图 2.3中,其每帧时间为:

1152 / 44.1K * 1000 = 26.12 (约等于26ms)

如果是MPEG2 Layer III 采样率为16KHz的话那一帧要持续36毫秒,这个相差还是蛮大的,所以还是应该通过计算来获的。

 

3)CRC校验

如果帧头的校验位为0,则帧头后就有一个16位的CRC值,这个值是big-endian的值,把这个值和该帧通过计算得出的CRC值进行比较就可以得知该帧是否有效。

 

4帧数据

在帧头后边是Side Info(姑且称之为通道信息)。对标准的立体声MP3文件来说其长度为32字节。通道信息后面是Scale factor(增益因子)信息。当解码器在读到上述信息后,就可以进行解码了。图 2.3中地址为0x880到0x89F(含),此处数据全为0。

对于mp3来说现在有两种编码方式,一种是CBR,也就是固定位率,固定位率的帧的大小在整个文件中都是是固定的(公式如上所述),只要知道文件总长度,和从第一帧帧头读出的信息,就都可以通过计算得出这个mp3文件的信息,比如总的帧数,总的播放时间等等,要定位到某一帧或某个时间点也很方便,这种编码方式不需要文件头,第一帧开始就是音频数据。另一种是VBR,就是可变位率,VBR是XING公司推出的算法,所以在MP3的FRAME里会有“Xing"这个关键字(也有用"Info"来标识的,现在很多流行的小软件也可以进行VBR压缩,它们是否遵守这个约定,那就不得而知了),它存放在MP3文件中的第一个有效帧的数据区里,它标识了这个MP3文件是VBR的。同时第一个帧里存放了MP3文件的帧的总个数,这就很容易获得了播放总时间,同时还有100个字节存放了播放总时间的100个时间分段的帧索引,假设4分钟的MP3歌曲,240S,分成100段,每两个相邻INDEX的时间差就是2.4S,所以通过这个INDEX,只要前后处理少数的FRAME,就能快速找出我们需要快进的帧头。其实这第一帧就相当于文件头了。不过现在有些编码器在编码CBR文件时也像VBR那样将信息记入第一帧,比如著名的lame,它使用"Info"来做CBR的标记。

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。