欢迎光临
我们一直在努力

音频格式之flac

        flac(Free Lossless Audio Codec)是一种无损压缩格式,压缩后音质和原 WAV 无损音频完全一致,解压后比特流 100% 还原,没有音质损失。 flac官网:FLAC – What is FLAC?

一 、flac整体格式介绍

┌─────────────────────────────────────────────────────────────────┐
│ FLAC 文件结构 │
├─────────────────────────────────────────────────────────────────┤
│ 4 bytes: Stream Sync ("fLaC" = 0x664C6143) │
├─────────────────────────────────────────────────────────────────┤
│ Metadata Blocks (可变数量) │
│ ├── STREAMINFO (必需,第一个) │
│ ├── PADDING (可选) │
│ ├── APPLICATION (可选) │
│ ├── SEEKTABLE (可选) │
│ ├── VORBIS_COMMENT (可选) │
│ ├── CUESHEET (可选) │
│ └── PICTURE (可选) │
├─────────────────────────────────────────────────────────────────┤
│ Audio Frames (多个) │
│ ├── Frame Header │
│ ├── Subframes (每个通道一个) │
│ └── Frame Footer (CRC-16) │
└─────────────────────────────────────────────────────────────────┘

     flac音频格式主要由header、metadata和audio frame三个大块组成。

1.1,header

占用4字节,固定为字符串 :flac   (0x66 0x4C 0x61 0x43),主要用于快速识别这标准文件FLAC文件。

1.2,元数据(Metadata Block)

        元数据紧靠flac头,按顺序排列,至少有一个STREAMINFO 块,并且STREAMINFO块必须第一个出现。

元数据统一格式:

block: block header(1 字节)+ block size(3 字节大端)+ block playload

block header: endbit(1bit) + Meta type(7bit)

ID块名称作用
0 STREAMINFO 核心音频参数(必选第一个)
1 PADDING 空白填充,预留编辑空间
2 APPLICATION 厂商自定义私有数据
3 SEEKTABLE 索引表,快速跳转播放
4 VORBIS_COMMENT 标签信息(歌手、歌名、专辑、歌词)
5 CUESHEET 分轨 CUE 信息,整轨无损带分点
6 PICTURE 内嵌专辑封面图片
自定义 Unkonw 扩展

1.3 Audio Frame

元数据结束后全是连续音频帧,每帧独立可解码,无需依赖前后帧(关键特性:帧独立,损坏仅单帧失效)

单帧结构: 帧头 Frame Header(可变) → 子帧Subframe(每个声道1个) → 帧尾CRC16校验

Audio Frame代表一个帧,每个帧由帧头,子帧,和CRC校验组成,其中子帧是一个声道一个。

二、元数据子块详解

2.1 STREAMINFO

├─────────────────────────────────────────────────────────────────┤
│ 字节 0-3: 元数据块头部 │
│ ├─ bit 0: is_last (0/1) │
│ ├─ bits 1-7: type = 0 (PADDING) │
│ └─ bits 8-31: length (Meta 字节数, 24位) │
├─────────────────────────────────────────────────────────────────┤

字节偏移: 0 1 2 3
位偏移: 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
┌─────────────────────────────────────────────────────────────────────────────────────┐
│ min_blocksize (16 bits) │
│ [0-15] │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ max_blocksize (16 bits) │
│ [16-31] │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ min_framesize (24 bits) │
│ [32-55] │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ max_framesize (24 bits) │
│ [56-79] │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ sample_rate (20 bits) │ channels (3) │ bits_per_sample (5) │
│ [80-99] │ [100-102] │ [103-107] │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ total_samples (36 bits) │
│ [108-143] │
├─────────────────────────────────────────────────────────────────────────────────────┤
│ md5sum (128 bits = 16 bytes) │
│ [144-271] │
└─────────────────────────────────────────────────────────────────────────────────────┘

字段位长度字节数说明
min_blocksize 16 bits 2 最小每帧采样数
max_blocksize 16 bits 2 最大每帧采样数
min_framesize 24 bits 3 最小帧字节数
max_framesize 24 bits 3 最大帧字节数
sample_rate 20 bits 2.5 采样率(Hz)
channels 3 bits ~0.4 通道数
bits_per_sample 5 bits ~0.6 位深
total_samples 36 bits 4.5 总采样数
md5sum 128 bits 16 MD5 校验和
总计 34 字节 34 固定大小

