关于东方原作(限弹幕作)的thbgm.fmt
零、建议阅读新版
本篇专栏的内容为旧版,仅留作存档,建议阅读新版本。
新版本中本文内容经过重新整理,且新增了红魔乡的BGM循环点、thbgm.dat、Music Room乐评musiccmt.txt等的相关内容。
一、什么是thbgm.fmt?
从东方妖妖梦起,wav格式的游戏BGM被储存在游戏主程序同级目录下的thbgm.dat中(限弹幕作)。但文件中只储存了采样数据,不包含各BGM的循环点以及wav文件头,这些内容被储存在了thbgm.fmt中。(请区分这两个文件)
thbgm.fmt可以通过使用thtk(Touhou Toolkit)中的thdat解包游戏主程序同级目录下的thxx.dat获得(xx为游戏编号)。它是一个二进制文件,可以使用HxD等十六进制编辑器打开。

二、文件的内容
1.简述
文件由多首BGM的数据依次串联而成。
2.格式
单首BGM的数据遵循如下格式。

3.对格式的说明
(1).上面的偏移地址是相对的,将该首曲目文件名部分第一字节视为00H。
(2).文件名部分使用ASCII编码。该部分内容如果修改,会导致游戏不能正常读取BGM(即使只是交换了两首曲子的文件名)。文件名通常短于16字节,如th18_08.wav为11字节,剩余5个字节在文件名部分的末尾以0补齐。
(3)10H~1FH部分为循环点数据。
(4).起始点指的是曲目起始点在thbgm.dat中的偏移地址。
(5).循环开始点、循环结束点的单位均为字节。这三个时间点是相对于起始点而言的,即它们的值是以它们在thbgm.dat中实际的偏移地址分别减去起始点得到的。
(14H~17H的作用尚不明确)
(6).20H~33H部分为wav文件头数据。该部分内容需要与thbgm.dat中的采样数据相对应。原版中东方神灵庙的灵界BGM的wav文件头与其他BGM有差异(主要是采样率不同导致的不同)。
(7).格式种类的值一般为1,表示使用线性PCM编码。
(8).采样率的单位为Hz;采样深度的单位为bit。
(9).除了文件名部分以外,其它数据内容的储存遵循小端格式,例如:原版东方虹龙洞中第二首曲目的起始点为0x1281230,则实际上在十六进制编辑器中应记作“30 12 28 01”。第四个字节的“0”是将0x1281230补齐为0x01281230得到的。
(10).在最后一首曲目的数据后面,除去本身末尾的4个为0的字节,总是有17个为0的字节。
(11).一些数据的计算:
时间点对应偏移地址=时间点秒数*每秒字节数+文件头长度
注:原版thbgm.dat存在16字节的文件头。如果时间点秒数是将原版thbgm.dat以原始数据格式导入Audition等软件得出的,则不需要考虑文件头长度。
每秒字节数=采样率*每次采样字节数
每次采样字节数=声道数*采样深度
注:采样深度在此处的计算中使用的单位为字节,而thbgm.fmt中采样深度的单位为bit,请注意单位换算。