• 多媒体文件格式解析之MP3


    音频文件格式MP3

    1. MP3是什么?

    MP3是MPEG-1 Audio Layer 3的缩写,是当今较流行的一种数字音频编码和有损压缩格式,它设计用来大幅度地降低音频数据量,而对于大多数用户的听觉感受来说,重放的音质与最初的不压缩音频相比没有明显的下降。它是在1991年发明和标准化的。
    MP3支持多种码率:32、40、48、56、64、80、96、112、128、160、192、224、256、320 kbit/s。目前128kbit/s是最常用的码率。
    因为MP3是一种有损压缩格式,它提供了多种不同“比特率”(bit rate)的选项—也就是用来表示每秒音频所需的编码数据位数。典型的速度介于128kbps和320kbps(kbit/s)之间。与此对照的是,CD上未经压缩的音频比特率是1411.2 kbps(16 位/采样点 × 44100 采样点/秒 × 2 通道)。
    Fraunhofer Gesellschaft(FhG)在他们的官方网站上,公布了下面的MPEG-1 Layer 1/2/3的压缩率和数据速率用于比较:

    1. Layer 1: 384 kbit/s,压缩率 4:1
    2. Layer 2: 192 - 256 kbit/s,压缩率 8:1-6:1
    3. Layer 3: 112 - 128 kbit/s,压缩率 12:1-10:1

    不同层面之间的差别是因为它们使用了不同的心理声学模型导致的。

    2. MP3文件的构成

    典型的MP3文件包含:ID3v2(TAG)、Frame、ID3v1(TAG)
    除了Frame其他部分都是可选的。
    各部分功能如下:

    • ID3v2 在文件开始的位置,包含了作者、作曲、专辑等信息,长度不固定,扩展了ID3v1 的信息量,可以存储歌词,该专辑的图片等大容量的信息。
    • 一系列的音频数据的帧,在文件的中间位置,个数由文件大小和帧长决定。
      每个帧的长度可能不固定,也可能固定,由位率bitrate决定。
      每个帧又分为帧头和数据实体两部分。
      帧头记录了mp3 的位率、采样率、版本等信息,每个帧之间相互独立。
    • ID3v1在文件结尾的位置,包含了作者、作曲、专辑等信息,长度为128Byte。

    MP3文件构成按照下面结构顺序存储:

    mp3_file
    {
        // if existed
        ID3v2_Tag
    
        // at least one audio_frame decided by file size
        for (;!file_eof;)
            audio_frame
    
        // if existed
        ID3v1_Tag
    }
    

    之所以在MP3文件格式中添加ID3 Tag信息主要是因为原始的MP3音频帧格式不支持存储任何附加信息,为了提供针对MP3的描述信息,分别引入了ID3v1标准(1996年)、ID3v2标准(1998年)。ID3v1是一组附加在MP3文件后面的数据,位于文件结尾,它的长度是固定的128字节,该字段以"TAG"字符串作为开头。ID3v2位于MP3文件开头,并以帧的形式存储多个音频元数据,该字段必须以"ID3"作为开头,长度不定。
    关于这两个字段的介绍建议参考ID3

    音频帧的构成

    音频帧包含两部分:帧头和帧数据。
    这里需要说明下,每个音频帧都是可以单独解码的。每一帧都包含完整的可解码信息,实际文件中可能变更编码信息。

    音频帧头

    音频帧头长度固定为4 Byte(32位),前12 bit固定是同步字节,其值为0xFFF。
    对于固定位率的MP3文件,所有帧的帧头格式一样其数据结构如下:

    typedef FrameHeader {
        unsigned int sync: 11;                //同步信息
        unsigned int version: 2;              //版本
        unsigned int layer: 2;                //层
        unsigned int protection_bit: 1;       //CRC校验
        unsigned int bitrate_index: 4;        //位率
        unsigned int sampling_frequency: 2;   //采样频率
        unsigned int padding: 1;              //帧长调节
        unsigned int private: 1;              //保留字
        unsigned int mode: 2;                 //声道模式
        unsigned int mode extension: 2;       //扩充模式
        unsigned int copyright: 1;            //版权
        unsigned int original: 1;             //原版标志
        unsigned int emphasis: 2;             //强调模式
    }HEADER, *LPHEADER;
    

    若protection_bit为1,则还要帧头最后添加16 bit的校验位。也可以参考下表:

    Bits Meaning Value Note

    1-12 Sync word 111111111111
    13 Version 1 1 = MPEG-1
    14-15 Layer 01 01 = Layer 3
    16 protection_bit 1 1 = No
    17-20 Bit rate 1000 1000 = 128 kbps
    21-22 Frequency 00 00 = 44100 Hz
    23 Pad bit 0 0 = Frame is no padded
    24 Priv. bit 0 Unkown
    25-26 Mode 01 Joint stereo
    27-28 Mode extension 00 00 = Intensity and MS off
    29 Copyright 0 0 = Not copyrighted
    30 Original 0 0 = Not original
    31-32 Emphasis 00 00 = None

    一个音频帧的长度可以通过下面方式计算:
    MP3帧长取决于位率和频率,计算公式为:

    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
    

    也可以直接使用同步字节切分比特流。

    音频帧数据

    目前比较多的MP3文件都是采用固定码率的编码(CBR)方式,其帧长度是固定的。也有一种VBR的格式,建议参考MP3文件格式简介

    参考资料

    1. ISO 11172-3 MPEG Audio specification
    2. ISO 13818_CHS_MPEG-2标准
    3. https://zh.wikipedia.org/wiki/ID3
    4. http://baike.baidu.com/link?url=w03WYIssuVFLjrhjztMlWqxkQW5Lt-4k4sEd7HcpJhSqy1VLR1HUQKaXxB4ZHa_qLOvdYy56kAX-WwLmNh8ola
    5. http://www.cnblogs.com/watertao/archive/2011/11/08/2241774.html
    6. http://blog.csdn.net/fulinwsuafcie/article/details/8972346#t13
  • 相关阅读:
    浅析匿名内部类
    Neo4j学习实录 下载-安装-springboot操作neo4j
    Objective-C内存管理教程和原理剖析2
    Objective-C内存管理教程和原理剖析
    Objective-C语法快速参考
    Objective-C语法
    一点基础的东西:Objective-C的类型和常量
    IOS开发之----异常处理
    UITextField的详细使用
    TextField知多少
  • 原文地址:https://www.cnblogs.com/tocy/p/mp3-file-format.html
Copyright © 2020-2023  润新知