KORG Prologue用のパッチをminilogue xd用に変換する

ちょっと必用に迫られて、標記のツールを作ってみました。
Pythonのスクリプトですからどのくらい需要があるか分かりませんが、一応こちらで公開しています。

GitHub - boochow/prologue_tools
Contribute to boochow/prologue_tools development by creating an account on GitHub.

これは最近Prologue用に作成した音色をそっくりそのままminilogue xd用に使いたくて作成しました。

先日書いたαJunoエミュレーションのオシレータをリリースする際に、いくつかサンプルで音色データを付けようと思っており、Prologue上で音色を作成しています。

minilogue xdでも、サンプルの音色パッチを以前作成していたのですが、Prologueとの間に音色データの互換性がないので、最初から作り直しです。しかし手作業では、なかなか同じ音にはなりません。手間を節約するために変換ツールを探したのですが、どうやら無料のものは無さそうです。

そこで自分で作ることにしたのですが、どうせ作るならユーザオシレータを使った音色に限らず、任意の音色データを変換できるツールを作ることにたというわけです。

実は、KORGが提供しているPrologue/minilogue xdのライブラリアンソフトで用いられている音色データのファイル形式は、それほど複雑ではありません。

音色データファイルは、オシレータユニット等のファイル形式と同様に、拡張子をzipに変えれば開くことができます。メタデータが書かれたXMLファイル2つとデータ本体を収めたバイナリファイル1つがアーカイブされています。

このバイナリファイルは、MIDIシステムエクスクルーシブメッセージで送受信される音色データそのものです。(ただしSysExの先頭が0xF0、末尾0xF7は含まれません。)SysExデータの内部構造はKORGのサイトでMIDIインプリメンテーション情報が公開されているので、それを参照すれば解析可能です。

誰か他に作った人がいないか、探してみたところ以下のようなものが見つかりました。

GitHub - gazzar/loguetools: Korg minilogue family patch manipulation tools
Korg minilogue family patch manipulation tools. Contribute to gazzar/loguetools development by creating an account on GitHub.
GitHub - isnotinvain/minilogue-xd-util: Some utils for logue-sdk
Some utils for logue-sdk. Contribute to isnotinvain/minilogue-xd-util development by creating an account on GitHub.

KORG minilogue xd PROG file parser and pretty printer

minilogue xdのほうがユーザが多いのか、ツールがいろいろ作られているようです。

上記minilogue-xd-utilの中にはユーザオシレータやユーザFXのスロット番号だけを書き換えるツールもあります。なんでそんな単機能のツールがあるかというと、音色パッチにはユーザオシレータ特有の問題があるためです。様々なオシレータを販売しているsinevibesは、書き換えスクリプトをオシレータに同梱しています。

Preset Converter For Korg Synths
Re-arrange prologue and minilogue user oscillator slots while keeping preset data compatibility

ユーザオシレータは16個あるスロットのどこかに書き込むのですが、音色データが参照するのはオシレータの名前ではなく、スロットの番号になっています。そのため、スロットを変更すると音色データは使えなくなってしまいます。

それなら音色エディットモードでスロットを切り替えれば解決・・・のはずなのですが、実はPrologueやminilogue xd上で音色のエディット中にオシレータのスロットを切り替えると、オシレータのパラメータがリセットされてしまうようです。

これは音色データを人に渡そうとするとき問題になります。使用するオシレータが同じスロットに入っていないと、音色データが使えないからです。

開発者のエティエンさんは、これを解決しようとするとベンダやプラグインのID管理をする必要があり、大掛かりな仕組みになるので断念した・・・と話しています。

閑話休題。

音色データの変換の話に戻りますが、Prologueとminilogue xdとの変換に対応する無料の音色コンバートツールは、残念ながら見つかりませんでした。ただし商用のPrologue用音色エディタでは、音色データをminilogue xd用にエクスポートできるものがあるようです。

Korg Prologue editor and librarian | Sunny Synths
An editor and librarian for your Korg Prologue synthesizer with the same look and feel as the actual synth with some extras (envelopes graphs, programs, timbres...

自前で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

コメント