カテゴリー
barrierfree nvda python speech twitter ustream

NVDA #pyconjp スライド

PyCon mini JPNVDA 日本語化プロジェクトの話をしました。運営に関わられた皆様、発表の機会を与えてくださった皆様、プロジェクトを支えてくださる皆様に感謝します。そして今回もまた @hoozukiyama さんにスライド作成から発表まで、何度も助けていただきました。

自分の発表の間はタイムラインを見ていませんでしたが、Togetterなどを見た限りでは、スクリーンリーダを支える技術、アクセシビリティと関わりのある技術について知っていただけたようです。
Ustream配信の録画がありました。2:15あたりから私の話です。

スライドは下記です。「おまえ誰よ?」を作りそびれたのが残念です(笑)

なお、テキストだけのスライドなので、中身を下記に転載します。
こういうことをすると Sphinx でプレゼンテーションとかやってみたくなりますね。。
自己紹介で喋った昔の話は、いずれ改めてブログ記事にしたいと思います。

カテゴリー
bazaar nvda python speech

NVDAjp 2010.2に向けて

NVDAjp 2010.2に向けて開発メンバーは作業を進めています。
ここでは私の作業状況を簡単にお知らせします。
2010.2 ベースの JTalk の話速を速くする実装の目処は立っており、 bazaar のレポジトリ
lp:~nishimotz/nvdajp/with_jtalk
rev.3531 として launchpad.net に置いてあります。

ただし、このレポジトリには zjtalk.py と jtalk.py の2つのエンジンがあり、(内部の実装はどちらも _jtalk.py です)zjtalk のほうは音声設定で話速のスライダーが出てきます。

jtalk.py のほうは話速設定がうまくできません。話速設定のために supportedSettings をいじると espeak が起動時エラーで落ちます。
なぜ espeak に影響が及ぶのかいまだに不明なのですが、zjtalk.py にリネームしたら解決したので、クラスを読み込んで初期化する順序に依存する問題と思われます。この現象は silence.py で試しても同じでした。

それから NVDAjp そのものではないのですが、10月の開発ミーティングの後の交流会の議論を踏まえて
「読み上げの改良のための情報を集めるサイト」
を試作しました。
Python でなく Ruby on Rails で作ってますが(笑)
こちらについても時間ができたら改良に取り組みたいので、御意見を伺えれば幸いです。

追記(11月15日)
10月30日に 2010.2j がリリースされています。
話速設定については将来のバージョンで追加される予定です。

カテゴリー
galatea nvda python speech

NVDAのための音声エンジン

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 日本語化プロジェクトの開発ミーティングです。

カテゴリー
nvda python speech twitter ustream

NVDA日本語アルファ版

6月30日にスクリーンリーダNVDA日本語化プロジェクトは「日本語アルファ版」をリリースしました。
このバージョンには限定的ながらも日本語IMEの読み上げに対応する機能が実装されました。
この件についてミツエーリンクスさんのブログでも紹介してくださいました。

昨日は開発ミーティングを開催しました。参加者は会場 3人+Skype 1人でしたが Ustream や Twitter で公開して様子をみていただきました。
Twitter発言のまとめはこちらです。

Google Groups に nvda-japanese-users というメーリングリストが開設されています。興味のある方はご参加ください。よろしくお願いします。

カテゴリー
nvda python

NVDAの日本語IME対応に向けて

今月もNVDA日本語化プロジェクトのコードレビューに参加しました。

本家のNVDAはものすごいペースで開発が進んでおり、またユーザのメーリングリストでは日々大量のメッセージが流れています。

またNVDAはすでに日本でも、従来の日本製の支援技術でカバーされていなかったアプリケーションを音声化するための手段として、他のスクリーンリーダと併用して使う方が徐々に増えているようです。
また、Web開発の企業でもアクセシビリティ検証用としてお使いになる事例が出てきつつあるそうです。
日本でもNVDAという無償のソフトウェアの普及によって、利用者の方の選択肢が広がり、また英語圏で実現されつつある「アクセシブルなJavaScriptアプリケーション」などへの対応が日本でも進むことを期待しています。

今年1月からのNVDAjpでの活動を振り返ってみたいと思います。

カテゴリー
galatea python

Galatea Toolkit 近況

ヒューマンインタフェース学会誌2010年5月号の掲載に向けて、京都工芸繊維大学の荒木雅弘先生と共著で「音声対話システムの開発方法論とプラットフォーム」という記事を執筆しています。
誌面の都合もあり Galatea Dialog Studio(Linux版)の簡単な紹介(すでに sourceforge の wiki に書いた内容の短縮版)のみを、具体的なツールの説明として挙げています。

これから1ヶ月くらいの間に、sourceforge で公開しているソフトウェアや情報について、未着手の作業に取り組む予定です。皆様から御提案や御助言いただけることがあればお知らせください。

それから、私個人の情報発信としては、Windows 環境で GalateaTalkJulius のソケットインタフェースをPython からアクセスするラッパーを書き始めています。

現在の Galatea Dialog Studio はいろいろな機能を Java で作り込んだものの、全体構造の見通しが悪く、メンテナンス性に問題があると自分自身で認識しています。

Galatea Project の初期に Perl による AgentManager として例えば「オウム返しスクリプト」が実装されたのですが、こういう基本的なことを再考しつつ、部品としての利便性にも配慮して次の段階の活動を模索したいと思っています。

この他にやろうと思っているのは各モジュールの Mac 対応だし、実験としては FSM を iPhone OS で動かしてみたいと思っています。(iPadはエージェント対話システムの手頃なデバイスになりそうなので)iPod Touch アプリの開発環境は揃えたんですけどね。。

2月末に東京近郊で開催されたオープンソースカンファレンスに参加して様子を見てきました。細々とでもこういう場で Galatea Toolkit をアピールするのもよいかなと思い始めています。

カテゴリー
galatea java linux python ruby speech twitter

Galatea Project について

私が関わっている音声対話ツールキット Galatea に関するご報告です。
本記事は galatea-users ML に投稿した内容です。ご興味をお持ちの方はご参加をご検討いただければ幸いです。