ボイスリストの作り方 - Patch.ini 編

はじめに

Patch.ini は音源そのものの設定やボイスのカテゴリ、 音色名とドラムインスト名の定義を含みます。 Patch.ini の構造はざっと見ると次のようになっています。

Device Name セクションは、 音源名など非常に重要な情報を定義します。 そのため Patch.ini には必ずこのセクションが含まれます。

ここでは各セクションがどのような意味を持つのか説明しながら、 例として TestSynth という名前の音源のボイスリストを作っていきます。

Device Name セクション

Device Name セクションは Patch.ini に必ず現れるセクションです。 このセクションでは対象音源の名前、種類、 そして後述の「カテゴリと命令の対応関係」などを定義します。 このセクションに含まれるエントリーは次の 5 つです。

ではこれらの一つ一つについて説明していきます。

Name エントリー

Name エントリーはボイスリストが対象としている音源の名前を定義します。 Name エントリーの値に対象音源の名前を書きましょう。 TestSynth という名前の音源のボイスリストを作る場合、 Name エントリーは次のように書きます。

[Device Name]
Name = TestSynth

ID エントリー

ID エントリーはボイスリストが対象としている音源を区別する ID (番号)を指定します。 この ID は SOL が音源を他の音源と区別するために使われるので、 他の音源と同じ ID を使ってはいけません。 他の音源と重複する事を避けるため、ID の指定には GUID と呼ばれる数値形式を使います。

GUID は Globally Unique IDentifier の略であり、 「(確率的に)地球上で絶対に重複が無い唯一の数値」というものです。 GUID を生成するプログラムは探せば簡単に見つかると思います。 私が作ったGUID を生成するだけのプログラムを使うのも良いでしょう。

GUID を生成したら、次のように ID エントリーの値に設定します。

[Device Name]
Name = TestSynth
ID = {AEE929C6-CAF8-4259-8D83-7F0FEBFCF416}

なお、Device Name セクションに Name と ID が設定されていれば SOL で読み込めます。 ここまでの設定が正しいかどうか試してみたい方は次のパスが示すフォルダに Patch.ini をコピーしてみてください。

C:\Program Files\YAMAHA\Database\TestSynth

SOL の音源設定ダイアログにボイスリスト作成中の音源が追加されている事を確認できると思います (スクリーンショット)。

CategoryName エントリー

CategoryName エントリーは音源の分類を定義します。

トラックインフォメーションセクション(メインのウィンドウの左側)の Generator をクリックした時に現れる音源選択メニューでは Electone、Piano、Synthesizer など大まかな分類がまず表示され、 そのうち一つを選択するとその分類に属する具体的な音源を選択できるようになっています。 CategoryName エントリーは、 このメニューで音源が表示される時にどの分類に入るべきかを定義します (たとえば S-YXG50 は Soft Synthesizer といったように、 標準で入っている音源はすでに分類されています)。 なお、音源の分類は「設定」メニューの「音源」で現れる画面には現れません。

分類名には制限は特に無く、自由な名前を指定できます。 とはいえ、他のものと並べて違和感がある分類名を指定するのはあまり良くないと思います (メーカー名を分類にするなど)。 基本的には既にある分類に入れると良いのでしょう。

TestSynth の CategoryName を Synthesizer にしてみましょう。 Patch.ini の内容は次のようになります。

[Device Name]
Name = TestSynth
ID = {AEE929C6-CAF8-4259-8D83-7F0FEBFCF416}
CategoryName = Synthesizer

これで SOL に読み込ませると TestSynth が Synthesizer に分類されている事を確認できると思います (スクリーンショット)。

IsDrum エントリー

IsDrum エントリーはその Patch.ini が「ドラムモード」用かどうかを指定します。 ドラムモード用であれば IsDrum エントリーの値を 1 に、 でなくば 0 に設定します。