1, min_blocksize / max_blocksize

位范围: 0-15 (min), 16-31 (max) 值范围: 16 ~ 65535 单位: 采样数/帧

  • 块大小指每帧包含的采样数
  • FLAC 支持可变块大小,允许编码器根据音频复杂度动态调整
  • 典型值:4096、4608(CD 质量常用)

2.2 min_framesize / max_framesize

位范围: 32-55 (min), 56-79 (max) 值范围: 0 ~ 16777215 (24位) 单位: 字节/帧

  • 帧大小指压缩后的帧字节数
  • 0 表示未指定(编码器可能无法确定精确范围)

3,sample_rate(采样率)

位范围: 80-99 (20 bits) 值范围: 1 ~ 1048575 Hz

支持的采样率覆盖范围非常广:

  • 常见:8kHz(电话)、16kHz(语音)、44.1kHz(CD)、48kHz(数字音频)、96kHz(高解析)

4, channels(通道数)

位范围: 100-102 (3 bits) 值范围: 1 ~ 8 计算方式: channels = (raw_value + 1)

 从单声道到7.1声道, 具体可以参考AC3的声道映射表。

5,bits_per_sample(位深)

位范围: 103-107 (5 bits) 值范围: 4 ~ 32 bits 计算方式: bits_per_sample = (raw_value + 1)

支持 4-32 位采样精度,常见值:16-bit(CD)、24-bit(高解析)

6,total_samples(总采样数)

位范围: 108-143 (36 bits) 值范围: 0 ~ 2^36 – 1

  • 用于计算音频总时长:duration = total_samples / sample_rate
  • 0 表示未知长度(流式传输时可能无法预先知道)

7 md5sum(MD5 校验和)

位范围: 144-271 (128 bits = 16 bytes)
用途: 验证解码后音频与原始音频的一致性

  • 对原始 PCM 数据(去除 WAV 头)计算 MD5
  • 解码完成后可用于校验数据完整性

2.2 PADDING

┌─────────────────────────────────────────────────────────────────┐
│ PADDING 元数据块结构 │
├─────────────────────────────────────────────────────────────────┤
│ 字节 0-3: 元数据块头部 │
│ ├─ bit 0: is_last (0/1) │
│ ├─ bits 1-7: type = 1 (PADDING) │
│ └─ bits 8-31: length (padding 字节数, 24位) │
├─────────────────────────────────────────────────────────────────┤
│ 字节 4-(4+length-1): padding 数据 │
│ └─ 全部为 0x00 字节(或任意值,解码器忽略) │
└─────────────────────────────────────────────────────────────────┘

2.3 APPLICATION

存储应用程序专用数据,APPLICATION 块为 FLAC 格式提供了高度灵活的扩展机制,允许开发者在不破坏兼容性的前提下添加自定义功能。

┌─────────────────────────────────────────────────────────────────┐
│ APPLICATION 元数据块结构 │
├─────────────────────────────────────────────────────────────────┤
│ 字节 0-3: 元数据块头部 │
│ ├─ bit 0: is_last (0/1) │
│ ├─ bits 1-7: type = 2 (APPLICATION) │
│ └─ bits 8-31: length (块数据总长度 = 4 + data_length) │
├─────────────────────────────────────────────────────────────────┤
│ 字节 4-7: Application ID (4 bytes) │
│ └─ 通常为 ASCII 字符串,如 "EXIF"、"CUES" 等 │
├─────────────────────────────────────────────────────────────────┤
│ 字节 8-(8+data_length-1): 应用程序数据 │
│ └─ 格式由 Application ID 的所有者定义 │
└─────────────────────────────────────────────────────────────────┘

ID说明注册者
flac FLAC 官方工具使用 Xiph.org
meta 元数据编辑器使用 Xiph.org
exif EXIF 图像元数据 第三方
cprt 版权信息 第三方
CUES 音轨索引信息 第三方
TAGG 自定义标签 第三方

2.4 SeekTable 定位

seekTable 是 FLAC 实现高效音频定位的关键组件,通过预计算索引点,将随机访问的时间复杂度从 O(n) 降低到 O(log n),显著提升了用户体验。

