S.F. Tracker(81)

公開:2005-10-10 07:59
更新:2020-02-15 04:36
カテゴリ:sftracker,windows,audio,tracker

VST Plugin Wrapperの作成を引き続き行う。
VST Pluginをホストするための手続き部分を作成している。
大まかに言うと、

  1. Plugin DLLをLoadLibraryする
  2. GetProcAddressでmain関数のアドレスを得る
  3. call back 関数のアドレスを引数にしてmain()を呼び出す。戻り値にAEffect構造体のポインタが返却される。

    なのだが、3.のところで少し???となってしまった。

    call back関数は、VST pluginのインスタンスそれぞれに対してcallされる。
    しかし、各インスタンスに対してcall backすることはそのままではできない。
    call back側(Plugin側)からホスト側に「このインスタンスに対してですよ」という情報が与えられなければならない。

    通常この類は事前に設定することにより、call back関数の引数にインスタンスへのポインタがセットされていたりするのだけれど、見当たらない。
    vst hostのソースを見るとAffectをコンテナで持って、call backからの呼び出しごとに引数Affect と比較して「どのインスタンスか」を決定している。
    これは非常に効率が悪い。

    これ以外に方法はないかと探っていたらAffect構造体にuserメンバというのがあった。
    ひょっとしてこれがホスト側のインスタンスと結びつけるものかもしれない。

    http://cvs.sourceforge.jp/cgi-bin/viewcvs.cgi/sftracker/SFTracker/