ちょっと必用に迫られて、標記のツールを作ってみました。
Pythonのスクリプトですからどのくらい需要があるか分かりませんが、一応こちらで公開しています。
これは最近Prologue用に作成した音色をそっくりそのままminilogue xd用に使いたくて作成しました。
先日書いたαJunoエミュレーションのオシレータをリリースする際に、いくつかサンプルで音色データを付けようと思っており、Prologue上で音色を作成しています。
minilogue xdでも、サンプルの音色パッチを以前作成していたのですが、Prologueとの間に音色データの互換性がないので、最初から作り直しです。しかし手作業では、なかなか同じ音にはなりません。手間を節約するために変換ツールを探したのですが、どうやら無料のものは無さそうです。
そこで自分で作ることにしたのですが、どうせ作るならユーザオシレータを使った音色に限らず、任意の音色データを変換できるツールを作ることにたというわけです。
実は、KORGが提供しているPrologue/minilogue xdのライブラリアンソフトで用いられている音色データのファイル形式は、それほど複雑ではありません。
音色データファイルは、オシレータユニット等のファイル形式と同様に、拡張子をzipに変えれば開くことができます。メタデータが書かれたXMLファイル2つとデータ本体を収めたバイナリファイル1つがアーカイブされています。
このバイナリファイルは、MIDIシステムエクスクルーシブメッセージで送受信される音色データそのものです。(ただしSysExの先頭が0xF0、末尾0xF7は含まれません。)SysExデータの内部構造はKORGのサイトでMIDIインプリメンテーション情報が公開されているので、それを参照すれば解析可能です。
誰か他に作った人がいないか、探してみたところ以下のようなものが見つかりました。
KORG minilogue xd PROG file parser and pretty printer
minilogue xdのほうがユーザが多いのか、ツールがいろいろ作られているようです。
上記minilogue-xd-utilの中にはユーザオシレータやユーザFXのスロット番号だけを書き換えるツールもあります。なんでそんな単機能のツールがあるかというと、音色パッチにはユーザオシレータ特有の問題があるためです。様々なオシレータを販売しているsinevibesは、書き換えスクリプトをオシレータに同梱しています。
ユーザオシレータは16個あるスロットのどこかに書き込むのですが、音色データが参照するのはオシレータの名前ではなく、スロットの番号になっています。そのため、スロットを変更すると音色データは使えなくなってしまいます。
それなら音色エディットモードでスロットを切り替えれば解決・・・のはずなのですが、実はPrologueやminilogue xd上で音色のエディット中にオシレータのスロットを切り替えると、オシレータのパラメータがリセットされてしまうようです。
これは音色データを人に渡そうとするとき問題になります。使用するオシレータが同じスロットに入っていないと、音色データが使えないからです。
開発者のエティエンさんは、これを解決しようとするとベンダやプラグインのID管理をする必要があり、大掛かりな仕組みになるので断念した・・・と話しています。
閑話休題。
音色データの変換の話に戻りますが、Prologueとminilogue xdとの変換に対応する無料の音色コンバートツールは、残念ながら見つかりませんでした。ただし商用のPrologue用音色エディタでは、音色データをminilogue xd用にエクスポートできるものがあるようです。
自前でPrologueとminilogue xdの音色変換を実装するのは、手間はかかりますが、やること自体はあまり難しくありません。
PrologueのMIDIシステムエクスクルーシブメッセージをminilogue xdのそれに置き換えればいいわけです。
Prologueの音色データのデータ構造は、前回紹介したMIDIインプリメンテーションの「TABLE 3 : PROGRAM PARAMETER」に記載されています。minilogue xdはMIDIインプリメンテーションの「TABLE 2 : PROGRAM PARAMETER」です。
音色をPrologueとminilogue-xdで変換するには、バイト列の対応する部分のデータを一方からもう一方へコピーします。基本的には同一系列の音源なので、コピーする際の先頭オフセットが合っていれば大体大丈夫です。ただ、データの並び順は、残念ながらかなり違っていますので、上記のテーブルを1つ1つ確認する必要があります。
それを地道に行った結果が今回のツールです。配列の一方から他方へ、延々とデータをコピーするだけのものです。使い方は、
python3 prlg2mnlgxd.py [--osc N] filename.prlgprog
という形になります。変換結果は入力ファイルと同じディレクトリにfilename.mnlgxdprogというファイル名で出力されます。–oscオプションは、ユーザオシレータのスロット番号を指定できます。
このツールで、Prologueの全ファクトリープリセットをminilogue xd用に変換して、同じ音が出るかどうか鳴らしてみました。
アナログVCOやアナログフィルタは、聞き比べた限りではほぼ同一っぽいです。
一方で、Prologueとminilogue xdは仕様上異なる部分がある(前回の記事参照)ので、そこはどのように変換するか、若干工夫が必要です。といっても、警告メッセージを出して済ませるしかない場合がほとんどですが。
音色的には、EGの差異の影響が大きいです。minilogue xdのEGはSustainが無いので、ブラス、ストリングスなど持続系の音でキーを押している間カットオフを一定に保とうとすると辛いです。
あとPrologueのファクトリープリセットでは、MONOモードでのVoice mode depthがBASS系音色で多用されていますが、これはminilogue xdへ変換できないので、薄い音になってしまいます。Chordモードの中にオクターブ奏法をつけてくれれば良かったかなと思います。
なお、ツールの開発中に、prologueやminilogue XDのMIDIインプリメンテーションチャートにいくつか誤りがあることを発見したので、以下にまとめておきます。(いずれもRevision 1.01)
◆minilogue XD
・note P2のARPパターンの数値
少なくともRANDOM1は781~ではなく788~で、少し値が違っている
・note P2のCHORD一覧
MONOが入っていない。実際は0~60くらい?はMONOが入っているので、この一覧の数値は全体的にズレている
・note P3
誤:2 : UNISON 3 : POLY
正:3 : UNISON 4 : POLY
◆prologue
・Mod Wheel Assignの値は2~32とあるのにnote P23は0~31になっている。
・Cross Mod depthの行、+26と+27の間に罫線が入っている。(正しくは+27と+28の間)
・VCO等のオクターブ指定
誤:0~3=2′,4′,8′,16′
正:0~3=16′,8′,4′,2′
・PITCH EG TARGET
誤:0~2=VCO1,+,VCO2
正:0~2=VCO2, VCO1+VCO2, ALL
コメント