┌─────────────────────────────────────────────────────────────────┐
│ SeekTable 元数据块结构 │
├─────────────────────────────────────────────────────────────────┤
│ 字节 0-3: 元数据块头部 │
│ ├─ bit 0: is_last (0/1) │
│ ├─ bits 1-7: type = 3 (SEEKTABLE) │
│ └─ bits 8-31: length (块数据总长度 = num_points × 18) │
├─────────────────────────────────────────────────────────────────┤
│ SeekPoint 数组(每个 18 字节) │
│ ├─ SeekPoint[0] │
│ │ ├─ sample_number (8 bytes) │
│ │ ├─ stream_offset (8 bytes) │
│ │ └─ frame_samples (2 bytes) │
│ ├─ SeekPoint[1] │
│ │ └─ … │
│ └─ SeekPoint[num_points-1] │
│ └─ … │
└─────────────────────────────────────────────────────────────────┘

字段位长度字节数说明
sample_number 64 bits 8 目标帧的起始采样编号
stream_offset 64 bits 8 目标帧相对于第一帧起始位置的字节偏移
frame_samples 16 bits 2 目标帧包含的采样数
单个 SeekPoint 18 字节 18 固定大小

2.5 VorbisComment

存储文本标签(艺术家、标题、专辑等),灵活、易读、扩展性强

┌─────────────────────────────────────────────────────────────────┐
│ VorbisComment 块结构 │
├─────────────────────────────────────────────────────────────────┤
│ 字节 0-3: 元数据块头部 │
│ ├─ bit 0: is_last (0/1) │
│ ├─ bits 1-7: type = 4 (VORBIS_COMMENT) │
│ └─ bits 8-31: length │
├─────────────────────────────────────────────────────────────────┤
│ Vendor String: │
│ ├─ 4 bytes: vendor_length (32-bit LE) │
│ └─ vendor_length bytes: vendor string (UTF-8) │
├─────────────────────────────────────────────────────────────────┤
│ Comments: │
│ ├─ 4 bytes: num_comments (32-bit LE) │
│ └─ num_comments × Comment Entry: │
│ ├─ 4 bytes: entry_length (32-bit LE) │
│ └─ entry_length bytes: "NAME=VALUE" (UTF-8) │
└─────────────────────────────────────────────────────────────────┘

字段大小说明
vendor_string 可变 编码器/工具标识字符串
num_comments 4 字节 注释条目数量
comments[] 可变 注释条目数组

2.6  CueSheet

定义音轨边界和索引点,精确到采样级,支持 CD-DA 标准

┌─────────────────────────────────────────────────────────────────┐
│ CueSheet 块结构 │
├─────────────────────────────────────────────────────────────────┤
│ 字节 0-3: 元数据块头部 │
│ ├─ bit 0: is_last (0/1) │
│ ├─ bits 1-7: type = 5 (CUESHEET) │
│ └─ bits 8-31: length │
├─────────────────────────────────────────────────────────────────┤
│ 128 bytes: media_catalog_number (ASCII, 右填充 NUL) │
├─────────────────────────────────────────────────────────────────┤
│ 8 bytes: lead_in (64-bit BE) │
├─────────────────────────────────────────────────────────────────┤
│ 1 byte: is_cd (0/1) │
├─────────────────────────────────────────────────────────────────┤
│ 258 bytes: reserved (必须为 0) │
├─────────────────────────────────────────────────────────────────┤
│ 1 byte: num_tracks (1-100) │
├─────────────────────────────────────────────────────────────────┤
│ num_tracks × Track Structure: │
│ ├─ 8 bytes: track_offset (64-bit BE) │
│ ├─ 1 byte: track_number (1-99, 170=lead-out) │
│ ├─ 12 bytes: isrc (ASCII) │
│ ├─ 1 byte: track_type (bit 0) + pre_emphasis (bit 1) │
│ ├─ 13 bytes: reserved │
│ ├─ 1 byte: num_indices │
│ └─ num_indices × Index Structure: │
│ ├─ 8 bytes: index_offset (64-bit BE) │
│ ├─ 1 byte: index_number (0-99) │
│ └─ 3 bytes: reserved │
└─────────────────────────────────────────────────────────────────┘

字段大小说明
media_catalog_number 128 字节 媒体目录号(MCN)
lead_in 8 字节 CD 导入区采样数(通常为 2秒 × 采样率)
is_cd 1 字节 是否为 CD-DA 格式
num_tracks 1 字节 音轨数量(1-100)
tracks[] 可变 音轨信息数组

