.NET 版としてリニューアル開発中の次期唄詠だが、依然として苦戦している。
2 週間前よりは状況は改善し、棒読みちゃん・SofTalk・TextToWav の 3 つで動作するようになったが(棒読みちゃんのチャンネルエラーは出るが)、ゆっくり MovieMaker で相変わらず動かない。
動く 3 つのテキストスピーチソフトは、内部的に(おそらく)SAPI を使用している。しかし、ゆっくり MovieMaker は、内部的に SAPI ではなく .NET の SpeechSynthesizer を使用している。
SpeechSynthesizer は SAPI 互換のはずなのだが、なぜ動かないのか。massao さんの多大なるご支援をいただきながら、現在調査中。
.NET の内部を深掘りする必要があり、まずは、そのための Visual Studio の使い方を整理。
[ツール→オプション]メニューの中の、デバッグ→全般にて、「.NET Framework ソースのステッピングを有効にする」にチェックを入れる。
COM サーバー(新唄詠エンジン)のコンストラクタ中でブレークさせた場合、デフォルトだと呼びだし履歴が表示されないが、これにより、呼びだし履歴(コールスタック)を見ることができるようになる。
.NET Framework の中も、逆アセンブル状態ではあるが、一応実行を追えるようになる。ただ、うちの環境だと、なぜかステップ実行ができず、1 行 1 行ブレークポイントをはって実行する必要が……。
関数の戻り値は EAX レジスタに格納される。呼びだし先関数(値を返す方)でも、呼びだし元関数(値を受け取る方)でも、どちらでも EAX を見れば良い。
2 週間前よりは状況は改善し、棒読みちゃん・SofTalk・TextToWav の 3 つで動作するようになったが(棒読みちゃんのチャンネルエラーは出るが)、ゆっくり MovieMaker で相変わらず動かない。
動く 3 つのテキストスピーチソフトは、内部的に(おそらく)SAPI を使用している。しかし、ゆっくり MovieMaker は、内部的に SAPI ではなく .NET の SpeechSynthesizer を使用している。
SpeechSynthesizer は SAPI 互換のはずなのだが、なぜ動かないのか。massao さんの多大なるご支援をいただきながら、現在調査中。
.NET の内部を深掘りする必要があり、まずは、そのための Visual Studio の使い方を整理。
.NET Framework の中へステップイン
[VS2010]デバッグ時に.Net Frameworkのソースコードへステップインさせ、アセンブラのコードを表示させるのブログを参照して、Visual Studio 2013 のオプションを設定する。[ツール→オプション]メニューの中の、デバッグ→全般にて、「.NET Framework ソースのステッピングを有効にする」にチェックを入れる。
COM サーバー(新唄詠エンジン)のコンストラクタ中でブレークさせた場合、デフォルトだと呼びだし履歴が表示されないが、これにより、呼びだし履歴(コールスタック)を見ることができるようになる。
.NET Framework の中も、逆アセンブル状態ではあるが、一応実行を追えるようになる。ただ、うちの環境だと、なぜかステップ実行ができず、1 行 1 行ブレークポイントをはって実行する必要が……。
関数へのステップイン
逆に、テストアプリ側からデバッグを進めたい場合は、.NET の関数を呼んでいる場所で、Shift + Alt + F11。なぜかうちの環境だとメニューに無いが、「関数へのステップイン」。ステップインできる関数の一覧が表示され、クリックすると、.NET Framework の関数であってもその中に入り込んでいける。逆アセンブル状態でのデバッグ
[デバッグ→ウィンドウ→レジスタ](Ctrl+Alt+G)でレジスタの内容を閲覧できる。関数の戻り値は EAX レジスタに格納される。呼びだし先関数(値を返す方)でも、呼びだし元関数(値を受け取る方)でも、どちらでも EAX を見れば良い。