ドラムを使うためにモードを切り替えるような音源では、 MIDI イベントで Bank MSB (以下MSB)、Bank LSB (以下LSB)、Program Change (以下PC) を同じ値に指定してもモードによって違う音色になります (たとえば GM では 出力チャンネルが 10 だと Piano 1 が Standard Kit に)。 INI 形式のボイスリストでは一つの MSB、LSB、PC の組に対して一つの音色名を割り当てできます。 逆に言うと、同じ MSB、LSB、PC でもモードによって音色が違う音源には、そのままでは対応できません。 そこで、こういった音源には Patch.ini を二つ作り、片方を通常用、もう片方をドラムモード用と使い分けます。 こうしてできた二つの Patch.ini を区別するために、 ドラムモード用に作った Patch.ini の IsDrum エントリーを 1 に設定して 通常用と区別できるようになっています。

SelectMode エントリー

SelectMode エントリーは音色選択画面におけるカテゴリと MIDI イベントの命令との対応関係を定義します。

SOL の音色 (Packed Voice) 選択画面にはカテゴリ1、カテゴリ2、カテゴリ3という項目があります。 これらのカテゴリは MIDI イベントの MSB、LSB、PC の3命令と対応しています。 たとえば MU80 の場合、 カテゴリ1は MSB、カテゴリ2は PC、カテゴリ3は LSB と対応します。 ここで「どのカテゴリがどの命令と対応するのか」 を考えると、音源によって望ましい対応関係が違っている事に気が付きます。 この、音源に対する「望ましい対応関係」を定義するのが SelectMode エントリーです。 SelectMode エントリーは SOL のボイスリストを書く上で最大のキモであり、 この指定を間違えると後の作業がすべて無駄になってしまいます。 注意して書いていきましょう。

SelectMode の書き方はいたって簡単で、 カテゴリと命令との対応関係を数字で指定するだけです。 SelectMode の値と、それが表す命令との対応関係を表にまとめて次に示します。

SelectMode の値 カテゴリ1 カテゴリ2 カテゴリ3
0 MSB LSB PC
1 LSB MSB PC
2 LSB PC MSB
3 MSB PC LSB
4 PC MSB LSB
5 PC LSB MSB
6 x MSB PC
7 x PC MSB
8 x LSB PC
9 x PC LSB
10 x x PC

続いて、最適な SelectMode の選び方を考えていきます。 例の TestSynth の音色表が次のようになっていたとしましょう。 なお、表中「MSB」は Data MSB、「LSB」は DataLSB、 「PC」は Program Change から1引いた数を表します。

Normal Voice (MSB:0)
PC\LSB 0 1 ... ... ...
0 GrandPiano GrandPiano Bright GrandPiano Dark GrandPiano + String ...
1 UprightPiano UprightPiano Bright UprightPiano Dark UprightPiano + String ...
2 Elec. Piano Elec. Piano Res. Vintage EP Synth. EP ...
... ... ... ... ... ...
128 Gunshot ... ... ... ...
SFX Voice (MSB:64)
PC\LSB 0 1 ...
0 ... ... ...
Drum Kits (MSB:127)
PC\LSB 0 1 ... ... ...
0 Standard Kit x x x ...
1 Standard Kit Light x x x ...
2 Dry Kit x x x ...
... ... ... ... ... ...

さて、もし SelectMode が最適ならば SOL の音色選択画面で音色が選びやすいはずです。 同画面での選択方法は音色を大きな分類から選び、 やや細かい分類から選び、より細かい分類から選ぶものです。 つまりカテゴリ3はかなり近い音色が並ぶのに対し、 カテゴリ1は近くない音色の分類が並びます。 これらを頭に入れて、最適な SelectMode を考えていきましょう。

まず表から、TestSynth の音色を Normal Voice、SFX Voice、Drum Kits に大分類できる事が分かると思います。 これらの間にある違いはかなり大きく、 Drum Kits の音色のかわりに Normal Voice の音色を使った曲は音楽になりません。 続いて大分類のうち Normal Voice に注目すると、 音色表の行方向(左から右)に同じ種類の楽器が並んでおり、 列方向(上から下)には違う種類の楽器が並んでいる事に気が付きます。 仮に音色の選択を間違えて同じ行の楽器を選んでしまった場合、 初めてその曲を聴く人には分からないかもしれません。 間違えて同じ列の楽器を選んでしまった場合、 ピアノにビブラートがかかるといった妙な状況が起こりえます。 こう考えると列方向の方が音色の違いは大きく、 行方向が一番小さいと言えます。

