0

这是Flac 样本计算的后续问题。

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

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

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

4

1 回答 1

1

假设您尝试从 开始解码M:S.F = 3:45.30。每秒有 75 个帧(CDDA 扇区),显然每分钟有 60 秒。要将 M:SF 从您的提示表转换为示例偏移值,我将首先计算 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块,使用它会大大加快(和改变)我刚才描述的过程。如果您还没有,可以查看参考解码器的实现。

于 2011-09-03T23:43:01.360 回答