2016-01-13 48 views
2

我正在学习FLAC解码问题,但无法弄清楚如何获得FLAC帧长度。请帮忙。 https://xiph.org/flac/format.html 我docoded METADATA_BLOCK_STREAMINFO,并得到如下数据:如何获得FLAC帧长度

mMinBlock: 4096 
mMaxBlock: 4096 
mMinFrame: 1201 
mMaxFrame: 12804 
mSampleRate: 44100 
mBitPerSample: 16 
mTotalSample: 14170212 

然后我开始分析第一帧,下面是从第一帧头中的信息:

isFixBlock = true 
blockSize = 12 
sampleRate = 9 
channel = 10 
sampleSize = 4 
number = 0 
Blocking strategy is fixed-blocksize; 
Block size: 1100, it means 256 * (2^(12-8)) samples = 4096 samples; 
Sample rate: 1001 : 44.1kHz; 
Channel: 2; 
Sample size: 100 : 16 bits per sample; 
从上面的信息来源

所以,我们”我们知道这个帧有4096个样本,样本大小是每个样本16位。这意味着这个帧的长度至少是(忽略子帧头和帧尾等)4096 * 16/8 = 8192字节。但是,如果我手动检查FLAC文件,第一帧和第二帧的偏移间隔仅为2976字节,这意味着第一帧的帧长度仅为2976字节。我的计算有什么问题吗?

我的目的是得到每帧的帧偏移量和帧长度,有什么好方法吗?我知道有同步代码0xFF F8,但效率非常低。 在此先感谢!

回答