2.7 Picture

存储封面图片和其他图像,支持多种图片格式,可存储多个图片

MIME type = "image/jpeg"  → JPEG 格式 MIME type = "image/png"   → PNG 格式 MIME type = "–>"         → 图片 URL(data 字段为 URL 字符串)

┌─────────────────────────────────────────────────────────────────┐
│ Picture 块结构 │
├─────────────────────────────────────────────────────────────────┤
│ 字节 0-3: 元数据块头部 │
│ ├─ bit 0: is_last (0/1) │
│ ├─ bits 1-7: type = 6 (PICTURE) │
│ └─ bits 8-31: length │
├─────────────────────────────────────────────────────────────────┤
│ 4 bytes: picture_type (32-bit BE) │
├─────────────────────────────────────────────────────────────────┤
│ MIME Type: │
│ ├─ 4 bytes: mime_type_length (32-bit BE) │
│ └─ mime_type_length bytes: MIME type string │
├─────────────────────────────────────────────────────────────────┤
│ Description: │
│ ├─ 4 bytes: description_length (32-bit BE) │
│ └─ description_length bytes: description (UTF-8) │
├─────────────────────────────────────────────────────────────────┤
│ 4 bytes: width (32-bit BE) │
├─────────────────────────────────────────────────────────────────┤
│ 4 bytes: height (32-bit BE) │
├─────────────────────────────────────────────────────────────────┤
│ 4 bytes: depth (32-bit BE) │
├─────────────────────────────────────────────────────────────────┤
│ 4 bytes: colors (32-bit BE) │
├─────────────────────────────────────────────────────────────────┤
│ Picture Data: │
│ ├─ 4 bytes: data_length (32-bit BE) │
│ └─ data_length bytes: 图片二进制数据 │
└─────────────────────────────────────────────────────────────────┘

字段大小说明
type 4 字节 图片类型(见上表)
mime_type 可变 MIME 类型(如 image/jpeg、image/png)
description 可变 图片描述(UTF-8)
width 4 字节 宽度(像素)
height 4 字节 高度(像素)
depth 4 字节 位深度(如 24 表示 RGB 各 8 位)
colors 4 字节 颜色数(索引色使用,0 表示真彩色)
data_length 4 字节 图片数据长度
data 可变 图片二进制数据

2.7 Unknow

   用户可以根据自己的需要自定义类型ID, 和用途,扩展音频的扩展信息。

三、Audio Fame

3.1 Frame 概览

┌─────────────────────────────────────────────────────────────────┐
│ FLAC Audio Frame │
├─────────────────────────────────────────────────────────────────┤
│ Frame Header (可变长度,14-52 bits) │
│ ├─ Sync Code (14 bits: 0b11111111111110) │
│ ├─ Reserved (1 bit: 0) │
│ ├─ Blocking Strategy (1 bit) │
│ ├─ Block Size (4 bits) │
│ ├─ Sample Rate (4 bits) │
│ ├─ Channel Assignment (4 bits) │
│ ├─ Bits per Sample (3 bits) │
│ ├─ Reserved (1 bit: 0) │
│ └─ Frame Number / Sample Number (可变) │
│ └─ CRC-8 (8 bits) │
├─────────────────────────────────────────────────────────────────┤
│ Subframes (每个通道一个,可变长度) │
│ ├─ Subframe 0 (通道 0) │
│ ├─ Subframe 1 (通道 1) │
│ ├─ … │
│ └─ Subframe N-1 (通道 N-1) │
├─────────────────────────────────────────────────────────────────┤
│ Frame Footer │
│ └─ CRC-16 (16 bits) │
└─────────────────────────────────────────────────────────────────┘

3.2 Frame Header

位偏移: 0 14 15 16 20
┌────────────────┬────────┬────────┬────────┬────────┬────────┐
│ Sync Code │Reserved│ Block │ Sample │Channel │ Bits │
│ (14 bits) │ (1 bit)│ Size │ Rate │Assign │ per │
│ 0b11111111111110│ │(4 bits)│(4 bits)│(4 bits)│Sample │
│ │ │ │ │ │(3 bits)│
└────────────────┴────────┴────────┴────────┴────────┴────────┘
位偏移: 23 24 36+
┌────────┬──────────────────────────────────────────────────┐
│Reserved│ Frame/Sample Number (8-36 bits) │
│ (1 bit)│ │
└────────┴──────────────────────────────────────────────────┘
位偏移: 36+/40+
┌────────┐
│ CRC-8 │
│(8 bits)│
└────────┘

