NVDA日本語版は先日「ベータ版」という形で新たに公開されました。
http://accessibility.mitsue.co.jp/archives/000256.html
ベータ版に間に合わなかった音声エンジンの方を私が頑張ってるところです。。
8月末までにNVDAのための音声合成をやると宣言したのですが、とうとう今日で8月も終わりです。
New BSD ライセンスで公開されているエンジン Open-JTalk を Python から ctypes 経由で叩けるようにする作業を進めてきました。
さきほどやっと speak や stop などの基本コマンドが動くようになりました。
いまのところ成果は github の私のレポジトリにあります:
http://github.com/nishimotz/libopenjtalk
この中の lib というサブディレクトリが DLL 関連です。
cygwin gcc-3 の minGW 互換モードで DLL を作っています。
Python は cygwin 版 2.5 と Win32 版 2.6 の両方でチェックしています。
(ただし後述の nvwave.py の制約で cygwin 版 2.5 には非対応になりました)
ただし、技術的な制約で、open-JTalk に組み込まれている mecab (形態素解析エンジン)を使わず、単独で配布されている Win32 版の mecab DLL を組み合わせて使っています。(そのほうがライセンスも管理しやすいはず)
今後の拡張性や保守性を考慮して、オリジナルのエンジンが main 関数でやっている処理を python でほぼ実装しなおしました。
もともと Open-JTalk は HTS_Engine_API の中でオーディオ出力を行っていたようです。しかしスクリーンリーダのためには(音声対話システムであっても)「再生中の音声を自由に止める機能」が必要であるため、HTS_Engine_API 側のオーディオデバイス処理は(configureのオプションで)無効化しました。
ctypes でポインタやダブルポインタを渡す処理を苦労して書きましたが、Python 側にバッファのメモリ管理をやらせるとハマりやすい、ということが分かったので、DLL 側で malloc のラッパー関数を作ってごまかしつつあります。あとでメモリリーク対策が必要になりそうですが。。
NVDA が espeak の中でどのようにオーディオを叩いているかも調べました。(ctypesの参考になりました。。)
http://ja.nishimotz.com/espeak
Windows マルチメディア API で音声出力する部分が nvwave.py という Python のコードでコールバック処理もふくめて実現されています。
驚きでした。
この NVDA 的なやり方を見習って jtalk.py の実装を行いました。ただし DLL から音声波形をコールバックで受け取るのではなく、生成された波形をまとめて nvwave の player に渡しています。
この _espeak.py の実装では、メインスレッドとバックグラウンドスレッドでコマンドキューを共有し、バックグラウンドのスレッドがキューの再生を行っています。さらに stop 命令を受け取ると、キューの中で「時間がかかる処理」だけを削除し、モードの切り替えなどの処理はキャンセルしないで順次実行する、ということになっています。
このような処理は私が「ウチコミくん」で最初に Visual Basic Ver.6 で実装し、そして Galatea Dialog Studio でも実装したものです。
懐かしいような嬉しいような気もします。
そして Python という言語の奥の深さを感じます。
残った仕事は synthDrivers を継承して NVDA 用のドライバークラスを書くことです。
スクリーンリーダーに統合して、安定して動けばいいのですが。。
今回つくった音声合成エンジンでは、かなり多くの部分を Python で実装してあるので、例えば文字列の前処理くらいなら簡単にカスタマイズできそうです。
明日の夜は久しぶりに NVDA 日本語化プロジェクトの開発ミーティングです。
タグ: python
-
NVDAのための音声エンジン
-
NVDA日本語アルファ版
6月30日にスクリーンリーダNVDA日本語化プロジェクトは「日本語アルファ版」をリリースしました。
このバージョンには限定的ながらも日本語IMEの読み上げに対応する機能が実装されました。
この件についてミツエーリンクスさんのブログでも紹介してくださいました。
昨日は開発ミーティングを開催しました。参加者は会場 3人+Skype 1人でしたが Ustream や Twitter で公開して様子をみていただきました。
Twitter発言のまとめはこちらです。
Google Groups に nvda-japanese-users というメーリングリストが開設されています。興味のある方はご参加ください。よろしくお願いします。
(さらに…) -
NVDAの日本語IME対応に向けて
今月もNVDA日本語化プロジェクトのコードレビューに参加しました。
本家のNVDAはものすごいペースで開発が進んでおり、またユーザのメーリングリストでは日々大量のメッセージが流れています。
またNVDAはすでに日本でも、従来の日本製の支援技術でカバーされていなかったアプリケーションを音声化するための手段として、他のスクリーンリーダと併用して使う方が徐々に増えているようです。
また、Web開発の企業でもアクセシビリティ検証用としてお使いになる事例が出てきつつあるそうです。
日本でもNVDAという無償のソフトウェアの普及によって、利用者の方の選択肢が広がり、また英語圏で実現されつつある「アクセシブルなJavaScriptアプリケーション」などへの対応が日本でも進むことを期待しています。
今年1月からのNVDAjpでの活動を振り返ってみたいと思います。
(さらに…)