2020/04/18

VOICEROID2で大量のキャラクターを購入して登録すると頻繁にクラッシュするのでパッチを当てて修正した

概要


VOICEROID2は複数のVOICEROIDライブラリをまとめて管理して簡単に話者を切り替えたり対話形式の読み上げを行うことができますが、沢山ボイロを購入して登録すると頻繁にクラッシュするようになります。
本記事ではこれをパッチを当てることで回避する方法を紹介します。

この方法では実行ファイルを書き換えるので、自己責任でお願いします。また環境はVoiceroid 2.0.5.0、Windows 10 64bitの環境を想定しています。

ボイロが増えるとメモリ使用量が増える


現在私が購入済みのボイロ達です。春のセールの時に調子に乗ってたら増殖しました。でも10万円貰えるならいいよね。

・VOICEROID+ 東北きりたん EX
・VOICEROID2 東北イタコ(感情表現三種)
・VOICEROID2 結月ゆかり(感情表現三種)
・VOICEROID2 紲星あかり
・VOICEROID2 桜乃そら
・VOICEROID2 琴葉 茜・葵(標準語/関西弁:各感情表現三種)
・VOICEROID2 ついなちゃん(標準語/関西弁)


読み上げ開始時に直ぐに発話開始できるように、起動後に各キャラクターのライブラリがVOICEROID2にロードされます。当然キャラクター数が増えるとメモリの使用量も増えます。関西弁対応のデュアルライブラリや感情表現対応のボイロだとメモリ消費も大きいです。
一例ですが、起動直後の状態で約900MBのメモリが使用されています。
PCには64GBのRAMを搭載しているので900MBのメモリ使用自体は大したことはありませんが、VOICEROID2は(今更感のある)32bitアプリです。32bitアプリは基本的に2GBまでのメモリしか使用することができません。

VOICEROID2のエラー・クラッシュの例


この使用メモリが1.1GBを超えたあたりから、ボイロの挙動が怪しくなってきます。
各種エラーやクラッシュがかなり高頻度で発生します。油断してると保存してなかった編集中の内容が失われるので結構困ります。
直球のOutOfMemoryExceptionが発生して落ちます。
音声保存を行う際のダイアログでアイコンが真っ黒になったり表示されなかったりします。別のディレクトリが指定できなかったり、ファイル名の入力ダイアログが表示されず別名で保存できないこともあります。

その他、保存中にエラーダイアログが出て落ちたり、エラーダイアログすら出ずに操作した瞬間に終了して落ちるパターンもあります。

LAA(LargeAddressAware)オプション


通常は32bitアプリが使用できるメモリは2GBまでですが、2GBというのは32bit版Windows由来の制限で、本来はアドレス空間が32bitでも4GBまでは扱えます。

アプリのLAA(LargeAddressAware)オプションを有効にすると、64bit版Windows環境なら32bitアプリでも32bitアドレス空間の4GBまでメモリを使用できるようになります。(本当に4GBまで使用できるかはアプリの作りに依存しますが、まともな実装なら通常は問題ないはずです)

※32bit版Windowsの場合でも、アプリ側でLAAオプションを有効にした上で更にOS側で「3GBスイッチ」を有効にすると3GBまでは使用できるようになりますが、Windows側の使えるメモリが減りますのでOSが不安定になる可能性がありお勧めしません。素直に64bitOSにしましょう。(参考:BLUE PRISONERの詞情:3GBスイッチについて


VOICEROID2にLAA有効化パッチを当てる


VOICEROID2のバイナリを見るとLAAオプションが無効になっており、メモリ使用量が増えると明らかに不安定になります。
VOICEROID2のクラッシュの原因がメモリ不足由来なら、LAAオプションを有効化してメモリ上限が2倍になれば動作が安定する筈です。
VOICEROID2のLAAオプションを無理やり有効化するために、ボイロの実行バイナリを編集してパッチを当てます。

まずはAHSのサイトでボイロ2をユーザー登録し、アップデータをダウンロードして最新版(2.0.5.0)にしておきます。

パッチ当てにはバイナリエディタStirlingを使用します。(このソフト、1999年のソフトですがWindows 10 64bitで正常動作します。Windowsの互換性は凄いです)

適当なフォルダに解凍したStirling.exeを右クリックし、「管理者として実行」します。(Program Files内のデータを弄るので管理者権限が必要です)
Stirlingの左上のフォルダアイコンをクリックして、ファイル選択ダイアログを開き、「C:\Program Files (x86)\AHS\VOICEROID2」内のVoiceroidEditor.exeを開きます。

アドレス0x00000096の「02」を「22」に書き換え、別名で保存します。ファイル名は「VoiceroidEditor_laa.exe」とでもしてください。
右側が書き換え後の状態です
これでパッチ当ての作業は完了です。
エクスプローラーから「C:\Program Files (x86)\AHS\VOICEROID2」を開き、VoiceroidEditor_laa.exeを右クリックして、送る>デスクトップでショートカットをデスクトップにでも作っておきましょう。

LAAオプションの効果を確認する


書き換えたVOICEROID2EDITOR(VoiceroidEditor_laa.exe)を実行して、普通に使用します。特に何か特別な操作をする必要はありません。
編集したバイナリは無理やり改ざんしているのでエーアイが付加している署名が無効になっていますが、通常動作には影響ないようです。念のため新規ボイロの追加などでライセンス認証作業を伴う場合は、編集前のオリジナルのVoiceroidEditor.exeで行ったほうが良いでしょう。
使用メモリ量が1200MBを超えても問題ありません。

半日以上起動しっぱなしにしたり、何度も読み上げやキャラクターの切り替え、WAVファイルの書き出しを行っても、全くクラッシュしなくなりました!成功です!
同じようなクラッシュでお困りの方は(自己責任で)試してみてください。

(でもこれくらい公式アップデートで何とかしてくれ…)


LAAオプションについての参考:チラシの裏からうっすら見える外枠の外のメモ書き:32bitのコンピューターって4GB使えないじゃないすか!やだー!