プリセット地獄からようやく抜け出せたようですよ・・。
今回は視点を変えて、synth1でお世話になってるdaichiさんのシンプルシンセのソースを
解析していくことにした。
vstインストの原型みたいなソースコードなので、一度ビルドが通ると何かと役に立つ。
細かくパッチ関連の所を見てみたら、ウチとは大きく違う部分を発見。
具体的には、getChunk() setChunk()という部分。
まず、VSTの初期化時に、
programsAreChunks(); // 音色データは独自チャンクで保存する
これを宣言して、音色データを独自チャンクで扱うことにして、getChunk() setChunk()
を用意して音色データを渡したり読み込んだりしてみた。
そしたらなんと!CUBASEのセーブ時にパラメータがごちゃごちゃ動いてたのがビタリと
止んで、セーブしたパラメータがロード時にも反映された!
こんなの、最初の神様のソースコードには無かったし、誰も教えてくれないし、挙動が
どうなるのかなんて2chにしか無かったよ!!もう!!
なぜゴチャゴチャとパラメータが動いていたのかを調べてみたら、推測だけど、パッチ
の名前を取得する時にgetProgramNameしか用意してなかった。getProgramNameは
カレントのパッチ名を取得する命令。
そう!パッチリストを作成するために、カレントを一つ一つ動かしてはパッチ名を取得
していたからゴチャゴチャとパラメータが動いていたのだ!しょうもない!!
これはgetProgramNameIndexedという任意のindexのパッチ名を取得できるのを用意
してあげればクリアとなったのでした。
うーん、調べたらなんとかなったけど、こんなのすぐわかんないよ!!
とりあえず、CUBASEではプリセットのパッチを読み込んでエディットしてセーブして、
次ロードした時にちゃんとエディットした状態でリコールされた。パッチのセーブ・ロード
は作らないとダメっぽいけど、しばらくはこれでいいか・・。
0 件のコメント:
コメントを投稿