<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>音频技术 on StrMnL的栖息之所</title>
        <link>https://blog.strmnl.eu.org/tags/%E9%9F%B3%E9%A2%91%E6%8A%80%E6%9C%AF/</link>
        <description>Recent content in 音频技术 on StrMnL的栖息之所</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh-cn</language>
        <copyright>Starry Monlark, All Rights Reserved.</copyright>
        <lastBuildDate>Sat, 04 Oct 2025 21:25:39 +0800</lastBuildDate><atom:link href="https://blog.strmnl.eu.org/tags/%E9%9F%B3%E9%A2%91%E6%8A%80%E6%9C%AF/index.xml" rel="self" type="application/rss+xml" /><item>
        <title>不是装饰吗？——钢琴卷帘中的 MIDI 多通道编辑</title>
        <link>https://blog.strmnl.eu.org/p/20240608/fl-tips-1/</link>
        <pubDate>Sat, 08 Jun 2024 00:00:00 +0000</pubDate>
        
        <guid>https://blog.strmnl.eu.org/p/20240608/fl-tips-1/</guid>
        <description>&lt;img src="https://blog.strmnl.eu.org/p/20240608/fl-tips-1/00_cover.png" alt="Featured image of post 不是装饰吗？——钢琴卷帘中的 MIDI 多通道编辑" /&gt;&lt;h2 id=&#34;引入&#34;&gt;引入
&lt;/h2&gt;&lt;p&gt;如图所示的，是你使用 FL Studio 过程中用得最多界面之一：「钢琴卷帘」。&lt;/p&gt;
&lt;p&gt;在 Draw 模式下，你可以在这个窗口中写下绿色的音符。&lt;/p&gt;
&lt;p&gt;有一天，你发现在左上角的色块处可以改变音符的颜色——&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/01_left_click.png&#34;
	width=&#34;683&#34;
	height=&#34;441&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 1-1. 左键&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;154&#34;
		data-flex-basis=&#34;371px&#34;
	
&gt; &lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/02_right_click.png&#34;
	width=&#34;402&#34;
	height=&#34;571&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 1-2. 右键&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;70&#34;
		data-flex-basis=&#34;168px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;左键单击可以在 16 个颜色中选择一个，右键单击则可以自定义当前选中的颜色。&lt;/p&gt;
&lt;p&gt;你觉得默认的绿色看厌了，于是左键换了一个颜色。&lt;/p&gt;
&lt;p&gt;再写新的音符，音符的颜色就改变了&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;然后，你就解锁了这个功能的错误用法！&lt;/strong&gt; (￣▽￣|||)&lt;/p&gt;
&lt;p&gt;事实上，这是用来在一个乐器上写不同 MIDI 通道&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;的音符的。&lt;/p&gt;
&lt;p&gt;即标题所说的 &lt;strong&gt;「MIDI 多通道编辑」&lt;/strong&gt;。&lt;/p&gt;
&lt;h2 id=&#34;正确的用法&#34;&gt;正确的用法
&lt;/h2&gt;&lt;p&gt;左键点击弹出的菜单中，编号为 1 ~ 16 的 16 个颜色对应了 16 个 MIDI 通道。&lt;/p&gt;
&lt;p&gt;用不同的颜色写音符，播放时就会把音符发送到当前乐器对应的通道上。就是这样。&lt;/p&gt;
&lt;p&gt;颜色不同只是为了标识不同 MIDI 通道的音符。(‾◡◝)&lt;/p&gt;
&lt;h2 id=&#34;有什么用&#34;&gt;有什么用？
&lt;/h2&gt;&lt;h3 id=&#34;多通道的-vsti&#34;&gt;多通道的 VSTi
&lt;/h3&gt;&lt;p&gt;如果你经常和 VST 乐器打交道，你应该用过像 Kontakt、HALion 这样的采样器。&lt;/p&gt;
&lt;p&gt;那么你应该已经想到了，在这样的采样器里是可以同时挂载多个音色实例&lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt;的：&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/03_halion_sonic.png&#34;
	width=&#34;911&#34;
	height=&#34;734&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 3-1-1. 以 HALion Sonic 为例&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;124&#34;
		data-flex-basis=&#34;297px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;而每一个音色分别由对应编号的 MIDI 通道的信号控制。&lt;/p&gt;
&lt;p&gt;所以，如果需要挂载多个音色到这样的采样器上，但是出于某种原因，觉得使用 MIDI Out 太碍事的话，就可以改变音符的「颜色」后直接写在采样器的 Channel&lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; 里。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/04_in_one_channel.png&#34;
	width=&#34;1357&#34;
	height=&#34;694&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 3-1-2. 示例&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;195&#34;
		data-flex-basis=&#34;469px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;对于其他支持多通道输入的 VST 乐器，也可以这么干。比如需要在一些鼓机上混用两套鼓的时候。&lt;/p&gt;
