「VOCALOID1のSynthesize Engine 1.0と1.1の同時起動」の編集履歴(バックアップ)一覧はこちら
「VOCALOID1のSynthesize Engine 1.0と1.1の同時起動」(2010/03/03 (水) 13:32:31) の最新版変更点
追加された行は緑色になります。
削除された行は赤色になります。
*事前に知っておくべき事柄
+VOCALOID1 VSTi DLLの本体(vocaloid.dll)は,VOCALOID Editorのインストールディレクトリにある設定ファイル「VOCALOID.ini」の,[Synthesis]セクションのDSEVersionの項目を読み取って,Synthesize Engineを切り替える.DSEVersion=100なら1.0, DSEVersion=101なら1.1.
+vocaloid.dllがVOCALOID.iniを読みにいくのは,dllのエントリーポイントであるDllMainが最初に呼ばれたときだけである(推測).
+同一プロセスから2回目以降に[[LoadLibraryEx(WinAPI関数)>>http://msdn.microsoft.com/ja-jp/library/cc429243.aspx]]でvocaloid.dllを読み込んだ場合,DllMainは呼ばれない.
+VOCALOID.iniは,[[UAC(ユーザーアクセス制御)>>http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E5%88%B6%E5%BE%A1]]がデフォルトの設定のとき,書き込み制限がかかる.
*Cadenciiの動作詳細
2種類のSynthesize Engineを読み込ませる場合における,Cadenciiの動作の詳細を時系列順に説明します.
+vocaloid.dllをLoadLibraryExを用い読み込む.ここでは,VOCALOID.iniに記述されたデフォルトのSynthesize Engineで読み込まれる.
+VOCALOID.iniを,一時ディレクトリにコピーし,バックアップを取る.
+VOCALOID.iniのDSEVersionの項目を,デフォルトと違う値に書き換える.(DSEVersion=100 -> 101, DSEVersion=101 -> 100)
+vocaloid.dllを,[[Kenji Aiko氏によるDLL読み込み方法>>http://ruffnex.oc.to/kenji/text/load_dll/]]で読み込む.この方法で読み込むと,vocaloid.dllのディレクトリは同じであるにもかかわらず,別のdllとして読み込まれるため,エントリーポイントDllMainが実行される.
+バックアップしておいたVOCALOID.iniを,元の位置に戻す.
*まとめと備考
-vocaloid.dllを通常の手法で単純に2回読み込むのではなく,別々のDLLとして読み込む.すると,2回の読み込みでそれぞれ1回ずつDllMainが実行されるので,違うDSEVersionで起動することができる.
-VOCALOID.iniを操作する必要があるので,UACを無効にしておく必要がある.
-Windows 7の場合,LoadLibraryExを介さずにDLL読み込んで実行しようとすると,[[データ実行防止(DEP)機能>>http://ja.wikipedia.org/wiki/NX%E3%83%93%E3%83%83%E3%83%88#Windows]]により,UAC無効の場合であってもメモリアクセス違反が発生する.これを回避するために,Cadenciiの本体であるCadencii.exeに,「アセンブリがDEPに対応していない」ことを表すフラグを立てる必要がある.具体的には,Microsoft Visual Studioのツールセットに入っている「[[editbin.exe>>http://msdn.microsoft.com/ja-jp/library/xd3shwhf%28VS.80%29.aspx]]」を使って,次のコマンドを実行する.
editbin /NXCOMPAT:NO Cadencii.exe
----
*事前に知っておくと良い事柄
+VOCALOID1 VSTi DLLの本体(vocaloid.dll)は,VOCALOID Editorのインストールディレクトリにある設定ファイル「VOCALOID.ini」の,[Synthesis]セクションのDSEVersionの項目を読み取って,Synthesize Engineを切り替える.DSEVersion=100なら1.0, DSEVersion=101なら1.1.
+vocaloid.dllがVOCALOID.iniを読みにいくのは,dllのエントリーポイントであるDllMainが最初に呼ばれたときだけである(推測).
+同一プロセスから2回目以降に[[LoadLibraryEx(WinAPI関数)>>http://msdn.microsoft.com/ja-jp/library/cc429243.aspx]]でvocaloid.dllを読み込んだ場合,DllMainは呼ばれない.
+VOCALOID.iniは,[[UAC(ユーザーアカウント制御)>>http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%A2%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88%E5%88%B6%E5%BE%A1]]がデフォルトの設定のとき,書き込み制限がかかる.
*Cadenciiの動作詳細
2種類のSynthesize Engineを読み込ませる場合における,Cadenciiの動作の詳細を時系列順に説明します.
+vocaloid.dllをLoadLibraryExを用い読み込む.ここでは,VOCALOID.iniに記述されたデフォルトのSynthesize Engineで読み込まれる.
+VOCALOID.iniを,一時ディレクトリにコピーし,バックアップを取る.
+VOCALOID.iniのDSEVersionの項目を,デフォルトと違う値に書き換える.(DSEVersion=100 -> 101, DSEVersion=101 -> 100)
+vocaloid.dllを,[[Kenji Aiko氏によるDLL読み込み方法>>http://ruffnex.oc.to/kenji/text/load_dll/]]で読み込む.この方法で読み込むと,vocaloid.dllのディレクトリは同じであるにもかかわらず,別のdllとして読み込まれるため,エントリーポイントDllMainが実行される.
+バックアップしておいたVOCALOID.iniを,元の位置に戻す.
*まとめと備考
-vocaloid.dllを通常の手法で単純に2回読み込むのではなく,別々のDLLとして読み込む.すると,2回の読み込みでそれぞれ1回ずつDllMainが実行されるので,違うDSEVersionで起動することができる.
-VOCALOID.iniを操作する必要があるので,UACを無効にしておく必要がある.
-Windows 7の場合,LoadLibraryExを介さずにDLL読み込んで実行しようとすると,[[データ実行防止(DEP)機能>>http://ja.wikipedia.org/wiki/NX%E3%83%93%E3%83%83%E3%83%88#Windows]]により,UAC無効の場合であってもメモリアクセス違反が発生する.これを回避するために,Cadenciiの本体であるCadencii.exeに,「アセンブリがDEPに対応していない」ことを表すフラグを立てる必要がある.具体的には,Microsoft Visual Studioのツールセットに入っている「[[editbin.exe>>http://msdn.microsoft.com/ja-jp/library/xd3shwhf%28VS.80%29.aspx]]」を使って,次のコマンドを実行する.
editbin /NXCOMPAT:NO Cadencii.exe
----
表示オプション
横に並べて表示:
変化行の前後のみ表示: