::日本語とVoiceDial

Centroには、VoiceDialという、アプリが標準でインストールされている。
これは、音声認識により、ダイアルしたり、アプリを起動することが可能な、Palmwareである。

英語環境では、正しく動作するVoiceDialだが、日本語環境に変えると、

1)エラーで、Centroが、再起動してしまう。
2)画面に文字が出なくなってしまう。

の問題がでる。

1)は、特定の条件の場合のみ起きる現象なので、回避できなくも無い。

2)は文字がでなくても、コマンドは、多くないので、覚えられると思うだろうが、そうはいかない。

例えば、「Call John」で、Johnに電話するのだが、Johnのアドレス帳には、自宅、携帯1、携帯2、会社の電話番号が、入っているとすると、それらが、画面に表示され、次の質問で、どこに掛けるか聞かれるのだ。

また、認識率が低かった場合、「John」「Jerry」が、表示されて、「Johnですか?」と聞かれた後の返事の仕方も、画面に表示される。

困って、ミニーさん、という人のBBSに、相談したら、Latin-Font-HackDAというDAを、起動させれば、
問題なく、使える事がわかった。(ミニーさん、ありがとう。)

さらに、Latin-Font-HackDAが、内部で、何をやっているのかも、教えてくれた。

そうなれば、自分で、Latin-Font-HackDAと同様の機能のDAを、作ろうかと思ったのだが、思いとどまった。それは、Latin-Font-HackDAを作った作者さんは、私のCentroを日本語化するJaPonというPalmwareも、作っている。JaPonの動作に、どう影響を与えるか判っている人の作ったものだ。

私の予想では、Latin-Font-HackDAは、一時的に、JaPonをOffにする、

1)日本語フォントの使用停止
2)日本語対応APIの停止
3)ロケ−ル情報の詐称(enUSに戻す)

という一連の処理が行われていると思ったのだが、

実際には、1)のみが、行われている。

VoiceDialの問題は、3)にあるという私の仮説は、あっさりと、崩れた。

2)に関しては、JaPonが、日本語フォント以外の場合、日本語処理を、自動的に無効にするように、組まれているのだろう。(独自フォントを使うPalmwareへの対応)

     *****

さて、この問題への対応方法は、2つ。

1)日本語フォントだと、エラーを起こすVoiceDialを解析して、エラーを、回避させる処置をする。

2)VoiceDial起動時だけ、Latin-Font-HackDAが、有効になるようにする。

1)は、時間と労力が、必要なので、とりあえず2)の対応をとった。

最初に行ったのは、Latin-Font-HackDAの解析。

解析が必要だったのは、

1)Latin-Font-HackDAが、何を行っているか、確認すること。

2)On/Offを、表示するメッセージダイアログの削除。

にある。

「VoiceDial起動時だけ、Latin-Font-HackDAが、有効」にする時に、ユーザーにOKを選択させるダイアログは、不要だからだ。

1)に関しては、スタック置き換え、起動状況の保管と、日本語と英語フォントのスワップ、スタック戻しだけだった。68kコード部分では、StdFntを取得して、FontIDが32以外(英語フォント)だったら、メッセージを出して、抜ける仕組みだ。

2)に関しては、APIをコールする部分を、意味の無い、メモリー操作に置き換えた。

これで、無言のLatin-Font-HackDAが、完成。

ただ、マニュアル操作で、Latin-Font-HackDAをOn/Offしたい場合、無言では、問題があるので、Latin-Font-HackDAを呼び出すラッパーDAを作った。

起動すると、現状を、JPかENで、表示するだけだが、5-Wayの左右で、Latin-Font-HackDAを呼び出し、切り替え可能にする。

最後は、Hackで、VoiceDialの監視と、Latin-Font-HackDAをOn/Offを制御させる。

自作のDAランチャー用Hackアプリがあり、Centroでは、使えない機能が、あったので、その部分を、VoiceDial監視に変更した。

これで、

1)VoiceDialが、起動する時点で、Latin-Font-HackDAがOffなら、Latin-Font-HackDAを起動。

2)他のアプリが、起動する時点で、Latin-Font-HackDAがOnなら、Latin-Font-HackDAを起動。

3)マニュアル操作で、Latin-Font-HackDAがOnの場合は、何もしない。

となった。

何も気にしないで、VoiceDialが、使えるのは、気持ちいいね。

しかし、VoiceDialのためだけの、Hackが、組み込んであるという状況は、気持ちがいいものでは無い。

やはり、VoiceDialの問題は、VoiceDial側で対処するのが良い。

VoiceDialを、解析してみようかと、思っている。

VoiceDialは、ちょっと見たところ、多分、汎用(Windowsや、WindowsCE互換)の、音声認識エンジンそのもので、Palmで、使うための、ラッパー補助ルーチンが、約1割といったところだ。

音声認識エンジンは、ARM実行コードそのものなので、ここにエラーが、あることはないだろう。

最初のPalmOS専用部分に、問題があると、思われる。

後記
**音声認識による、携帯の操作について**

一般的には、携帯に、自分の声を、覚えさせて、認識する方式が多い。また、起動には、マジックワードを、登録する必要がある。

例えば、電話を掛けるマジックワードを「カークより」とすると、「カークより エンタープライズ」と言えば、アドレス・ブックの中の「エンタープライズ」に登録されている番号に、電話を掛けてくれる。

妻の携帯は、ソニエリで、この機能が、ついている。(使っていないが・・・)
Treo650には、標準で、こういった機能がなかったので、羨ましかったものだ。

で、CentroのVoiceDialだが、練習なしで、男の声、女の声、子供の声でも、実によく、認識してくれる。良い音声認識エンジンを、使っているようだ。

ただ、マジック・ワード(VoiceDialでは、コマンドと言う)が、固定で、自由に設定できない。
StarTrek好きの私は、「カークより エンタープライズ」で、家に電話をかけたかったのだが・・

*解析、パッチについて**

実行コードの解析は、25年くらい前には、仕事で、日常的に行っていた。

S/370が対象だった。S/370のアセンブラや、PL/I、PL/Mといった言語で、コーディングしていた頃だ。

エラーが起きた時に、自分の書いたプログラムの実行コードと、メモリーダンプを、追いながら、エラー原因の解析を行っていた。

今回ARM実行コードを、DisAssembleして、解析したのだが、頭から4バイトづつ、全て、ARM命令に置き換えてしまうものだった。

クロス・リファレンスを、作って、ARM命令以外は、数値、キャラ表示してくれるARM用DisAssemblerが、必要だ。誰か紹介して欲しい。