写真 青い空と雲と建物と木々の緑

nishimotzの日記

  • NVDA jpdev100909

    やっと NVDA に音声合成エンジンが搭載され、開発版としてリリースされました!!
    今日と明日はオープンソースカンファレンスというイベントでデモをしています。私は明日参加して、夕方のライトニングトークに出ます。
    メーリングリストでさっそく動作報告、御要望などいただいています。1週間前にやっと最低限の動作をするようになったエンジンが、皆様のマシンで動いているとお知らせいただき、大変嬉しく思っています。
    読み上げが始まるまでの遅延や、速度などの設定変更がない、という問題は私も承知しています。すこし時間をいただければ幸いです。
    音声エンジン以外の機能との役割分担を整理する必要がある部分は、開発メンバーで話し合って検討したいと思います。
    この機会に、特に、音声エンジンに関する作業方針について、私自身の考えをお伝えしておきます。
    私自身はアクセシビリティや音声技術の研究を本業としております。今回組み込んだエンジンはもともと Open JTalk(New BSDライセンス)というもので、音声技術に関するプロジェクトでご一緒してきた研究グループの最新成果(GalateaTalkの関連技術)です。私は本家のメンバーと連絡を取りながら今回の作業を進めています。ちなみに現在使っている声はその研究室の卒業生の方の音声とのことです。
    限られた作業時間の中で、商用ソフトウェアのように多くの御要望にお応えすることは難しいかも知れません。しかし、いただいた御要望、不具合報告、御提案をきちんとデータベース化して、なるべく対応したいと思っています。
    音声エンジンについては、何か読みのおかしいところを場当たり的に修正すると、これまで正しく読めていた部分に悪影響が及ぶ、ということがあります。テストの手順をまとめて環境を整備することは重要です。
    矛盾が起こらないように時間をかけて慎重に作業させていただく場合もあります。「簡単なことが、なぜすぐに直せないのか」とお思いのことも
    あるかも知れませんが、もし疑問があればご説明しますので、御了承いただければ幸いです。
    私からなにか NVDA に関する改良の提案をさせていただき、ユーザの皆様にご評価いただき、私の研究に御協力いただく、といったお願いをすることがあるかも知れません。もちろん、その場合は事前にお許しを得たいと思います。
    それから、デイジー書籍の作成支援ツールに使える音声合成が欲しい、という問い合わせも、私個人に対していただいています。今年の春にスタートしたサピエというシステムの立ち上げを、私もすこしだけお手伝いしています。JTalk エンジンを NVDA で鍛えていただいて、いずれデイジーでも活用していただけるように、と考えております。

    • 2010-09-11: OSC参加は無事に終了しました。なお、Open JTalk に関する記述を一部訂正しました。
  • 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 日本語化プロジェクトの開発ミーティングです。

  • Ustreamのパスワード配信

    昨日今日第54回福祉情報工学(WIT)研究会(共催:ヒューマンインタフェース学会研究会)でした。
    前回に引き続き、Ustreamによる配信を実施しました。
    また、前回の配信について配信ワーキンググループの連名で報告をしました。
    研究会の記録と配信実績の報告は別途しますが、その前に忘れないうちにUstreamに関する御報告をひとつしておきます。
    WIT研究会ではできるだけ多くの方に面倒な手続きなく配信したいと考えておりますが、前回および今回に関しては、講演者や情報保障関係者の御要望を考慮して、Ustreamの「パスワード制限による配信」を使用し、ieice_wit のアカウントで配信を実施しました。
    私たちは特に前回「聴覚に障害をお持ちの方を考慮した配信」を行いました。その詳細は報告(およびその技術編)の通りなのですが、予想外に多数の「視覚に障害をお持ちのユーザ」から御利用の御要望をいただきました。
    一般的には「動画コンテンツに字幕をつける」というのはWebアクセシビリティの配慮としてはなかなか手が回らない部分です。
    そこにチャレンジした私たちなのですが、残念ながら、もっと基本的な配慮である「視覚に障害をお持ちの方が、スクリーンリーダ操作で配信を受けられること」について、十分な配慮を実現できておらず、前回に続いて今回もお叱りのメールやツイートをいただいています。
    具体的な状況を以下にご説明します。
    パスワードを入力しようとしてチャンネルのURLにアクセスすると「この番組はパスワードで保護されています。番組を見るには、有効なパスワードを入力してください」という画面が表示されます。これはHTMLのテキストボックスなので、日本で普及しているほとんどのスクリーンリーダで(音声読み上げとキーボード入力で)操作可能です。
    Ustream受信のパスワード操作1
    スクリーンリーダを御利用の方はこれを入力すれば配信が始まると思ってお待ちになるようですが、残念ながら配信が始まりません。
    実はこの先にもう一つパスワード入力画面があるのです。
    Ustream受信におけるパスワード入力(2つめの画面)
    この2番目の画面では、Flashの動画配信オブジェクトの一部として、Flashのウィジェットでテキストボックスが表示されているようです。
    日本で視覚障害を持つ方が広くお使いになっているスクリーンリーダには、Flashオブジェクトの中のウィジェットを操作できない製品が多数あります。
    このため「配信を利用できない」というご指摘をいただく結果になっています。
    もしFlashオブジェクトでパスワード入力待ちがなければ、音量調整など操作が困難な要素はありそうですが、全盲の方にもWIT研究会の配信をなんとか聞いていただくことはできると思われます。(そして、視覚に障害をお持ちなので会場に足を運びにくい、自宅や職場から研究会を聴講したい、という御要望にお応えすることも、私たちとしては、情報保障の取り組みの一つとして重要である、と気づきつつあります)
    著名な高機能スクリーンリーダであるJAWS(日本語版)はこういった問題に対応できる選択肢の一つですが、高価である・操作方法が初心者向けでない、といった事情で、利用者が限られているのが実情です。
    このような日本のWebアクセシビリティの状況を改善すべく、私たちもオープンソースで高機能のスクリーンリーダであるNVDAの日本語化に取り組んでいます。
    NVDAでのFlash操作についてはミツエーリンクスさんがブログ記事(続報)で報告しておられます。
    今回、配信ワーキンググループは、配信を利用できなかったという方から「パスワード入力がなぜ2回必要なのか」と質問を受けております。
    WIT研究会の配信WGとしては、今後、パスワード制限を行わないで配信できるように努力したいと考えております。しかし、別の団体などから、パスワード制限をかけつつ視覚障害をお持ちの方に配慮した配信をなさりたい、という要望はいずれ出てくるのではないかと思います。
    そこで改めて Ustream 運営会社の皆様にもこの問題をお知らせするべく、この記事を書かせていただきました。
    まずはこの問題について多くの方にご理解いただけることを望んでおります。