Hatena::ブログ(Diary)

悟茶辞苑ッ このページをアンテナに追加 RSSフィード

2006-09-13 水曜日

MidRadio PlayerのMIDI音源をVSTiとして使う

MidRadio 6はともかく、MidRadio 7の音源でデータを作るときは確認が必須。けれどもいちいちMIDIファイルを出力してプレーヤーに演奏させるのは手間がかかりすぎる!「シーケンサでこの音源が使えればいいのに」というあなたの声にお答えします。

手順と解説

実は、MidRadioのAddinsフォルダにあるSGP2.DLL(バージョン7未満ではSGP.DLL)そのものがVSTiの一種なのです。つまりこのファイルをテーブルファイルの組とともに、VSTホストアプリケーションのVstplugins(に相当する)フォルダに放り込めば音源として使えると考えられます。しかし、実際に試してみると、SOLではうまくいくのにSynthEditではうまくいかないといった現象が確認できます。hoshuさんの解析によれば、プラグイン側でホストのベンダを見ているのだとか。YAMAHA以外の文字列なら拒絶するようになっているので、CineStarを返すSynthEditでは使えないということですね。

そういうわけで、SGP2.DLLをVSTiとして用いるには、この判定部分をつぶさなければいけません。非常に簡潔な書き換えなので、SGP2.DLL 1.0.2.22用のパッチファイル(FireFlower互換形式)を以下に示します。ヘキサエディタで編集するのが面倒な方のために、SGP2.DLL 1.0.2.22 Patcher EXEも置いておきます。比較を行っている関数の戻り値を、分岐の書き換えで強制的に定めています。

FILENAME SGP2.DLL
00002AAE: 74 EB

DLLファイルの改変が無事に済んだなら、あとはDLLとテーブルファイルの組をVSTプラグインのフォルダに入れるだけで、どのアプリケーションでもVSTiとして動作させることができます。クールな解析結果をご報告くださったhoshuさんに感謝!

関連

hoshuhoshu 2006/09/15 10:58 SGP(2).DLLを書き換えるのは疑問、と来ましたか。
コールバック関数はopCode==0x20のとき、ホストのベンダ名を返すので、コールバック関数を乗っ取ってベンダ名を偽れば、書き換えずに済みます。
ここでコールバック関数とは、mainの第一引数で与えられる関数ポインタで、AudioEffectX::dispatcherと同じ形式を取ります。

WindowsでMIDI OUTにVSTiを指定する方法は、私の思いつく限りだと、
VSTiをMIDI OUTデバイスと見せかける、winmmの乗っ取りDLLか、ドライバを書く位でしょうか。
制作の手間や安全性を考えると、前者が圧倒的に有利かな?

MidRadio Player7MidRadio Player7 2008/12/26 01:00 キューベースAIでMidRadio Player7のMIDI音源をVSTiとして使いたくてこちらのサイトを検索したのですが、

SGP2.DLLをヘキサエディタで編集して、比較を行っている関数の戻り値を、分岐の書き換え
>FILENAME SGP2.DLL
>00002AAE: 74 EB
とありますが、書き換え方法等全くわかりません。トライしてみましたが書き換え場所がわからず、彷徨っています。どなたかお助け下さい。
使用しやすいヘキサエディタ等も紹介してもらえると助かります。
お願いいたします。

追伸 アップされていますパッチャーはXPでは開かないのですが、XP以前のOSじゃないと開かないのでしょうか?

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/GOCHA/20060913/p1