BGM素材集をひとまとめにしてみよう(オフセット利用)

Last-modified: 2007-06-21 (木) 22:09:29

やりたいこと

普通、音楽ファイル(ループチャンクがあるもの)は、一つのフォルダに入れることで、ba.aldにまとめることができます。その際のリンク番号はファイル名で決まります。
しかし、アリスから配布されている素材集は、

ranceⅠ_01.wav
ranceⅠ_02.wav
...
ranceⅡ_01.wav
ranceⅡ_02.wav
...
ranceⅢ_01.wav
ranceⅢ_02.wav
...

というように、各ランスシリーズごとにファイル名は 1 からふられています。このままでは、全ての素材音楽を一つのALDに格納してしまうことができません。かといって、一つ一つファイルを手作業でリネームしていくのは面倒な作業です。

この場合、オフセット番号を使うことにしましょう。

オフセットとは

オフセットとは、ある基準点から見た差分のことです。
各音楽ファイルをALDにまとめる場合、リンク番号は重複させることができません。
そのため、1つのフォルダの音楽ファイルを1-16番まで入れるとすると、
別のフォルダの音楽ファイルは17番以降に入れる必要があります。

ここでは

WAVE_R1フォルダの中身を0-16 
WAVE_R2フォルダの中身を21-39 
WAVE_R3フォルダの中身を41-78 
WAVE_R4フォルダの中身を81-122
WAVE_R5フォルダの中身を131-152番に入れる方法を書きます。

(それぞれのフォルダの間には、2-8ほどリンク番号の穴があります。もしその穴が気になるから
きっちり埋めたい、という場合には後述するBGM.HEDのそれぞれのオフセット番号を
  0 16 35 73 115
にすると良いでしょう。そうすればきっちりと埋まります)

作業

さて、では作業の開始です。
まず新規のディレクトリを作り、その中にそれぞれの素材集から

  • WAVE_R1
  • WAVE_R2
  • WAVE_R3
  • WAVE_R4
  • WAVE_R5

をコピーして入れましょう。これはWAVEファイルの入っているフォルダです。
次に、

  • wavLinker.exe
  • EncodeOGG.dll
  • XXIDecoder.dll
  • ALDLinker.dll
  • BGM.HED

をコピーして入れましょう。WavLinkkerを動かすために必要なファイルです。
そうしたら、BGM.HEDをエディターで開きます。

とりあえずBGM.HEDの中を、こんな感じに記述します。

"#WavLinker"
"bgmBA.ald"
"A",  0,"WAVE_R1\","ogg",  1,  0
"A",  0,"WAVE_R2\","ogg",  1,  20
"A",  0,"WAVE_R3\","ogg",  1,  40
"A",  0,"WAVE_R4\","ogg",  1,  80
"A",  0,"WAVE_R5\","ogg",  1,  130

それぞれのフィールドの意味

  1. "A"というのは「BA.ALDに作る」という意味です。
  2. は特に意味がありません。
  3. 「"WAVE_R1"フォルダの中のファイルからALDを作る」という意味です。
  4. 「OGG形式に圧縮する」という意味です。
  5. 「指定した圧縮比重1でする」という意味です。1に近づくほど容量が下がります。
  6. オフセット番号です。そのフォルダの中身のWAVは、すべてその数値だけ繰り上がって登録されます。この場合、ranceⅡ_01.oggはリンク番号21番に、ranceⅢ_01.oggはリンク番号41番に登録されます。 
samp_offSet_001.jpg

補足

ちなみにすべての素材をogg、圧縮値1で生成した場合、その容量は

ファイル名容量(KB)
BA.ald47,804
BA.bgi8

となるようです。容量はoggで緩和されるとはいえ、MIDIよりも重いため注意。

使用方法

ソース上でこのALDを使う場合、曲数が膨大なので、
単にリンク番号で管理するよりも、それぞれ作品のタイトルを変数に直し、
管理した方がいいかもしれません。
例:

//グローバル定数で次のような変数を作成します
const int ランスⅠ = 0;
const int ランスⅡ = 20;
const int ランスⅢ = 40;
const int ランスⅣ = 80;
const int ランスⅤ = 130;

こうすると、ソース上で

MSC_PLAY(ランスⅣ + 33); //ランスⅣの33番(113番)を再生します

このように記述できるため、管理しやすくなります。

そして、曲の定数を用意する場合にも

//グローバル定数
const int ランスⅢ通常戦闘 = ランスⅢ + 09;
const int ランスⅣ通常戦闘 = ランスⅣ + 08;

このように若干、楽になります。


関連リンク