&lt;p&gt;但是由于音符可能会重叠，很多情况下使用 MIDI Out 会更方便&lt;sup id=&#34;fnref:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt;。&lt;del&gt;（你要挂两个 VST 也不是不行&lt;/del&gt;&lt;/p&gt;
&lt;h3 id=&#34;某些插件的特殊音符&#34;&gt;某些插件的特殊音符
&lt;/h3&gt;&lt;p&gt;有的插件利用了空闲的 MIDI 通道来实现一些特殊用法，比如 FL 自带的 Harmor。&lt;/p&gt;
&lt;p&gt;使用 Harmor 时，在选择颜色的菜单里，后 5 个通道会有对应功能的说明文字。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/05_harmor.png&#34;
	width=&#34;281&#34;
	height=&#34;192&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 3-2. Harmor 的特殊通道&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;146&#34;
		data-flex-basis=&#34;351px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;差不多是 Keyswitch 那样的东西。&lt;/p&gt;
&lt;p&gt;具体用法请自行查阅 &lt;a class=&#34;link&#34; href=&#34;https://www.image-line.com/fl-studio-learning/fl-studio-online-manual/html/plugins/Harmor.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Harmor 的官方文档&lt;/a&gt; 中的「Special note colors」部分。&lt;/p&gt;
&lt;h2 id=&#34;小技巧快速修改音符的通道&#34;&gt;小技巧——快速修改音符的通道
&lt;/h2&gt;&lt;p&gt;在套 MIDI 的时候，如果直接在主界面的 &lt;code&gt;File -&amp;gt; Import -&amp;gt; MIDI File...&lt;/code&gt; 处导入 MIDI，会发现得到的 Pattern 里的音符都是带对应 MIDI 通道的颜色的。&lt;/p&gt;
&lt;p&gt;如果直接复制到多通道 VST 乐器里，可能就不能正常播放了。&lt;/p&gt;
&lt;p&gt;而选中多个音符时，双击音符又不能批量更改音符的颜色。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/06_single_note.png&#34;
	width=&#34;289&#34;
	height=&#34;295&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 4-1. 单个音符可以修改颜色&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;97&#34;
		data-flex-basis=&#34;235px&#34;
	
&gt; &lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/07_section.png&#34;
	width=&#34;290&#34;
	height=&#34;296&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 4-2. 多个音符不可以修改颜色&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;97&#34;
		data-flex-basis=&#34;235px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;怎么办？套一层 MIDI Out&lt;sup id=&#34;fnref1:4&#34;&gt;&lt;a href=&#34;#fn:4&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;4&lt;/a&gt;&lt;/sup&gt; 吗？&lt;del&gt;我之前还真是这么干的。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;不需要这么做，&lt;del&gt;稍微想一下就知道既然有这个需求怎么可能没做这个功能。&lt;/del&gt;&lt;/p&gt;
&lt;p&gt;先左键单击左上角的色块选好想要的颜色（MIDI 通道），再选中要修改颜色的音符，打开左上角的小三角菜单，选择 &lt;code&gt;Edit -&amp;gt; Change color&lt;/code&gt; 即可批量修改颜色。&lt;/p&gt;
&lt;p&gt;可以看到 Windows 下的快捷键是 &lt;code&gt;Alt + C&lt;/code&gt;，按下快捷键可以达到同样的效果。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20240608/fl-tips-1/08_change_color.png&#34;
	width=&#34;652&#34;
	height=&#34;603&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;图 4-3. Change color选项&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;108&#34;
		data-flex-basis=&#34;259px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;全文完。&lt;/p&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;关于 MIDI 的「通道」概念，请自行查阅有关手册或说明。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;此处表述或不严谨。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;此指 FL Studio「通道机架」界面中的「通道」概念，为了区分称作「Channel」。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:4&#34;&gt;
&lt;p&gt;关于 MIDI Out 插件的使用，请自行查阅相关的教程或&lt;a class=&#34;link&#34; href=&#34;https://www.image-line.com/fl-studio-learning/fl-studio-online-manual/html/plugins/MIDI%20Out.htm&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;官方文档&lt;/a&gt;。&amp;#160;&lt;a href=&#34;#fnref:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&amp;#160;&lt;a href=&#34;#fnref1:4&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
        </item>
        <item>
        <title>东方原作 BGM 文件格式探究</title>
        <link>https://blog.strmnl.eu.org/p/20230701001/</link>
        <pubDate>Sat, 01 Jul 2023 00:00:00 +0000</pubDate>
        
        <guid>https://blog.strmnl.eu.org/p/20230701001/</guid>
        <description>&lt;img src="https://blog.strmnl.eu.org/p/20230701001/cover.jpg" alt="Featured image of post 东方原作 BGM 文件格式探究" /&gt;&lt;p&gt;封面Pixiv插画ID：94070537，画师：Akyuun。如有侵权请联系我以删除之。&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;（本文主要讨论的是弹幕作。格斗作不讨论。）&lt;/p&gt;
