codingWang / Issue

private space .Do NOT look at it.
3 stars 0 forks source link

flac音频文件格式 #21

Open codingWang opened 6 years ago

codingWang commented 6 years ago

https://xiph.org/flac/documentation_format_overview.html https://xiph.org/flac/format.html#metadata_block_application

flac流的基本结构是:

前四个字节是为了标识FLAC流,接下来的元数据包括了除音频原始数据外关于音频的所有消息,元数据之后就是编码后的音频数据。

元数据

flac定义了几种类型的元数据块这里有完整的列表.元数据可以是任意长度,解码器遇到不懂的元数据块时可以跳过。只有_STREAMINFO_块时强制的。此块数据包含采样率,channel数等,这些数据可以帮助解码器管理自己的buffer,比如最大最小数据率和最大最小块的大小。STREAMINFO块中还包含未编码音频数据的MD5签名。这对于检查传输错误的整个流非常有用。

其他块允许填充、seek tables、标记、cuesheets和特定于应用程序的数据。There are flac options for adding PADDING blocks or specifying seek points.FLAC不要求有seek points,但是它能加速seeks,或被用于在编辑程序中加入字幕。

如果你有自定义元数据的需求,你也可以定义自己的元数据并从这里获取一个ID,之后你就可以在编码的时候保留一个正确大小的padding块,并且在编码之后用你的_APPLICATION_块复写这个padding块。这样完全可以和FLAC兼容。能够识别你元数据的解码器将解析它,其他不认识别的将忽略它。

Audio Data 元数据之后是音频数据。两者非交错存储。像大部分的音频编码一样,flac将未编码的音频数据分成块,单独编码每一个块。编码后的块被打包进帧并追加到流的后面。The reference encoder 为整个流使用单个块大小,但flac格式不要求这样做。

blocking block size是一个重要的编码参数。如果它太小the frame overhead 将降低压缩率。如果太大,压缩机的建模阶段将无法生成一个有效的模型。理解FLAC的建模将帮助您通过改变块大小来提高对某些输入的压缩。 在最一般的情况下,使用44.1kHz音频的线性预测,最优块大小将在2-6 ksamples之间。在这种情况下,flac默认的块大小是4096。使用快速固定的预测器,较小的块大小通常更适合于较小的帧头。

INTER-CHANNEL DECORRELATION 在立体声输入中,一旦数据被阻塞,it is optionally passed through an inter-channel decorrelation stage,左右channel通过以下转换,将被转换成中间和side channel: mid = (left + right)/2 side = left -right 不像joint stereo,这是一个无损的处理。对于常见的CD音质这将导致额外的压缩。 flac对此有两种处理方式:

MODELING 下一步,编码器使用函数近似表示信号,在这种情况下,这个近似的函数被执行时,每一个采样数据将使用更少的位来存储编码。函数的参数也会被传递,所以参数不能太复杂。FLAC有两种近似法: