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 Gi...
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 ext...

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

コメント