2015年10月14日水曜日

Windows:vstgui:プリセット地獄3(完結編)

プリセット地獄からようやく抜け出せたようですよ・・。

今回は視点を変えて、synth1でお世話になってるdaichiさんのシンプルシンセのソースを
解析していくことにした。

vstインストの原型みたいなソースコードなので、一度ビルドが通ると何かと役に立つ。

細かくパッチ関連の所を見てみたら、ウチとは大きく違う部分を発見。

具体的には、getChunk() setChunk()という部分。

まず、VSTの初期化時に、

programsAreChunks(); // 音色データは独自チャンクで保存する

これを宣言して、音色データを独自チャンクで扱うことにして、getChunk() setChunk()
を用意して音色データを渡したり読み込んだりしてみた。

そしたらなんと!CUBASEのセーブ時にパラメータがごちゃごちゃ動いてたのがビタリと
止んで、セーブしたパラメータがロード時にも反映された!

こんなの、最初の神様のソースコードには無かったし、誰も教えてくれないし、挙動が
どうなるのかなんて2chにしか無かったよ!!もう!!


なぜゴチャゴチャとパラメータが動いていたのかを調べてみたら、推測だけど、パッチ
の名前を取得する時にgetProgramNameしか用意してなかった。getProgramNameは
カレントのパッチ名を取得する命令。

そう!パッチリストを作成するために、カレントを一つ一つ動かしてはパッチ名を取得
していたからゴチャゴチャとパラメータが動いていたのだ!しょうもない!!

これはgetProgramNameIndexedという任意のindexのパッチ名を取得できるのを用意
してあげればクリアとなったのでした。


うーん、調べたらなんとかなったけど、こんなのすぐわかんないよ!!


とりあえず、CUBASEではプリセットのパッチを読み込んでエディットしてセーブして、
次ロードした時にちゃんとエディットした状態でリコールされた。パッチのセーブ・ロード
は作らないとダメっぽいけど、しばらくはこれでいいか・・。

0 件のコメント:

コメントを投稿