&lt;p&gt;众所周知，原作的游戏大小多在 400~500MB（除了体验版）。而游戏文件里最大的都是一个名为 &lt;strong&gt;thbgm.dat&lt;/strong&gt;（体验版游戏中为 &lt;strong&gt;thbgm_tr.dat&lt;/strong&gt;）的文件（th07+）或一个名为 &lt;strong&gt;bgm&lt;/strong&gt; 的文件夹（th06）。显然这就是游戏 BGM 所在了。&lt;del&gt;果然游戏只是音乐的载体而已。&lt;/del&gt; 游戏 BGM 为什么这么大？它是如何储存的？本文将讨论原作 BGM 的相关文件格式。&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;目录&lt;/summary&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88-bgm-%e8%bf%99%e4%b9%88%e5%a4%a7bgm-%e7%9a%84%e9%9f%b3%e9%a2%91%e6%95%b0%e6%8d%ae&#34; &gt;为什么 BGM 这么大：BGM 音频部分的文件格式&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e8%bf%98%e6%9c%89%e4%b8%80%e4%ba%9b%e4%bf%a1%e6%81%af%e5%8e%bb%e5%93%aa%e4%ba%86%e5%be%aa%e7%8e%af%e7%82%b9%e4%b8%8e-wav-%e6%96%87%e4%bb%b6%e5%a4%b4%e7%9a%84%e5%82%a8%e5%ad%98&#34; &gt;还有一些信息去哪了：循环点与 wav 文件头的储存&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e7%ba%a2%e9%ad%94%e4%b9%a1&#34; &gt;红魔乡&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e5%a6%96%e5%a6%96%e6%a2%a6%e5%8f%8a%e5%a6%96%e5%a6%96%e6%a2%a6%e4%bb%a5%e5%90%8e&#34; &gt;妖妖梦及妖妖梦以后&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e5%90%8d%e4%b8%8e%e5%ae%9e%e7%9a%84%e8%81%94%e7%b3%bbmusic-room-%e4%b8%ad%e7%9a%84%e6%9b%b2%e5%90%8d%e5%92%8c%e6%96%87%e5%ad%97&#34; &gt;名与实的联系：Music Room 中的曲名和文字&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e7%ba%a2%e5%a6%96%e6%b0%b8&#34; &gt;红妖永&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e8%8a%b1%e6%98%a0%e5%86%a2%e4%b8%ad%e7%9a%84%e5%b0%8f%e6%94%b9%e5%8a%a8&#34; &gt;花映冢&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e6%96%87%e8%8a%b1%e5%b8%96%e4%b8%ad%e7%9a%84%e5%b0%8f%e6%94%b9%e5%8a%a8&#34; &gt;文花帖&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;#%e5%a6%96%e7%b2%be%e5%a4%a7%e6%88%98%e4%ba%89%e4%b8%8e%e7%a5%9e%e7%81%b5%e5%ba%99%e4%b8%ad%e7%9a%84%e5%b0%8f%e6%94%b9%e5%8a%a8&#34; &gt;妖精大战争与神灵庙&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/details&gt;
&lt;h2 id=&#34;为什么-bgm-这么大bgm-的音频数据&#34;&gt;为什么 BGM 这么大：BGM 的音频数据
&lt;/h2&gt;&lt;p&gt;不难发现东方红魔乡 &lt;del&gt;（搶曽峠杺嫿）&lt;/del&gt; 的 &lt;strong&gt;bgm&lt;/strong&gt; 文件夹里都是以 &lt;strong&gt;th06_xx&lt;/strong&gt; 的格式命名的 wav 文件。嗯&amp;hellip;&amp;hellip;这么原始的不压缩的音频格式能不大吗&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;p&gt;而从东方妖妖梦起，&lt;strong&gt;bgm&lt;/strong&gt; 文件夹为 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 文件所取代。文件格式变了吗？东方妖妖梦~东方花映冢的游戏里仍然把音频版的BGM音源叫做「WAV」，但 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 改个后缀名直接扔进音频播放器会发现打不开。&lt;/p&gt;
&lt;p&gt;由&lt;a class=&#34;link&#34; href=&#34;https://www.cnblogs.com/blumia/p/4282114.html&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;这篇文章&lt;/a&gt;可知，把 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 当成原始音频数据扔进 GoldWave、Audition 等软件里，便可以播放了。所以这个文件应该仍然包含wav格式的音频数据部分。&lt;/p&gt;
&lt;p&gt;以星莲船的 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 为例，扔进 HxD Hex Editor 里，可以看到这样的内容：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;5a 57 41 56 01 00 00 00 00 12 00 00 00 00 00 00
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;通过观察可以猜测，文件的结构如下图所示。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20230701001/zwav.png&#34;
	width=&#34;828&#34;
	height=&#34;487&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;ZUNWAV&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;170&#34;
		data-flex-basis=&#34;408px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;本质上确实还是 wav 格式。&lt;/p&gt;
