2011年7月2日土曜日

FSX日本語版でEditVoicePackXを使う方法。

EditVoicePackXを起動すると”入力文字列の形式が正しくありません"というエラーメッセージを出して終了してしまう現象の対応策。
  • 分かりやすくはないので初心者向けに噛み砕いてどなたか説明をブログ等でしていただくのはもちろん構いません。
  • バイナリパッチは作ったんだけど、bloggerはファイル添付できないので誰か作って配布したもらってもOK。
  • 完璧な動作確認、というわけではないので自己責任でお願いします。
  • USEnglishBig.gvpのバックアップをちゃんととっておいてください。いうまでもなく。

原因
   ファイルUSEnglishBig.gvp (Microsoft Flight Simulator X\Sound\ATC)の中の
パイロットの声を示す文字列中のパイロットNo.の数字が全角になっているため。

※EditVoicepackXはこの数字が半角であることを期待して動いているようだ。
※それ以外は日本語でも全然構わない。たったこんだけ。嘘みたい。

対策
   該当箇所を半角数字になおす。

方法1) バイナリエディタで書き換える。(速い)
   自分はstirlingを使用。"設定"の"キャラクタセット"でUnicodeに設定すれば分かりやすい。
   3を3に変更するときは"13 FF"を"33 00"にする。

   スクリーンショットを下記に掲載。左側が書き換え後、右側がオリジナル。赤い箇所が該当箇所。



方法2) デコンパイル&コンパイルする。(正統?だが遅い)
a) GVPファイルデコンパイラ GVPDecoでUSEnglishBig.gvpをデコンパイルする。
  解凍したフォルダの"DecompileGVP.exe"を実行。

  fsxのUSEnglishBig.gvpを選択(コピーしたやつを使うほうがいいかもしれない)

  その後、xmlファイル続いてtxtファイルの名前を指定。
→これは新たに作られるファイルの名前なのでお好きに。

  指定が終わるとするとデコンパイルが始まる。 ※結構時間がかかる。

  ※xmlファイルと同じ階層に800MB程度の大きさのパイロット音声ファイルが
   できあがるので注意。デフォルトだとPilotA~PilotJの10個のフォルダができる。
  ※xml,txtファイル音声ファイルの位置関係は変えないこと。d)でエラーになる

b) 上記でできたxmlファイルの中味を書き換える。日本語はつかっちゃだめ。
   例) パイロット 3 (男性):日本人 → Pilot 3 (Male):Japanese

   ※この方法の難点、っちゃー難点なのかもしれない。

c) そのxmlファイルの中で指定されているoutputフォルダを作っておく。
デフォルトではxmlファイルがある階層に"output"という名前で作る。

   ※これがないとd)で長い時間のコンパイルの果てに失敗する。
   ※outputのフォルダ名や場所が気に入らない人はxmlファイルを書き換えてもいい
→と思う。試してない

d) GVPファイルコンパイラ ATCVoice Pack SDKでコンパイル。
インストール後、Program Filesの下のFS2004SDK\ATC_Voicepack_SDK\VPEdit.exe をつかう。
   ※64bitの人はProgam Filex(x86)で。

   メニューのNewを選んで、b)で書き換えたxmlファイルを指定。

   ※Parse Errorが出るときは日本語が混じっているので再度チェックを。
   全角スペースが混じってないかとか)

   Languageは"USEnglishBig"を選ぶこと。

   で、"Go"ボタン
   うまくいってるときは、
   Parsing phrases for "Pilot 3 (Male):Japanese"
   みたいなメッセージが出てコンパイルが進む。

   結構時間がかかる。

e) 完了したら、上記outputフォルダに "USEnglishBig.gvp"が出来上がる。
   で、fsxのフォルダに入れてやる。

   ※くどいが”バックアップはとること”

動作確認
   Editvoicepack Xが立ち上がってそれらしいデータを読んでいること。
   fsxで有名所の空港に行って、ATISが受信できること。

   Have a Nice Flight!


発見の経緯

自分のメモ&ひょっとしたら参考になるかもしれないので記す。

なんとなくgvpファイルがどんなモノかを調べていた。
するとこのやりとりから下記のツールがあることがわかった。

a) GVPファイルデコンパイラ GVPDeco
http://mormegil.wz.cz/flying/gvpdeco/gvpdeco_en.htm
b) GVPファイルコンパイラ ATCVoice Pack SDK
http://www.fsdeveloper.com/forum/downloads.php?do=file&id=27

試しにa)でデコンパイルした→成功。
日本語を含むファイルが生成された。xmlで各パイロットに対応するフォルダ(wavファイル郡)を
定義しているらしい。

それをb)でコンパイルした→失敗
xmlを読み込んでみる。
どうやら、パイロットの声を定義しているファイルに日本語がある行でエラーを出しているらしい。

なので、xmlの中の全角を半角文字に変更してやってみた。
例) パイロット 3 (男性):日本人 → Pilot 3 (Male):Japanese

どうやらコンパイルが進み始めた。
→コンパイルにはひどく時間がかかるのでイライラしながら他のことをやりはじめた。

なんとなく再度EditVoicepackXのエラーメッセージを見てみた。

入力文字列の形式が正しくありません。
   場所 System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   場所 System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
   場所 Bevelstone.EditVoicepack.DataModel.Gvp.GvpVoiceNameCollection.VoiceNumberFromName(String name) 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\DataModel\Gvp\GvpVoiceNameCollection.cs:行 34
   場所 Bevelstone.EditVoicepack.DataModel.Gvp.GvpHandler.ReadData() 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\DataModel\Gvp\GvpHandler.cs:行 145
   場所 Bevelstone.EditVoicepack.Client.MainForm.LoadData(AboutWindow aboutWindow) 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\Client\MainForm.xaml.cs:行 226
   場所 Bevelstone.EditVoicepack.Client.MainForm.<>c__DisplayClass3.<OnLoaded>b__1(Object syncContext) 場所 D:\Documents\Bevelstone\Flight Simulator\EditVoicepack\Client\MainForm.xaml.cs:行 160


StringToNumberでエラーを吐いている。ということは文字列の中の数字をとりだそうとして
失敗している…。
一度GVPDecoがエラーをパイロットのNo.を示す番号が全角になっていたような・・・。
半角に変えてみよう!(stiringでしこしこ書き換え)

わくわくしながらEdivVoicepackXを起動。
あ!ちゃんと起動した!! やっはー。

ほどなくgvpファイルコンパイルが正常終了。これでも使えた。
すげぇー時間がかかるので書き換えのほうが正解かと。

日本人の音声をメニューから消したい、とかじゃなければ。

0 件のコメント:

コメントを投稿