以上をまとめると一番音色の違いをもたらすのは MSB で、 続いて PC、最後に LSB となります。 したがって、カテゴリ1に MSB、 カテゴリ2に PC、カテゴリ3に LSB を対応させるのが TestSynth にとって最適な SelectMode といえます。 つまり先ほどの表より、TestSynth の最適な SelectMode は 3 と分かります。

こうして調べた SelectMode を設定すると、 TestSynth の Patch.ini ファイルは次のようになります

[Device Name]
Name = TestSynth
ID = {AEE929C6-CAF8-4259-8D83-7F0FEBFCF416}
CategoryName = Synthesizer
IsDrum = 0
SelectMode = 3

カテゴリ1の設定(First Select セクション)

カテゴリ1を設定するセクションは First Select という名前になっています。 First Select セクションはカテゴリ1に現れる項目を定義します。

First Select セクションには次の 3 エントリーに加え、 カテゴリ1のリストに現れる各項目を定義するエントリーが含まれます。

この 3 エントリーについては具体的な項目を追加する方法を説明してから後述します。

カテゴリ1の項目はその音源が持つ音色の大分類を表します。 カテゴリに項目を追加するには 「その項目に対応する命令の値」 をエントリー名とするエントリーを作り、その値に分類名を設定します。 例の TestSynth ではカテゴリ1に Data MSB を割り当てました。 カテゴリ1には Normal Voice、SFX Voice、Drum Kits があり、 それぞれ MSB の値は 0、64、128 です。 したがって、FirstSelect セクションに 0 というエントリーを定義して値を Normal Voice とし、 以下同様に 64 というエントリーに SFX Voice、 128 というエントリーに Drum Kits という値を設定します。 具体的には次のようになります。

[Device Name]
Name = TestSynth
ID = {AEE929C6-CAF8-4259-8D83-7F0FEBFCF416}
CategoryName = Synthesizer
IsDrum = 0
SelectMode = 3

[First Select]
0 = Normal Voice
64 = SFX Voice
128 = Drum Kits

カテゴリ1の項目をすべて追加したら、 最初に触れた FirstEntry、LastEntry、Default の 3 エントリーの設定に移ります。 FirstEntry エントリーは、 このセクションで定義されている各項目に対応する命令の値を比べたときに、 一番小さい値がいくつかなのかを指定します。 TestSynth の場合は Normal Voice を指定した時の MSB 値 0 が一番小さいので、 FirstEntry の値を 0 とします。 LastEntry エントリーは FirstEntry エントリーの逆を指定するもので、 一番大きな命令の値を指定します。 TestSynth の場合は Drum Kits の 128 です。 最後に、Default エントリーを指定しましょう。 Default エントリーには、このカテゴリでもっともよく使うものを指定します。 指定の方法は FirstEntry と同じで、やはり命令の値を指定します。 TestSynth で一番使うのは Normal Voice とすると、 Default エントリーに 0 を指定する事になります。 なお SOL の音色選択画面を表示した時に、 Default に指定した項目が最初から選択されます。

FirstEntry、LastEntry、Default の 3 エントリーを設定した TestSynth 用 Patch.ini は次のようになります。

[Device Name]
Name = TestSynth
ID = {AEE929C6-CAF8-4259-8D83-7F0FEBFCF416}
CategoryName = Synthesizer
IsDrum = 0
SelectMode = 3

[First Select]
Default = 0
FirstSelect = 0
LastSelect = 128
0 = Normal Voice
64 = SFX Voice
128 = Drum Kits

カテゴリ 2 の設定

カテゴリ 2 は、カテゴリ 1 で選択されている項目によって違うものになります。 したがってカテゴリ 2 を設定するセクションはカテゴリ 1 の項目の数だけあります。

カテゴリ 1 のある項目に属するカテゴリ 2 の項目は、 そのカテゴリ 1 の項目と同じ名前のセクションで定義します。 TestSynth の場合、カテゴリ 1 の項目「Normal Voice」 に属するカテゴリ 2 の項目は Normal Voice セクションで定義します。

