对flac格式的初探

        由于一直在看ogg的格式,ogg也包含flac的音频,这几天顺势看了一下flac的音频格式,这种格式的详细解析都在http://flac.sourceforge.net/format.html#residual官网上,非常非常详尽。

         flac的stream格式: “fLaC”标识,四个字节

                                                  METADATA_BLOCK+

                                                  FRAME+                                            

         判断一个文件的音频类型是否是flac格式,从最初的四个字节为’f’’L’’a’’C’开始,之后就是多个的METADATA_BLOCK,每一个METADATA_BLOCK都在HEADER中标识出此BLOCK的类型,其中类型有:

METADATA_BLOCK_STREAMINFO
METADATA_BLOCK_PADDING
METADATA_BLOCK_APPLICATION
METADATA_BLOCK_SEEKTABLE
METADATA_BLOCK_VORBIS_COMMENT
METADATA_BLOCK_CUESHEET
METADATA_BLOCK_PICTURE

一般重要参数都在METADATA BLOCK_STREAMINFO中,可以得到bps,channel,sample rate等,帮助我们得到此音频流的总时长。

           flac的FRAME格式如下:FRAME_HEADER

                                                            SUBFRAME+    (每个channel都有一个sumberframe)

                                                            FRAME_FOOTER

       这里需要强调的是每一帧都有同步码11 1111 1111 1110,帧头的大小也是不确定的,头中所包含的信息参数也很多,对flac的格式解析很有帮助。每一帧的长度也是不确定的,需要具体根据不同的情况计算得到,这里我就不做详细解释了,官网上很详细,想必比我解释更清楚。

        flac 的SUBFRAME格式:

SUBFRAME_HEADER    头内信息指定之后的这一subframe时什么类型

SUBFRAME_CONSTANT
|| SUBFRAME_FIXED
|| SUBFRAME_LPC
|| SUBFRAME_VERBATIM

大家不明白的可以看官网,也可以和我讨论~

原文地址:https://www.cnblogs.com/candycaicai/p/1951579.html