問題を難しく考えすぎていた。実際のところ、何が原因で音が壊れているかを理解すれば、解決は容易だった。
まずMilkyTrackerについて。GB Studioの公式によると、次のことが明示されている。
MilkyTracker users should save this file as an
.XM
file. Saving a .mod file in MilkyTracker will corrupt it. Export your song as a .mod file every time you want to test your song in-game.
If you're using MilkyTracker, please be aware that it can break how a .mod file can sound. To get around this, save as
.XM
, its natively supported format, and when you're done with the song, export it as a .mod song and try it out in GB Studio.
つまりMilkyTracker上でmodファイルを保存していたことにより、ファイルがクラッシュしていたのだ。そこでXMファイルとして保存し、そのデータをmodファイルをエクスポートすれば解決できる。
だがそれすらやる必要がなかった。そもそもMilkyTrackerに頼る必要はなかった。ピストンコラージュをmodに変換してそのままGB Studioに導入することができた。
以前躓いていた問題は、変換した音楽が1周する際に音がクラッシュするという問題だった。一方でそれまでの音はすべて問題なく鳴っていた。ということは1周する際に何らかの問題が発生していると考えられる。
この問題について公式が言及している部分があった。
Q: I used a D00 effect on my last pattern to loop back to the first, but it's playing glitched in game after it loops once?
A: Use a
Bxx
effect. Using a D00 effect on the last frame will trip GBT into thinking there's more data beyond the song, making it read garbage data.
曲の末尾にD00と呼ばれるコマンドが置かれていた。以下の部分だ。
この部分をB00に置き換えた。だが失敗した。以前のようなノイズではないが低音のノイズが入る。そこでC00もB00に置き換えた。だがそれも同じだった。
ひとつわかったことがある。とにかく曲の末尾のコマンド、この部分が問題なのだ。そこで思い切ってこの2つを外してみた。するとノイズは消え、問題なくループするようになった。
今回の解決策が妥当なものであるとはまだいえない。だがともかく、現時点ではGB Studioでの曲作りに際して次のことが言えるようだ。
まず「ピストンコラージュ」で曲を作る。ここで素材は意識する必要がない。曲を作ったらptcopファイルで保存する。それをPxtoneBoxに入れてmidiに変換する。つぎに「OpenMPT」を開く。そこでGB Studioに内蔵されている「Template」を読み込む。
そうしたら「Template」のシーケンスをすべて消去する。余分なものをすべて削除し、空白となった00だけを残す。ファイルボタンから「Append module」を押して先ほど作ったmidiファイルを読み込む。
チャンネルが多すぎるという通知が出るので、正確に4チャンネルになるまで減らす(チャンネルを右クリックして、remove channelからchoose channels to removeを選択すれば一気に消すことができる)。
次に重要なことだが、チャンネルごとに割り振られた楽器を選択する。
Channel # Sound type Note Range1 Instruments Effects Channel 1 & 2 Pulses C3 to B8 1-4 0, B, C, D, E8, EC, F Channel 3 Waveform C3 to B8 8-15 0, E8 and EC Channel 4 Noise Only C5 16-31 B, C, D, E8, EC, F
ここで述べられている通り、channel1と2では楽器は1-4、channel3では8-15、channel4では16-31を選ぶよう指示されている。この指示に従わないと、おそらく音が反応しないかクラッシュする(とはいえ楽器名にチャンネルが書かれているので見間違うことはおそらくない)。また楽器に限らず、Note Range, Effectsなどにも注意したい。
先に述べたD00やBXXはeffectsに相当する。この部分についてはまだ詳しく理解できていないが、とにかく一旦削除する。これらがすべて終わったらmod形式で保存する。
最後にGB Studioを開いて所定のファイルを開く。そこに新たにつくったmodファイルを置く。GB Studio内で音楽を起動させるイベントを設定する。そしてテストプレイを行ってうまくいけば成功だ。
この手順が偶然のものでないことを確認するために、別の曲を用意した。もし問題なくこの曲が機能すれば、手順の再現性は担保されるだろう。
この曲をptcopファイルで保存し、PxtoneBoxに入れてmidiに変換した。それをOpenMPTに読み込ませたTemplateにAppend moduleさせ、チャンネルを4まで減らし、曲の末尾のC00 D00を外した(速度は変更しなかった)。こうしてできたmodファイルをGB Studioに読み込ませ、イベントを設定しうまく起動するか確認した。
問題なく機能している(編集上のミスでリピートの部分を録画できなかった。面倒なので放置したが、問題なく音は鳴っていた)。
課題点について述べておく必要がある。まずは音楽のスピードだ。今回音楽の速さを調整したが、それはOpenMPTで隙間を埋めたからだ。全部手動だった。そうでなく、元々のスピードを維持する方法はないだろうか。おそらくこの問題については公式サイト、Discordなどを見ればすぐに解決できるだろう。だからあまり悲観していない。
次に音楽の組み合わせだ。チャンネルが4つある通り、音楽は4つのパターンまで作ることができる。今回は1つのチャンネルを作っただけだが、他にも組み合わせることができるだろうか。ピストンコラージュの段階で4つのチャンネルを設定したら、それはmidiとして問題なく変換され、OpenMPTでも問題なく機能するだろうか。現時点では分からないが、これからテストしていくことで判明するだろう。
最後に曲作りについてだ。曲をつくった経験がないので、自分は音楽理論について何も知らない。もしこれから何曲か作るつもりなら、少なくとも簡単な部分について知っておく必要があるだろう。
だがともかく今回の発見は自分の作曲づくりに多大な貢献をもたらした。何よりピストンコラージュで作った音楽をGB Studioに読み込ませられるというのが大きい。この数日間でMilkyTrackerの使い方も学習したが、決して無駄ではないだろう。なぜならそのおかげでOpenMPTの仕組みが少し理解できたからだ。幾分遠回りをしたと思うが、とにかく音楽の問題は解決して安心した。今日は何もせず休憩する。