&lt;p&gt;那么这就是「为什么 BGM 这么大」和「BGM 如何储存」的全部答案。&lt;/p&gt;
&lt;p&gt;全文终&amp;hellip;&amp;hellip;ん？&lt;/p&gt;
&lt;p&gt;你说游戏怎么从连续的音频数据里找到每一首曲子的位置？&lt;/p&gt;
&lt;p&gt;曲子在游戏里不是循环播放的吗，游戏怎么知道这首曲子从哪到哪是循环部分？&lt;/p&gt;
&lt;p&gt;原来的wav格式的文件头里还有那么多正常播放需要的信息（比如采样率、声道数、位深度），怎么在 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 里没有？&lt;/p&gt;
&lt;p&gt;难道这些是硬编码在游戏代码里了吗？&lt;/p&gt;
&lt;p&gt;嗯&amp;hellip;&amp;hellip;这些可能会改变的东西理论上不应该硬编码，尤其是循环点，肯定是每次都要改的。如果不在 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 里，那么这一些应该放在了另外的二进制文件或者文本文件里。这样便于修改，还可以写个脚本一键生成，减少修改时的重复性工作。酒鬼正是设计了另外的文件来存放这些内容。&lt;/p&gt;
&lt;h2 id=&#34;还有一些信息去哪了循环点与-wav-文件头的储存&#34;&gt;还有一些信息去哪了：循环点与 wav 文件头的储存
&lt;/h2&gt;&lt;h3 id=&#34;红魔乡&#34;&gt;红魔乡
&lt;/h3&gt;&lt;p&gt;BGM仍然使用最原始的wav格式的红魔乡不存在文件头的问题，只需要解决循环点的问题。&lt;/p&gt;
&lt;p&gt;用 &lt;a class=&#34;link&#34; href=&#34;https://github.com/thpatch/thtk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;thtk&lt;/a&gt; 中的 thdat 解包游戏目录下的 &lt;strong&gt;紅魔郷MD.DAT&lt;/strong&gt; ，得到的除了 midi 格式的 BGM 以外，发现还有一些和 BGM 同名的 &lt;strong&gt;th06_xx.pos&lt;/strong&gt; 文件和一个 &lt;strong&gt;musiccmt.txt&lt;/strong&gt;。后者留到后面再做讨论，前者应该就是我们要找的循环点了。&lt;/p&gt;
&lt;p&gt;以 &lt;strong&gt;th06_01.pos&lt;/strong&gt; 为例，同样用 HxD 打开：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;a7 09 04 00 a5 d8 27 00
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可以猜测，前一半是循坏开始点，后一半是循环结束点（顺便一提，数值的采用的字节顺序是小端序 &lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt; ）。&lt;a class=&#34;link&#34; href=&#34;https://en.touhouwiki.net/wiki/Technical_Information/BGM&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Touhou Wiki 上的有关信息&lt;/a&gt;表明确实是这样：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;loops in 紅魔郷MD.dat/*.pos&lt;br&gt;
Format: &lt;strong&gt;&amp;lt;start sample&amp;gt;&lt;/strong&gt;.4b &lt;strong&gt;&amp;lt;end sample&amp;gt;&lt;/strong&gt;.4b&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;这个 &lt;em&gt;sample&lt;/em&gt; 是指什么？由&lt;a class=&#34;link&#34; href=&#34;https://tieba.baidu.com/p/4817367665/&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;这个帖子&lt;/a&gt;可以归纳出其数值的计算公式：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;设曲目播放到第t秒时开始/结束循环.&lt;br&gt;
则循坏开始点/结束点的 sample = &lt;code&gt;44100 * t&lt;/code&gt;（结果取整数）&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;显然 44100 即红魔乡所有曲目的采样率 44.1kHz。&lt;/p&gt;
&lt;p&gt;那么结合关于数字音频的常识 &lt;sup id=&#34;fnref:2&#34;&gt;&lt;a href=&#34;#fn:2&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;2&lt;/a&gt;&lt;/sup&gt; ，我们可以知道 sample 的取值 n 即表示「文件中的第 (n+1) 个采样点」。&lt;/p&gt;
&lt;p&gt;所以我们现在知道了，红魔乡的 BGM 循环点用采样点表示，储存在 &lt;strong&gt;紅魔郷MD.DAT&lt;/strong&gt; 里的 &lt;strong&gt;th06_xx.pos&lt;/strong&gt; 中。&lt;/p&gt;
&lt;h3 id=&#34;妖妖梦及妖妖梦以后&#34;&gt;妖妖梦及妖妖梦以后
&lt;/h3&gt;&lt;p&gt;妖妖梦起，游戏目录下的 &lt;strong&gt;thxx.dat&lt;/strong&gt;（xx 为游戏编号，体验版游戏为 &lt;strong&gt;thxx_tr.dat&lt;/strong&gt;）用 &lt;a class=&#34;link&#34; href=&#34;https://github.com/thpatch/thtk&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;thtk&lt;/a&gt; 解包后会得到一个 &lt;strong&gt;thbgm.fmt&lt;/strong&gt; 文件（体验版游戏可能是 &lt;strong&gt;thbgm_tr.fmt&lt;/strong&gt;）。&lt;/p&gt;
&lt;p&gt;嗯&amp;hellip;fmt？不难想到 wav 文件头里的 FormatChunk &lt;sup id=&#34;fnref:3&#34;&gt;&lt;a href=&#34;#fn:3&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;3&lt;/a&gt;&lt;/sup&gt; 。而我们刚才所说的 wav 文件「正常播放需要的信息」，其实就是 wav 文件头里的 FormatChunk。&lt;/p&gt;
&lt;p&gt;以 th19 的 &lt;strong&gt;thbgm_tr.fmt&lt;/strong&gt; 为例，这个也用 HxD 打开看看：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;74 68 31 39 5f 30 31 2e 77 61 76 00 00 00 00 00  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;10 00 00 00 c0 43 94 01 00 20 03 00 c0 43 94 01  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;01 00 02 00 44 ac 00 00 10 b1 02 00 04 00 10 00  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00 00 00 00 ...  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;00
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;发现第三行确实就是完完整整的 FormatChunk 的数据部分，一点不差：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;01 00 02 00 44 ac 00 00 10 b1 02 00 04 00 10 00
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;那其他内容呢？在 HxD 里可以看见，第一行对应的字符便是我们在红魔乡里见过的文件名格式：&lt;strong&gt;th19_01.wav&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;第二行则是循环点相关。具体见下面整个文件的结构。&lt;/p&gt;
&lt;!-- ![](fmt.png) --&gt;
&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://thwiki.cc/-/19gc/#FMT%E6%96%87%E4%BB%B6&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;THBWiki 上的脚本对照表&lt;/a&gt; 用了 C 语言的结构体来表示整个文件的结构，我觉得挺清晰的。&lt;br&gt;
改了一下copy过来：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;18
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;19
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;20
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;21
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;22
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;23
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-C&#34; data-lang=&#34;C&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt; &lt;span class=&#34;c1&#34;&gt;//单首曲目
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fileName&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;16&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;                    &lt;span class=&#34;c1&#34;&gt;//文件名。（大端序，下面的数值皆为小端序）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;songStartOffset&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;//曲目开头在thbgm.dat中的偏移量。单位是bytes，下面三项同。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;unknown&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                 &lt;span class=&#34;c1&#34;&gt;//th13起与loopEndOffsetInSong恒等，此前取值意义不明。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;introLength&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;//循环开始时相对于songStartOffset的偏移量，或理解为曲子的前奏的长度。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;totalLength&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;//循环结束时相对于songStartOffset的偏移量，或理解为曲子的总长。
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;cm&#34;&gt;/*fmt chunk*/&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;short&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;formatTag&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;//恒为1，音频数据为PCM编码
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;short&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;channels&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;              &lt;span class=&#34;c1&#34;&gt;//声道数，常为2
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;samplePerSec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;//采样率，常为44100，神灵庙的灵界版BGM是22050
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bytesPerSec&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;             &lt;span class=&#34;c1&#34;&gt;//blockAlign*samplePerSec 即每秒的采样数据的大小，单位是bytes
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;short&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;blockAlign&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;            &lt;span class=&#34;c1&#34;&gt;//bitsPerSample*channels/8 即每次采样的大小，常为4（单位是bytes）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;unsigned&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;short&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;bitsPerSample&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;         &lt;span class=&#34;c1&#34;&gt;//位深度，常为16（单位是bit）
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;int&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fmtEnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;                           &lt;span class=&#34;c1&#34;&gt;//结尾4个字节都是0
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;thfmt_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;k&#34;&gt;typedef&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;struct&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;//整个文件
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;kt&#34;&gt;thfmt_t&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fmtList&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;18&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;  &lt;span class=&#34;c1&#34;&gt;//18只是举个例子，看实际曲目数
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;    &lt;span class=&#34;kt&#34;&gt;char&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;fileEnd&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;17&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;];&lt;/span&gt;     &lt;span class=&#34;c1&#34;&gt;//结尾17个字节都是&amp;#39;\0&amp;#39;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt; &lt;span class=&#34;kt&#34;&gt;thfmt_body_t&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;&lt;a class=&#34;link&#34; href=&#34;https://en.touhouwiki.net/wiki/Technical_Information/BGM&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;Touhou Wiki 上的说明&lt;/a&gt;也贴上来，这个比较简洁：&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Format: {&amp;lt;wav name&amp;gt;.16b &lt;strong&gt;&amp;lt;start offset&amp;gt;&lt;/strong&gt;.4b &amp;lt;???&amp;gt;.4b &lt;strong&gt;&amp;lt;intro length&amp;gt;&lt;/strong&gt;.4b &lt;strong&gt;&amp;lt;total length&amp;gt;&lt;/strong&gt;.4b&lt;br&gt;
&amp;lt;&lt;a class=&#34;link&#34; href=&#34;https://learn.microsoft.com/en-us/previous-versions/dd757713%28v=vs.85%29&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;
    &gt;RIFF WAVEfmt header (WAVEFORMATEX structure)&lt;/a&gt;&amp;gt;.18b 0000 }.52b*&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;设前奏或全曲时长为 t 秒，则对应 &lt;strong&gt;&amp;lt;intro length&amp;gt;&lt;/strong&gt; 或 &lt;strong&gt;&amp;lt;total length&amp;gt;&lt;/strong&gt; 的计算公式：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;length = bytesPerSec * t
       = blockAlign * samplePerSec * t
       = (samplePerSec * t) * bitsPerSample * channels / 8
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;至于 &lt;strong&gt;&amp;lt;start offset&amp;gt;&lt;/strong&gt;，所谓的偏移量其实就是前面全部内容的 length 嘛。&lt;/p&gt;
&lt;p&gt;因此，手动获取的话，可以采取&lt;a class=&#34;link&#34; href=&#34;#%e4%b8%ba%e4%bb%80%e4%b9%88bgm%e8%bf%99%e4%b9%88%e5%a4%a7bgm%e9%9f%b3%e9%a2%91%e9%83%a8%e5%88%86%e7%9a%84%e6%96%87%e4%bb%b6%e6%a0%bc%e5%bc%8f&#34; &gt;前面提到的&lt;/a&gt;把 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 当成原始音频数据扔进音频编辑软件里的做法。&lt;br&gt;
在软件中查看曲目开始的时间点的时间 t，即为前面所有内容的时长 t。&lt;br&gt;
但是注意代入公式的参数应与你打开文件时的设置一致，而不是 &lt;strong&gt;thbgm.fmt&lt;/strong&gt; 里的参数。&lt;br&gt;
软件会把 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 的文件头也当做音频数据，所以算出来的结果已经包含了文件头的长度。&lt;/p&gt;
&lt;p&gt;但是，感觉不如写个脚本，生成 &lt;strong&gt;thbgm.dat&lt;/strong&gt; 的同时生成配套的 &lt;strong&gt;thbgm.fmt&lt;/strong&gt;。（&lt;/p&gt;
&lt;h2 id=&#34;名与实的联系music-room-中的曲名和文字&#34;&gt;名与实的联系：Music Room 中的曲名和文字
&lt;/h2&gt;&lt;p&gt;现在来看看刚才提到的 &lt;strong&gt;musiccmt.txt&lt;/strong&gt;。在 &lt;strong&gt;thxx.dat&lt;/strong&gt; 解包后的文件里也发现了这个。&lt;/p&gt;
&lt;p&gt;试着用记事本打开红魔乡的 &lt;strong&gt;musiccmt.txt&lt;/strong&gt;。打开后可以看到&amp;hellip;&amp;hellip;&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;侽侾俀俁係俆俇俈俉俋侽侾俀俁係俆侽侾俀俁係俆俇俈俉俋侽侾俀俁係俆  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;？&lt;/p&gt;
&lt;p&gt;嗯&amp;hellip;看不到&amp;hellip;因为 Windows 自带的记事本在中文环境下打开 Shift-JIS 编码的文件会乱码。&lt;/p&gt;
&lt;p&gt;换个编辑器打开就好了。&lt;/p&gt;
&lt;p&gt;打开之后，可以发现主要是出现在 Music Room 里的文字，还有曲目对应的文件名。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;０１２３４５６７８９０１２３４５０１２３４５６７８９０１２３４５  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@bgm/th06_01.mid  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;赤より紅い夢  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No.1 赤より紅い夢  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　タイトル画面テーマです。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　東方なんで、和風にしてみました。いやほんと。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　ゲームはまるで和風じゃ無いくせに(^^;  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　ＳＴＧとは思えないような曲です。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　そもそも、タイトル画面に曲は必要なのでしょうか（笑）？  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt; 
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;推测应该是 Music Room 的曲目列表。&lt;/p&gt;
&lt;h3 id=&#34;红妖永&#34;&gt;红妖永
&lt;/h3&gt;&lt;p&gt;对照着 Music Room 来看，在红魔乡中（也适用于妖和永）：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;那一行全角数字不知道有什么用。&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;格式大体上是：&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;6
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@bgm/&amp;lt;文件名&amp;gt;.mid
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;Music Room 列表里显示的标题&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&amp;lt;乐评里的标题&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　&amp;lt;乐评正文&amp;gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;文件名虽然写上了后缀 &lt;strong&gt;.mid&lt;/strong&gt;，但使用WAV音源时游戏应该会匹配同名的 &lt;strong&gt;.wav&lt;/strong&gt; 文件。&lt;br&gt;
尝试将 &lt;strong&gt;mid&lt;/strong&gt; 改成任意的 3 个字母，仍然能播放；但是改成非 3 个字母，在红魔乡里就不能正常播放，而在妖妖梦和永夜抄里可以正常播放。如果尝试删掉后缀名，红妖永都会发生崩溃。&lt;/p&gt;
&lt;p&gt;另外，上面的无法正常播放的情况，仅限于在 Music Room 里无法播放。可以推测游戏进程中，以及标题画面中，BGM 的读取并不受这个文件影响。&lt;/p&gt;
&lt;p&gt;乐评正文的缩进是每行前敲一个全角空格实现的。&lt;/p&gt;
&lt;p&gt;另外，在永夜抄里添加了「Now Playing」的提示。内容和 &lt;strong&gt;&amp;lt;乐评里的标题&amp;gt;&lt;/strong&gt; 是一样的。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20230701001/musicroom_EoSD.jpg&#34;
	width=&#34;640&#34;
	height=&#34;480&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Music Room of EoSD「恋恋音乐馆」&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;133&#34;
		data-flex-basis=&#34;320px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;花映冢中的小改动&#34;&gt;花映冢中的小改动
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;０１２３４５６７８９０１２３４５０１２３４５６７８９０１２３４５  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@bgm/th09_00.mid  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No.1  花映塚　～ Higan Retour  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　　タイトル画面テーマです。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　　いつもの曲ですね。ええ。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　　ゲーム自体はここ暫くの間の中では一番バカになっているのに、  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　この曲だけはいつものままです。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　　ちょっとバカ度が足りないかもしれない。ここだけは幻想郷に。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;可以发现相比红妖永少了一行 &lt;strong&gt;&amp;lt;Music Room 列表里显示的标题&amp;gt;&lt;/strong&gt;。因为 Music Room 里的样式改了。原来的 &lt;strong&gt;&amp;lt;乐评里的标题&amp;gt;&lt;/strong&gt; 不再显示在乐评中，只显示上方在“再生中”的文字旁，列表里的标题直接使用了“再生中”旁的文字。&lt;/p&gt;
&lt;p&gt;缩进变为了每一句的开头用两个全角空格，句中换行用一个全角空格。&lt;/p&gt;
&lt;p&gt;没有 midi 的曲目的后缀名仍然是 &lt;strong&gt;.mid&lt;/strong&gt;。后缀名相关特性同妖永。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20230701001/musicroom_PoFV.jpg&#34;
	width=&#34;640&#34;
	height=&#34;480&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Music Room of PoFV&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;133&#34;
		data-flex-basis=&#34;320px&#34;
	
&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;（题外话：为什么花映冢 Music Room 里新加的暂停和淡出到后面又没了）&lt;/em&gt;&lt;/p&gt;
&lt;h3 id=&#34;文花帖中的小改动&#34;&gt;文花帖中的小改动
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 曲のコメント  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#0１２３４５６７８９０１２３４５６７８９０１２３４５６７８９０  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@bgm/th10_02.wav  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No.1  封印されし神々  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;♪封印されし神々  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　タイトル画面のテーマです。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　いつもの曲……ですね。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　和風な神様がテーマと言う事で、少し大げさに作ってみました。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　割と奇妙奇天烈なリズムの曲ですが、ずっと聞いているとしっくり  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　来ます。特にデバッグ中とか。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;（注：这一部分的变化最早出现在东方文花帖而非风神录。）&lt;/p&gt;
&lt;p&gt;前面添加了三行。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt;1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;3
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 曲のコメント  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;「#」是注释吗？似乎不是。全角数字那一行的内容变了，前面也加了个「#」。&lt;br&gt;
（数字里第 1 个 0 就是半角的，并不是我复制时候出错了。而且一直到兽王园这个半角的 0 都没改过来&amp;hellip;&amp;hellip;）&lt;/p&gt;
&lt;p&gt;随着 MIDI 音源的彻底移除，文件名的后缀改成了 &lt;strong&gt;.wav&lt;/strong&gt;。但后缀名相关特性仍同妖永花。&lt;/p&gt;
&lt;p&gt;其余部分又回到了之前的三行的格式。但是原本的 &lt;strong&gt;&amp;lt;乐评里的标题&amp;gt;&lt;/strong&gt; 的格式继续用在列表中，现在的乐评中的标题前面加了个「♪」（于是在游戏里和正文对齐了）。&lt;/p&gt;
&lt;p&gt;另外乐评中的空行上其实都有一个全角空格。没有全角空格的行读取时会被忽略。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20230701001/musicroom_MoF.jpg&#34;
	width=&#34;640&#34;
	height=&#34;480&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Music Room of MoF&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;133&#34;
		data-flex-basis=&#34;320px&#34;
	
&gt;&lt;/p&gt;
&lt;h3 id=&#34;妖精大战争与神灵庙中的小改动&#34;&gt;妖精大战争与神灵庙中的小改动
&lt;/h3&gt;&lt;div class=&#34;highlight&#34;&gt;&lt;div class=&#34;chroma&#34;&gt;
&lt;table class=&#34;lntable&#34;&gt;&lt;tr&gt;&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code&gt;&lt;span class=&#34;lnt&#34;&gt; 1
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 2
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 3
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 4
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 5
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 6
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 7
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 8
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt; 9
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;10
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;11
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;12
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;13
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;14
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;15
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;16
&lt;/span&gt;&lt;span class=&#34;lnt&#34;&gt;17
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td class=&#34;lntd&#34;&gt;
&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;# 曲のコメント  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;#0１２３４５６７８９０１２３４５６７８９０１２３４５６７８９０  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;@bgm/th13_00  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;No. 1 欲深き霊魂  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;♪欲深き霊魂  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　タイトル画面のテーマです。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　いつものメロディです。今回はダーク色多めでお送りします。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　ＳＴＧはポップな世界観よりダークな方が好まれる傾向にある  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　気がします。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;　このゲームは全く持ってダークじゃないんですけどね。  
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;妖精大战争中，列表中的标题的「No.」与数字之间加了一个半角空格。&lt;/p&gt;
&lt;p&gt;神灵庙中，文件名的后缀去掉了。尝试加上后缀名无法正常播放，但不会崩溃，而是会播放标题曲。&lt;/p&gt;
&lt;p&gt;此外，尝试将疮痍曲加进来时，可以播放，但总是会显示为没有在游戏进程中播放过的曲目，如下图所示。&lt;br&gt;
暂时不知道游戏是怎么记录有没有播放过的。&lt;br&gt;
可以看见，最后一行虽然加上了井号，但是没有被屏蔽，所以我刚才说「# 似乎不是注释」的原因。&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;https://blog.strmnl.eu.org/p/20230701001/add_new_music.jpg&#34;
	width=&#34;640&#34;
	height=&#34;480&#34;
	
	loading=&#34;lazy&#34;
	
		alt=&#34;Music Room of TD, trying adding a custom song&#34;
	
	
		class=&#34;gallery-image&#34; 
		data-flex-grow=&#34;133&#34;
		data-flex-basis=&#34;320px&#34;
	
&gt;&lt;/p&gt;
&lt;!--下面是脚注--&gt;
&lt;div class=&#34;footnotes&#34; role=&#34;doc-endnotes&#34;&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id=&#34;fn:1&#34;&gt;
&lt;p&gt;将一个多位数的低位放在较小的地址处，高位放在较大的地址处，则称小端序。&lt;br&gt;
例如在这一处，值 0x000409a7 被记为了 a7 09 04 00。&lt;br&gt;
后文提到的大端序则会反过来记为 00 04 09 a7，和我们从左往右的阅读顺序一致。&amp;#160;&lt;a href=&#34;#fnref:1&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:2&#34;&gt;
&lt;p&gt;在音频数字化的三个步骤「采样——量化——编码」中，“采样”时每秒采样的次数称为采样率。故 &lt;em&gt;采样率 * 秒数&lt;/em&gt; 即表示使用这一采样率时，时长为这一秒数的音频包含的采样点个数。&amp;#160;&lt;a href=&#34;#fnref:2&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li id=&#34;fn:3&#34;&gt;
&lt;p&gt;该 chunk 开头三个字节便是字符 &lt;em&gt;fmt&lt;/em&gt;。&amp;#160;&lt;a href=&#34;#fnref:3&#34; class=&#34;footnote-backref&#34; role=&#34;doc-backlink&#34;&gt;&amp;#x21a9;&amp;#xfe0e;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</description>
        </item>
        
    </channel>
</rss>
