将flac图像分成轨道

时间:2011-09-03 22:54:33

标签: audio lossless cue

这是Flac samples calculation的后续问题。

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

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

目前在我的代码中,我可以解析每个元数据块并最终确定帧的开始位置。

1 个答案:

答案 0 :(得分:1)

假设您尝试从M:S.F = 3:45.30开始解码。每秒有75帧(CDDA扇区),显然每分钟有60秒。要将C:S.F从您的cue表转换为样本偏移值,我首先要计算所需起点的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的实现。