zoukankan      html  css  js  c++  java
  • MP3基本概念及MP3的头信息

    MP3 的全称为MPEG1 Layer-3 音频文件

    每帧采样数(帧时间戳):

    我们首先区分两个术语:帧大小和帧长度。帧大小即每帧采样数表示一帧中采样的个数,这是恒定值。其值如下表所示

     

    MPEG 1

    MPEG 2 (LSF)

    MPEG 2.5 (LSF)

    Layer I

    384

    384

    384

    Layer II

    1152

    1152

    1152

    Layer III

    1152

    576

    576

      

     

    采样率(单位:Hz),2 bits

    每秒采集信息的次数,例如:44100Hz, 每秒取44100次,每1/44100秒取一次(计算一次音频振幅的位置)

    bits

    MPEG1

    MPEG2

    MPEG2.5

    00

    44100

    22050

    11025

    01

    48000

    24000

    12000

    10

    32000

    16000

    8000

    11

    保留

     

     

    比特率(单位:Kbps)

    索引值

    MPEG 1

    MPEG 2, 2.5 (LSF)

    Layer I

    Layer II

    Layer III

    Layer I

    Layer II & III

    0000

    Free

    0001

    32

    32

    32

    32

    8

    0010

    64

    48

    40

    48

    16

    0011

    96

    56

    48

    56

    24

    0100

    128

    64

    56

    64

    32

    0101

    160

    80

    64

    80

    40

    0110

    192

    96

    80

    96

    48

    0111

    224

    112

    96

    112

    56

    1000

    256

    128

    112

    128

    64

    1001

    288

    160

    128

    144

    80

    1010

    320

    192

    160

    160

    96

    1011

    352

    224

    192

    176

    112

    1100

    384

    256

    224

    192

    128

    1101

    416

    320

    256

    224

    144

    1110

    448

    384

    320

    256

    160

    1111

    Bad

    Free表示空闲,如果固定比特率(这种文件不能变换比特率)和上表定义的不同,应该有应用程序决定。这种情况的实现应该只用于内部目的因为第三方应用程序是没有办法找出正确比特率的。但是这么做并不是很重要况且还浪费精力。

    Bad表示该值无效。

     

    帧长:

    LyaerI使用公式:

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

    LyerII和LyaerIII使用公式:

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

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

    MPEG1                                                   MPEG2

    1152                                                     576

    最大帧长:144*320/32 = 1440         最大帧长:72*160/22.05=522.45

    最小帧长:144*32/44.1=104.49        最小帧长:72*8/16=36

     

    每帧持续时间(单位:毫秒) :

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

    MPEG1 Layer III 采样率为44.1KHz,一帧持续时间为26.12...不是整数,约等于 26ms。

    MPEG2 Layer III 采样率为16KHz,    一帧持续时间为72ms.

     

    1152/44.1=26.12ms

    1152/48=24ms

    1152/32=36ms

     

    576/22.05=26.12ms

    576/24=24ms

    576/16=36ms

     

    帧频 (单位:HZ):

    帧频 = 采样频率 / 每帧采样数

    采样率为44.1KHz,帧频38.12帧/s。

    MPEG2 Layer III 采样率为16KHz,    一帧持续时间为72ms.

    44100/1152=38.28125

    48000/1152=41.67

    32000/1152=27.78

     

    22050/576=38.28125

    24000/576=41.67

    16000/576=27.78

     

     

    LayerIII

    MPEG 1

    MPEG 2 (LSF)

    比特率Kbps

     

     

    0000

    Free

    0001

    32

    8

    0010

    40

    16

    0011

    48

    24

    0100

    56

    32

    0101

    64

    40

    0110

    80

    48

    0111

    96

    56

    1000

    112

    64

    1001

    128

    80

    1010

    160

    96

    1011

    192

    112

    1100

    224

    128

    1101

    256

    144

    1110

    320

    160

    1111

    Bad

    每帧采样数Hz

     

     

     

    1152

    576

    采样频率Hz

     

     

    00

    44100

    22050

    01

    48000

    24000

    10

    32000

    16000

    11

    保留

     

     

    MP3头结构:

    AAAAAAAA    AAA  BB CC D    EEEE  FFGH    II JJ K L MM

    11111111    111  11 00 0    1000  0001    00 00 1 1 00

    11111111    111  11 01 0    1001  0001    00 00 1 1 00

    11111111    111  11 01 1    1111  0001    00 00 1 1 00

    符号i

    长度(bits)

    位置(bits)

    描述

    例子

    A

    11

    (31-21)

    帧同步(所有位置1)

    &0xFFF2 11位同步+MPEG2

    &0xFFFA 11位同步+MPEG1

    1111 1111 111

    B

    2

    (20,19)

    MPEG 音频版本ID

    00 – MPEG 2.5 01 – 保留

    10 – MPEG 2 (ISO/IEC 13818-3)

    11 – MPEG 1 (ISO/IEC 11172-3)

    注:MPEG 2.5不是官方标准。帧头第20个比特用来表示2.5版本。不支持该版本的应用程序一般认为该比特位置位为帧同步位,也就是说帧同步(A)的长度为12而不是这里规定的11,这样B也就变成了1位(第19个位)。推荐使用该表的方法因为这样允许你可以区分三个版本以获得最高兼容性。

    11


    C

    2

    (18,17)

    Layer描述

    00 - 保留

    01 - Layer III

    10 - Layer II

    11 - Layer I

    01

    D

    1

    (16)

    校验位 0 - 紧跟帧头后有16位即2个字节用作CRC校验

    1 - 没有校验

    1

    E

    4

    (15,12)

    位率索引

    索引值

    MPEG 1

    MPEG 2, 2.5 (LSF)

    Layer I

    Layer II

    Layer III

    Layer I

    Layer II & III

    0000

    Free

    0001

    32

    32

    32

    32

    8

    0010

    64

    48

    40

    48

    16

    0011

    96

    56

    48

    56

    24

    0100

    128

    64

    56

    64

    32

    0101

    160

    80

    64

    80

    40

    0110

    192

    96

    80

    96

    48

    0111

    224

    112

    96

    112

    56

    1000

    256

    128

    112

    128

    64

    1001

    288

    160

    128

    144

    80

    1010

    320

    192

    160

    160

    96

    1011

    352

    224

    192

    176

    112

    1100

    384

    256

    224

    192

    128

    1101

    416

    320

    256

    224

    144

    1110

    448

    384

    320

    256

    160

    1111

    Bad

                 

    注:所有值单位为kbps,而且1kbit=1000bit而不是1024bit

    Free表示空闲,如果固定比特率(这种文件不能变换比特率)和上表定义的不同,应该有应用程序决定。这种情况的实现应该只用于内部目的因为第三方应用程序是没有办法找出正确比特率的。但是这么做并不是很重要况且还浪费精力。

    Bad表示该值无效。 MPEG文件可以有VBR。表示文件的比特率可以变化。我已经知道了两种惯用方法: 比特率变换(bitrate switching):每一帧都创建成不同的比特率。可以应用在任何层。LayerIII解码器必须支持该方法。LayerI和LayerII也可以支持。 比特池(bit reservoir):比特率可以使从前面的帧中借来的(受限),以便腾出空间来容纳输入信号部分。然而这样就导致各帧之间不再相互独立,意味着不能随便分割文件。这种方法只有LayerIII支持。 LyaerII中有一些不被允许比特率组合和模式。下表是允许的组合。

    bitrate

    allowed modes

    free

    all

    32

    single channel

    48

    single channel

    56

    single channel

    64

    all

    80

    single channel

    96

    all

    112

    all

    128

    all

    160

    all

    192

    all

    224

    stereo, intensity stereo, dual channel

    256

    stereo, intensity stereo, dual channel

    320

    stereo, intensity stereo, dual channel

    384

    stereo, intensity stereo, dual channel

    1001


    F

    2

    (11,10)

    采样频率(单位:Hz)

    bits

    MPEG1

    MPEG2

    MPEG2.5

    00

    44100

    22050

    11025

    01

    48000

    24000

    12000

    10

    32000

    16000

    8000

    11

    保留

    11

    G

    1

    (9)

    填充位 0 – 没有填充

    1 – 填充了一个额外的空位 填充用来达到正确的比特率。

    例如:128k 44.1kHz LayerII使用了很多418bit或417bit长的帧来达到正确的128k比特率。LyaerI的空位有32bit长,LayerII和LayerIII的空位有8bit长。

    0

    H

    1

    (8)

    私有bit,可以用来做特殊应用。例如可以用来触发应用程序的特殊事件。

    1

    I

    2

    (7,6)

    声道 00 立体声 01 联合立体声(立体声) 10 双声道(立体声) 11 单声道(单声)

    注:双声道文件由二个独立的单声道组成。 每一个声道使用整个文件一半的位率。大多数的解码器把它当作立体声来输出,但是它并不总是这种情况。按我的理解就是是两个声道的信息是完全相同的,并不能把它当作立体声看待。

    01

    J

    2

    (5,4)

    扩展模式(仅在联合立体声时有效) 扩展模式用来连接对立体声效果无用的信息,来减少所需的资源。这两个位在联合立体声模式下有编码器动态指定。 完整的MPEG文件的频率序列分成有32个子带。在LayerI和LayerII中这两个位确定强度立体声应用的频带。 LayerIII中这两个位确定应用了哪一种联合立体声(M/S stereo或者Intensity stereo)频带由解压算法决定。

    Layer I & II

    Layer III

    M/S stereo

    Intensity stereo

    00

    bands 4 to 31

    off

    off

    01

    bands 8 to 31

    off

    on

    10

    bands 12 to 31

    on

    off

    11

    bands 16 to 31

    on

    on

    00

    K

    1

    (3)

    版权

    0无版权

    1有版权

    1

    L

    1

    (2)

    原创

    0 原创拷贝

    1 原创

    1

    M

    2

    (1,0)

    强调

    00 - 无

    01 - 50/15 ms

    10 - 保留 11 - CCIT J.17

    00

     

    文档:

    http://mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm

    http://www.mp3-tech.org/

    https://tools.ietf.org/html/rfc2250

    https://tools.ietf.org/html/rfc1889

    https://tools.ietf.org/html/rfc2038

    https://tools.ietf.org/html/rfc3119

    https://www.codeproject.com/Articles/8295/MPEG-Audio-Frame-Header

    https://blog.csdn.net/yu_yuan_1314/article/details/9112509

    https://blog.csdn.net/cpq37/article/details/11213323

    https://www.datavoyage.com/mpgscript/mpeghdr.htm

    https://id3.org/mp3Frame

    http://www.mp3-tech.org/tests/wma9/index.html MP3样例下载

    https://blog.csdn.net/houxiaoni01/article/details/78810674

    http://wiki.hydrogenaud.io/index.php?title=MP3

  • 相关阅读:
    一个实用的JS自定义函数addLoadEvent()
    Vim快捷键分类(二)
    Vim快捷键分类(一)
    变量的作用域
    高效整洁CSS代码原则 (上)
    高效整洁CSS代码原则 (下)
    OpenGL 函数作用列表
    glViewport()函数和glOrtho()函数的理解
    车辆动力学基础(1)
    OpenGL: glFlush 和glSwapBuffer
  • 原文地址:https://www.cnblogs.com/frisk/p/13167430.html
Copyright © 2011-2022 走看看