3.2.1 sync Code

解码器通过寻找这个特定的位模式来定位帧的起始位置。

位长度: 14 bits
固定值: 0b11111111111110 (0x3FFE)
用途: 帧同步标识

3.2.2 Block Size (4 bits)

编码值块大小(采样数)说明
0000 16
0001 32
0010 64
0011 128
0100 256
0101 512
0110 1024
0111 2048
1000-1010 特殊编码(见下表)
1011-1111 直接编码(值+1) 11-16 对应 12-17

特殊编码(1000-1010):

编码值块大小来源
1000 STREAMINFO.min_blocksize
1001 STREAMINFO.max_blocksize
1010 接下来 8 位直接编码

3.2.3 Sample Rate (4 bits)

编码值采样率(Hz)说明
0000 8000
0001 16000
0010 22050
0011 24000
0100 32000
0101 44100 CD 标准
0110 48000 专业音频
0111 96000 高解析
1000-1011 特殊编码(见下表)
1100-1111 接下来 8/16 位直接编码

特殊编码(1000-1011):

编码值采样率来源/计算
1000 STREAMINFO.sample_rate
1001 接下来 8 位,乘以 1000
1010 接下来 16 位,直接编码
1011 接下来 16 位,乘以 10

3.2.4 Channel Assignment (4 bits)

编码值通道数通道布局
0000-0111 1-8 独立通道(各通道独立编码)
1000 2 左+边声道(Left+Side)
1001 2 右+边声道(Right+Side)
1010 2 中+边声道(Mid+Side)
1011-1111 保留

立体声编码模式:

Left+Side:
Left = Left_original
Right = Left_original – Side

Right+Side:
Right = Right_original
Left = Right_original – Side

Mid+Side:
Mid = (Left + Right) / 2
Side = (Left – Right) / 2

3.2.5 Bits per Sample (3 bits)

编码值位深(bits)
000 8
001 12
010 16
011 20
100 24
101 特殊编码(见下表)
110 特殊编码(见下表)
111 保留

特殊编码:

编码值位深来源
101 STREAMINFO.bits_per_sample
110 接下来 5 位,值+1(4-32 bits)

3.2.6 Frame Number / Sample Number

长度: 可变(取决于编码方式)
类型选择:
– frame_number: 帧编号(较小值,适合短文件)
– sample_number: 采样编号(较大值,适合长文件)

编号编码规则:

条件编码方式长度
sample_number < 2^8 直接编码 8 bits
sample_number < 2^16 0 + 16 bits 17 bits
sample_number < 2^24 0 + 24 bits 25 bits
sample_number < 2^36 0 + 36 bits 37 bits
使用帧编号 1 + frame_number 1 + 8/16/24/32 bits

3.2.7 CRC-8 校验

多项式: x^8 + x^2 + x^1 + x^0
初始值: 0
覆盖范围: 整个帧头(从 sync code 到编号字段)

3.3 SubFrame 详细解析

3.3.1 通用结构

所有的子帧都符合以下格式:

┌─────────────────────────────────────────────────────────────┐
│ SubFrame 结构 │
├─────────────────────────────────────────────────────────────┤
│ SubFrame Header (10-12 bits) │
│ ├─ Zero Padding (1 bit: 0) │
│ ├─ Type (6 bits) │
│ └─ Wasted Bits Flag (1 bit) + Wasted Bits (0-4 bits) │
├─────────────────────────────────────────────────────────────┤
│ SubFrame Data (可变长度) │
│ └─ 取决于具体类型 │
└─────────────────────────────────────────────────────────────┘

Type 字段的位编码:

位模式类型附加信息
000000 CONSTANT
000001 VERBATIM
00001x FIXED order = 0-1
0001xx FIXED order = 2-3
001xxx FIXED order = 4-7(实际最大为 4)
010xxx 保留
100xxx LPC order = 0-7
101xxx LPC order = 8-15
110xxx LPC order = 16-23
111xxx LPC order = 24-31

3.3.2 CONSTANT SubFrame