セクション名が決まったら、カテゴリ 1 と同じように Default、FirstEntry、LastEntry の 3 エントリーと、カテゴリ 2 での項目を同じ形式で定義していきます。

[Device Name]
Name = TestSynth
ID = {AEE929C6-CAF8-4259-8D83-7F0FEBFCF416}
CategoryName = Synthesizer
IsDrum = 0
SelectMode = 3

[First Select]
Default = 0
FirstSelect = 0
LastSelect = 128
0 = Normal Voice
64 = SFX Voice
128 = Drum Kits

[Normal Voice]
Default = 0
FirstEntry = 0
LastEntry = 127
0 = Grand Piano
1 = Upright Piano
2 = Elec. Piano
(省略)
127 = Gunshot

[SFX Voice]
Default = 0
FirstEntry = 0
LastEntry = 20
0 = SFX 01
1 = SFX 02
(省略)
20 = SFX 20

[Drum Kits]
(以下省略)

カテゴリ 3 の設定

カテゴリ 3 の項目も選択されているカテゴリ 2 によって違います。 カテゴリ 2 の時と同様、 カテゴリ 2 の項目と同じ名前のセクションを作ってそこで項目を定義します。 したがって手順はカテゴリ 2 の時と完全に同じです。

カテゴリ 2 の時に First Select(カテゴリ1) の項目から名前を取ってきたのと同じように、 カテゴリ 2 の項目から名前を取ってきてセクション名とし、 Default、FirstEntry、LastEntry を定義、カテゴリ 3 に割り当てた命令の値に対応する音色名を定義します。 カテゴリ 3 まで定義できれば Patch.ini の基本形が完成します。

[Device Name]
Name = TestSynth
ID = {AEE929C6-CAF8-4259-8D83-7F0FEBFCF416}
CategoryName = Synthesizer
IsDrum = 0
SelectMode = 3

[First Select]
Default = 0
FirstSelect = 0
LastSelect = 128
0 = Normal Voice
64 = SFX Voice
128 = Drum Kits

[Normal Voice]
Default = 0
FirstEntry = 0
LastEntry = 127
0 = Grand Piano
1 = Upright Piano
2 = Elec. Piano
(省略)

[SFX Voice]
(省略)

[Drum Kits]
(省略)

[Grand Piano]
Default = 0
FirstEntry = 0
LastEntry = 127
0 = Grand Piano
1 = Grand Piano Bright
2 = Grand Piano Dark
3 = Grand Piano + String
(省略)

[Upright Piano]
Default = 0
FirstEntry = 0
LastEntry = 127
0 = Upright Piano
1 = Upright Piano Bright
2 = Upright Piano Dark
3 = Upright Piano + String
(省略)

ドラムインスト名の設定

ドラムインスト名も Patch.ini で定義します。 しかしドラムインスト名の定義はやや複雑なので別ページで独立して説明したいと思います ドラムインストの定義方法のページを参照してください。

おまけ

Dll 形式でボイスリストが提供されている音源の設定変更・削除の方法を書いておきます。 ini 形式でいう DeviceName セクションに相当する部分は Dll ファイルの中ではなく、レジストリの次のようなキーに記録されています。

HKEY_LOCAL_MACHINE\SOFTWARE\YAMAHA\CustomDB\{xxxx-xxxx-xxxx-xxxx}\音源名

したがってこのキーを編集すれば Dll を編集する事なく一覧から削除したり音源のカテゴリを変更したりできます。 ただ、編集にせよ削除にせよ一度変更したものは元には戻せません (バックアップを取るかメモしておけば話は別ですが)。 編集はともかく削除については非常に危険ですので、 もし一覧からある音源を削除したいのであれば該当音源の Flags という DWORD 値の名前を Flags_ 等 違う名前に変更しましょう。 これだけでリストアップされなくなります。 また、この方法だと何かあって元に戻したい時は Flags_ を Flags に戻すだけで元に戻りますのでより安全です。 なお、レジストリの編集、特に削除は危険です。 何が起きても保証も何もできませんのでご注意下さい(←無責任?(笑))。