2011-09-03 82 views
0

这是Flac samples calculation的后续问题。将flac图片分割成轨迹

我是否从该文件的开头实施由该公式生成的偏移量,或者在流开始的元数据之后实现该偏移量(here)?

我的目标是以编程方式自行划分文件 - 主要是作为一种学习练习。我的想法是,我会根据从图像中学习到的值,然后使用我的cuesheet从主图像中获取的实际轨迹,写下我的flac标题和元数据块。

目前在我的代码中,我可以解析每个元数据块并结束帧的起始位置。

回答

1

假设您试图从M:S.F = 3:45.30开始解码。每秒有75帧(CDDA扇区),显然每分钟有60秒。要将M:S.F从您的提示表单转换为示例偏移值,我首先要计算CDDA扇区的数量以达到所需的起点:(((60 * 3) + 45) * 75) + 30 = 16,905。由于每秒钟有75个扇区,假设音频采样频率为44,100 Hz,每个扇区的音频采样数为44,100/75 = 588。因此,您将开始解码的所需音频样本偏移量为588 * 16,905 = 9,940,140

的偏移量只是计算出的偏移量的解压缩的PCM样本,而不是到压缩FLAC流(也以字节为单位)。因此,对于每个FLAC帧,计算其包含的样本数量并保持您的位置运行相符。跳过FLAC帧,直到找到包含起始音频样本的帧。此时,您可以开始解码音频,将FLAC帧中不需要的任何样本丢弃。

FLAC还支持SEEKTABLE块,它的使用将大大加快(和改变)我刚才所描述的过程。如果你还没有,你可以看看reference decoder的实现。

+0

好的。谢谢。这肯定有帮助。现在让我挠头的是帧头中的“UTF-8”编码帧编号(如解码)。但是我仍然需要查看你在参考解码器上给出的链接。 – Cooter