┌─────────────────────────────────────────────────────┐
│ CONSTANT SubFrame 完整位布局 │
├─────────────────────────────────────────────────────┤
│ Header (8 bits): │
│ bit 0: zero_padding = 0 │
│ bits 1-6: type = 0x00 (CONSTANT) │
│ bit 7: wasted_bits_flag = 0 │
├─────────────────────────────────────────────────────┤
│ Data: │
│ value (bits_per_sample bits) │
└─────────────────────────────────────────────────────┘

  • 静音段:音频中的静音部分,所有采样值为 0
  • DC 偏移:所有采样值相同的信号
  • 测试信号:固定频率的方波等

3.3.3 VERBATIM SubFrame

┌─────────────────────────────────────────────────────┐
│ VERBATIM SubFrame 完整位布局 │
├─────────────────────────────────────────────────────┤
│ Header (8 bits): │
│ bit 0: zero_padding = 0 │
│ bits 1-6: type = 0x01 (VERBATIM) │
│ bit 7: wasted_bits_flag = 0 │
├─────────────────────────────────────────────────────┤
│ Data: │
│ raw_samples (blocksize × bits_per_sample bits) │
└─────────────────────────────────────────────────────┘

  • 随机噪声:无法预测的信号(如白噪声)
  • 复杂瞬态:鼓声、打击乐等突发信号
  • 已压缩数据:已加密或已压缩的音频片段
特性说明
压缩率 无压缩(1:1)
解码速度 最快(直接复制)
存储格式 原始 PCM 数据

3.3.4 FIXED SubFrame

┌─────────────────────────────────────────────────────┐
│ FIXED SubFrame 完整位布局 │
├─────────────────────────────────────────────────────┤
│ Header (8-13 bits): │
│ bit 0: zero_padding = 0 │
│ bits 1-6: type = 0x02-0x1F (FIXED + order) │
│ bit 7: wasted_bits_flag │
│ bits 8-12: wasted_bits (if flag=1) │
├─────────────────────────────────────────────────────┤
│ Warmup Samples: │
│ order × bits_per_sample bits │
├─────────────────────────────────────────────────────┤
│ Residual Data (Rice 编码): │
│ (blocksize – order) 个残差值 │
└─────────────────────────────────────────────────────┘

  • 音乐信号:大多数音乐具有良好的相关性
  • 语音信号:人声具有较强的预测性
  • 周期性信号:乐器演奏的持续音

FIXED 使用固定系数的线性预测,系数由阶数决定:

Order预测公式系数
0 predictor = 0
1 predictor = sample[n-1] [1]
2 predictor = 2×sample[n-1] – sample[n-2] [2, -1]
3 predictor = 3×sample[n-1] – 3×sample[n-2] + sample[n-3] [3, -3, 1]
4 predictor = 4×sample[n-1] – 6×sample[n-2] + 4×sample[n-3] – sample[n-4] [4, -6, 4, -1]

3.3.5LPC SubFrame(线性预测编码)

┌─────────────────────────────────────────────────────┐
│ LPC SubFrame 完整位布局 │
├─────────────────────────────────────────────────────┤
│ Header (17-22 bits): │
│ bit 0: zero_padding = 0 │
│ bits 1-6: type = 0x40-0x7F (LPC + order) │
│ bit 7: wasted_bits_flag │
│ bits 8-12: wasted_bits (if flag=1) │
│ bits 13-16: qlp_coeff_precision (4 bits) │
│ bits 17-21: quantization_level (5 bits) │
├─────────────────────────────────────────────────────┤
│ LPC Coefficients: │
│ order × qlp_coeff_precision bits │
├─────────────────────────────────────────────────────┤
│ Warmup Samples: │
│ order × bits_per_sample bits │
├─────────────────────────────────────────────────────┤
│ Residual Data (Rice 编码): │
│ (blocksize – order) 个残差值 │
└─────────────────────────────────────────────────────┘

LPC 使用自适应系数的线性预测:

预测公式:
predictor[n] = Σ(qlp_coeff[i] × sample[n-i-1]) / 2^quantization_level

残差计算:
residual[n] = actual[n] – predictor[n]

编码器使用自相关法计算 LPC 系数步骤:
1. 计算自相关函数 R[k] = Σ(sample[i] × sample[i+k])
2. 解 Yule-Walker 方程得到 LPC 系数
3. 量化系数并确定精度

赞(0)
未经允许不得转载:171主机测评 » 音频格式之flac
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址