この授業では,我々が開発した日英2ヶ国語音声化システムBEPについて説明する. 講義の前半では,BEPの背景となるUNIXおよびEmacsの説明と,BEPの動作原理などを説明する. 講義の後半では,BEPをインストールして使ってみる. この授業を通して皆さんがEmacsやオープンソースの考え方になじんでいただければ幸いである.
BEPは,Bilingual Emacspeak Platformの略称であり,UNIXの世界で常用されているEmacs(イーマックス)というエディタを音声出力のみで利用できるようにした音声化システムである.バイリンガルという名前のとおり,日本語と英語が混在した文章を,日本人に適した発音で音声化する機能を持っている.またEmacspeakというのは,BEPの元となっている英語の音声化システムの名前であり,Emacsがしゃべる(Speak)からEmacspeakである.
BEPはWindowsとLinuxで動作する.Linuxはパソコンで動くUNIXの1種であり, Linuxの音声化システムとしては,BEPのほかに実用レベルのものはない.また,BEPを使えば,LinuxでもWindowsでも同じ操作性でEmacsを音声利用できるという利点もある.
以下,まずUNIXについて簡単に説明し,次にEmacsエディタについて述べ,最後にBEPを説明する.
パソコンは,電子機器のハードウェアに,プログラムのソフトウェアを組み合わせて動作する. ソフトウェアの基本部分がOS(オペレーティングシステム)である.OSとしてはMicrosoftのWindowsが有名だが,それ以外にもMicrosoftのDOS(ディスク・オペレーティングシステム)やUNIXやTRONなど,いろいろなものがある. UNIXの仲間には,最近有名になったLinuxの他にもBSD(Berkeley Software Distribution)やSolarisなどがある.
UNIXはアメリカのベル研究所で開発されたOSで,1971年ごろに誕生した.C言語で書かれたUNIXのソースプログラムを無料で配布できたので,大学などで広く使われるようになった.UNIXは複数の利用者が同時に複数の作業ができるように作られたマルチユーザでマルチタスクなOSであるので,利用者の情報を保護するセキュリティ機能を初めから持っている.またインターネット(TCP/IP)はUNIXの世界で開発されたので,UNIXはネットワークの利用も大得意である.
このようにUNIXは大学のアカデミックな文化で育まれたOSであり,「わからないことは自分で調べる」精神が基本となっている.また,「ソフトウェア開発は,知力と情熱のありったけを傾注する価値のある技芸だと信じる」(「リナックスの革命」,ペッカ・ヒマネン他,河出書房新社,p.23)人たちによって作られている. 一方,Microsoft Windowsは商品であり,お金を払って購入する.(注:UNIXにも商品のものがあるが,Linuxのように無料なものもある.)また,ソースプログラムなどは公開されていない.一般的に言ってWindowsは個人利用に適しており,UNIXは企業や大学などのサーバなどに適している.
最近注目されているLinuxは,Linus Torvalds(リーナス・トーバルズ)が1990年代の初めから開発してきたUNIX風のOSで,オープンソースとしてソースコードが公開されている.Solarisのような商用UNIXの代わりとして企業で使用されたり,小規模なグループのネットワークサーバとして利用されたり,Windowsに代わるOSとして個人で利用されたり,あるいはPDAや組み込み機器用のOSとして使われたりしている.
皆さんは大学生だからLinuxなんて関係ないと思うかもしれないが,Linuxを知っていれば,コンピュータの世界を深く知る,プログラマとして収入を得る,ネットワークサーバの管理者として収入を得る,最新のWindowsを動かすには荷が重い少し古いパソコンにLinuxをインストールして再利用する,などの可能性が広がる.それに,Windowsとは全く違うUNIXの世界を垣間見るだけでも面白いですよ.
UNIX文化というかUNIX哲学を語る上で「オープンソース」の考え方を避けて通ることはできない.LinuxはGNU GPL(General Public Licence)という種類のライセンスの元で公開されており,プログラムを使用する自由,プログラムを書き換える自由,ソースコードを見る自由,プログラムを再配布する自由,改良版を配布する自由,などのソフトウェアの自由を保障している.このような自由を支持するプログラマーたちによってLinuxやEmacsを初めとする優れたソフトウェアが登場し,我々はそれを利用することができる.
このような自由と対立する概念が,ソースの公開や再利用を妨げる著作権や,特許権などの,知的財産を囲い込む考え方である.インターネットが普及するにつれ情報を大量に迅速にコピーすることが容易になっていることもあって,両者の考え方が激しく対立してきている.
ソースが公開されているということは,動作の詳細を完全に知ることができ,自由に改善できるということである.自分が望む機能を追加するためには,プログラミングの技術を持っていることが望ましい.自分でプログラムを書けるなら,自分が使いやすいソフトに改良したり自分が欲しい機能を追加したりできる.このような自立を得るためにも,プログラミングは重要なスキルであると思う.
EmacsはUNIXの世界で広く使われているエディタであり,GNU GPLなオープンソースである.Emacsは単なるエディタというより,アプリケーションプラットホームというべき大きなソフトウェアであり,エディタの機能以外にファイル操作やカレンダー表示などがデフォルトで使える.Emacsは拡張可能なエディタなので,Emacs Lispのパッケージをインストールすることで,電子メール,Webブラウズ,辞書検索,などのいろいろな機能を持たせることができる.UNIXユーザの中には,UNIXマシンにログインしてEmacsを立ち上げた後は,Emacsの中ですべてを済ませる人もいる.
この「Emacsの中ですべてを済ませることができる」ことが,Emacsの便利さのひとつである.Emacsはエディタなので,効率よく文字を編集することができる.我々人間は情報を文字で表すことができるので,電子メールにせよWWWにせよ辞書にせよ,ほとんどの情報は文字で表記されている.つまり,Emacsを使えば,コンピュータを使うときに必要なあらゆる情報を,Emacsという同じアプリケーションで使うことができる.同じアプリケーションを土台にしているので,情報の相互利用が簡単に行えるし,同じ操作体系,同じコマンドでいろいろな操作ができる.さらにEmacsはUNIX以外にWindowsでも使えるので,Emacsを使っていれば,UNIXでもWindowsでも同じ操作体系で同じ作業ができる.しかもEmacsはフリーソフトウェアであるので無料で利用できる.
Emacsには他の便利さもある.ひとつは,マウスやカーソルキーを使わなくてもEmacsを使うことができるという便利さである.晴眼者の場合は,ホームポジションから手を離さずに操作できるという便利さをもたらすが,視覚障害者の場合はキーボードだけで操作できるという便利さにもなる.もうひとつは,細かくカスタマイズできるという点である.先に述べた拡張可能性と合わせて,拡張やカスタマイズなどの設定ができるユーザには,便利さにつながる.ソースコードが公開されている点も,ソースを読む能力を持っているユーザには,動作を正確に理解できたり自分でソースを改善できたりするという点で便利さにつながる.
ただしEmacsは,コマンドの入力方法や操作体系などがWindowsアプリケーションとはかなり異なる独自の世界を築いているので,初心者やWindowsの世界しか知らない人にはとっつきにくいソフトウェアである.どう違うのかは,授業の後半で実際にEmacsを使いながら説明する.
BEPは,UNIX専用の英語音声化システムEmacspeakを,日本人用に拡張したシステムである.Emacspeakは,当時,数学専攻の大学院生だったT.V. Ramanが,自分の博士論文執筆用に開発した,オープンソースの音声化システムである.DECtalk Expressの多彩な音声合成機能を使って,表現力豊かな音声出力を持っている.現在のEmacspeakは,ハードウェア音声合成装置以外に,OutloudというIBMのソフトウェア音声合成も利用できる.
Emacspeakはいわゆるスクリーンリーダではない.Emacsに組み込まれたEmacs LispライブラリがEmacsの情報をインテリジェントに処理し,音声合成装置を制御する能動的な音声化システムである.スクリーンリーダはOSやアプリケーションが画面に表示した情報を読み上げるだけ,あるいは,OS側で用意されているMSAAなどの機能やOSをハックすることで画面表示される前の情報を取得して音声化する,などの方法で音声化しているが,Emacspeakの場合は,Emacsの深いレベルで情報を取得し,コンテキストに応じた処理をして音声化することができる.その好例を次節に示す.
Emacspeakは,画面表示用のGUI(Graphical User Interface)とは別のAUI(Auditory User Interface,聴覚用のユーザインターフェース)を持っている.カレンダーの表示を考えるとAUIの有効性がよくわかる.カレンダーは2次元の表であり,晴眼者なら一目見ただけで今日が何曜日かわかる.つまり,今日の日付のある列の見出しを見れば,そこに曜日が書いてある.また,今日が何月かも,表の見出しを見ればすぐにわかる.しかしカレンダーを音声化する場合,単に今日の日付の上に置いたカーソルのある行を読み上げるだけでは用を足さない.少なくとも,カーソルのある列を縦に読む機能が必要である.EmacspeakはAUIを持っているので,カレンダーに表示された情報をインテリジェントに処理することができる.Emacspeakのカレンダーモードでは,「.(ピリオド)」コマンドで今日に移動し,"Monday, January 6, 2003."のように必要な情報を付加して音声化する.また縦方向の移動コマンドを用いると,異なる月をまたいだ場合でも,同じ曜日の先週や次週にきちんと移動する.つまりAUIの場合,画面に表示しているのとは別の形でカレンダーの情報を持っており,ユーザのコマンドに応じて耳で聞いたときにわかりやすいように音声化することができる.
GUIとは別の独立したAUIを持つためには,データそのものと,データの表示方法が分離されている必要がある.たとえばWindowsは,Windowsが持つデータをGUIから分離することができないので,AUIを持つのが困難である.これに対してUNIXはGUIなしでも利用可能なOSであり,原理的にはAUIを持たせやすいはずである.テキストエディタであるEmacsも文字ベースの情報をGUIで表示したり,AUIで音声化したりするのに適したアプリケーションである.Emacspeakの場合,Emacs Lispという種類のプログラミング言語でAUIの機能を作っている.
AUIはWWWブラウザーでも効力を発揮する.「付録A:HTMLのCSS」に述べたように,HTMLには音声専用の表示スタイルを指定する仕組みがあるので,これとAUIを組み合わせることで耳で聞いたときにもわかりやすいようにHTMLを表現できる.
音声フォントとはデータの種類によって声を変えることであり,これもAUIの一部といえる.Emacspeakが使っている音声合成装置DECTalkは9種類の声を持ち,声に修飾をして多彩な声を作ることもできる.Emacspeakはこれを利用して,複数の声を使い分けている.音声フォントの好例がプログラム編集である.例えばC言語のソースプログラムを書く場合,コメント行は平坦な声で読み上げ,print文などのクォーテッド文字列は別の声,キーワードはまた別の声で読み上げるようになっている.
この音声フォントは画面表示に使うフォントに対応している.画面表示用のフォントの大きさや形(明朝体やゴシック体など)や色を変えたり,イタリックや太字にしたりするように,声を変えたり同じ声でも平坦な声に変えたりしている.
このように多彩な音声フォントを使うためには,さまざまな声を出せる音声合成装置が必要である.しかし日本語の音声合成ハードウェアや音声合成ソフトウェアで,単独でこれほど多彩な声を出せるものは残念ながら存在しないので,BEPでは限られた種類の声しか使えない.
人間は何種類の声を聞き分けられるのか,何段階の声のピッチを聞き分けられるのか,どの情報にはどのような声が適しているのか,などの基礎研究はまだ進んでいない.また3次元音響出力なども音声修飾の1種類といえる.
声で情報を伝えると時間がかかるので,声の代わりにに短い音を使ったほうがよい場合がある.Emacspeakではこのような音をAuditory Icon(音アイコン)とよんでいる.例えばプログラムのコンパイル終了時に特有の音を鳴らしたり,ファイルを開くときに音を鳴らしたりすることができる.
BEPはその名のとおりバイリンガルな音声化システムであり,日本語と英語が混在したデータを日本人に聞きやすいように読み上げることができる.BEPは英語の読み上げに,ネイティブ英語とカタカナ英語の2種類の発音を使う.ネイティブ発音の場合は英語の音声合成で読み上げ,カタカナ英語の場合は英語の発音をカタカナに変換してから日本語の音声合成で読み上げる.このとき使用するカタカナ辞書は,静岡県立大学の石川准教授が開発したグラスルーツに使用されているカタカナ辞書をベースにしている.
付録Bに示すように,日本人にはこの2種類の発音が必要であるので,BEPはこの2種類の英語発音を使って,以下に示す3種類のバイリンガル読み上げを実現している.
残念ながら日本には,視覚障害者用のLinux音声化システムや点字表示システムはない.しかしBEPはLinux版のEmacsを音声化できるので,Linuxでのシステム管理やプログラム開発やLinuxの勉強などの作業を音声利用できる.
Linuxは,PDAや組込機器のOSとしても使われているので,Linuxの音声化はこういう機器の音声量利用の点でも重要である.昨年末SHARPよりLinux版のザウルスが販売されたが,このザウルスの音声化にも取り組んでみたいと思っている.
Emacsは,自由にカスタマイズできる.BEPおよびBEPの元となっているEmacspeakもカスタマイズ可能である.したがってBEPの使い方をよくわかっているユーザは,自分好みのBEPを作ることができる.
BEPは,視覚障害者が自分たちのために作っているという点で,ユーザのニーズを開発者が確実に知っているという利点を持っている.
EmacspeakやBEPのもうひとつの特徴が,ソースが公開されていることである.興味がある人はこのソースコードを改良して,より自分のニーズにあったものを作れるし,多言語に対応するように拡張することもできる.BEPはGNU GPLライセンスで公開しているので,この改良版もオープンソースで公開されることになる.
BEPがどのようにしてEmacsを音声化しているのかを簡単に説明しよう.Emacsは,Emacs Lispというプログラムの集合です.C言語で書かれた基本的な関数とEmacs Lisp言語で書かれた関数やプログラムが集まって,Emacsエディタの機能を提供しています.またEmacsでは,このEmacs Lispで書かれたプログラムライブラリーあるいはプログラムのパッケージを追加することで,Emacsに新しい機能を追加することができます.BEPもこのような追加パッケージの1種です.「Emacsは単なるエディタではない.一種のアプリケーションプラットホームである.」とよくいわれますが,Emacsは、Emacs Lispで作られたプログラムが動く土台であり,Lispプログラムによって電子メールやWeb閲覧や辞書検索やゲームなどのさまざまな機能を実現できることを意味しています.
BEPは,このEmacs Lispで書かれた部分と,ソフトウェアスピーチサーバの2つのプログラムから成り立っています.Emacs Lisp部は,Emacsの動作を邪魔することなくEmacsが扱っている情報を取得して,耳で聞いたときにわかりやすいように加工してからスピーチサーバにデータを送りだします.スピーチサーバは,Emacs Lisp部から送られた命令に従って,日本語と英語の音声合成ライブラリを操って,音声出力を生み出します.もっと詳しいことを知りたい方は,「未踏ソフトウェア成果報告書」を見てください.
Windowsで使えるEmacsエディタにもいろいろな種類があるが,BEPはMeadowという名前のEmacsを使っている.Meadowは京大の宮下尚さんが作ったもので,Windowsで使いやすいような工夫がされている.我々は,このMeadowにBEPを組み込んだ形のインストーラを作ってネットワークで公開している.このインストーラを使えば,一般のアプリケーションと同じような簡易さでBEPのインストールとアンインストールができる.このインストーラはスクリーンリーダで読みやすいように作ってあるので,視覚障害者が自力でBEPをインストールできる.
Mewというライブラリをインストールすれば,電子メールも使えます.Emacs-w3mというWebブラウザもあります.WindowsでもUNIXのような生活を送りたい人は,「Cygwin」をインストールしましょう.Cygwinを使えば,gccでのプログラム開発もできます.Cygwinは,「Cygwinのインストーラ」でネットワークインストールができます.
BEPを使う前に,Emacs(今回はMeadow)の画面構成を説明します.Emacsのウインドウの一番上はタイトル行です.その下にメニューバーがありますが,スクリーンリーダでは読み上げられないと思います.(「ESC-`」というキー操作で,tmm-menubarというコマンドが実行され,このメニューの一覧がミニバッファという場所に現れますが使い勝手はあまりよくないと思います.)Emacsの一番下の行には,ミニバッファという小さな操作窓があります.ユーザはここで,Emacsに対するコマンドや開きたいファイル名などを入力したりできます.またミニバッファには,Emacsのメッセージが出力されることもあります.Emacsの初心者は,自分がミニバッファにいることに気づかなくて混乱することが多いようです.ミニバッファの上がモードラインです.モードラインには編集中のファイル名やその他いろいろな情報が表示されます.「C-e t」というキー操作でモードラインを読み上げることができます.これ以外の領域が,編集中のバッファを表示する場所です.
Emacs(今回はMeadow)はWindowsアプリケーションとはまったく違う操作体系を持っているので,基本的な使い方を説明します.
Emacsにコマンド(ファイルを保存せよなどの命令)を伝えるにはいくつかの方法があります.
(3)から説明します.ファイルを開くという操作は「find-file」というコマンドで実行できます.このコマンドを直接実行するには,「M-x find-file」とタイプします.ここで「M-x」というのは,実際には,「Escキーを押して離した後でXキーを押す」という操作です.ですから実際には,「Esc x find-file」という風にタイプします.
(2); find-fileというコマンドは,「C-x c-f」というキー操作で代用できます.ここで「C-x」というのは,「Ctrlキーとxキーを同時に押す」という操作です.ですから実際には,「Ctrlキーを押しながら,xそしてfを順番に押す」となります.
(1); find-fileのように基本的なコマンドはメニューにも書いてあります.「ファイル」メニューの「開く... (C-x c-f)」がそれです.メニューには親切にも,この操作をC-x C-fで代用できることまで書いてあります.
覚えるべき約束は以下の2つだけです.
Emacsにはチュートリアルが付属しているので,まずはこれでEmacsの基本操作を覚えてください.チュートリアルを開くには,「C-h t」というキー操作をします.基本といってもかなり長いチュートリアルですので大変ですが,ぜひ挑戦してみてください.
BEPのWebサイトの「4. 使い方のヒント、デモ及び関連資料 」には,リファレンスカードなどの,EmacsやBEPを使う上で役に立つ情報も掲載してあります.
CやLispのソースを読ませると、多彩な声の使い分けを楽しめます. Windows版BEPの詳細は,「Windows版Bilingual Emacspeak」を見てください.
BEPのコマンドはすべて C-e (コントロールキーを押しながらEを押す。Emacspeak だから e です。)で始まります。
「Emacspeakで遊ぼう!」に従ってBEPを使ってみてください.
BEPは日本語の詳細読みもできます.Linux版のBEPは,かな漢字変換も読み上げますが,Windows版では,この作業はスクリーンリーダに任せています.
BEPはEmacsの音声化システムですから,Emacs外部の情報を読み上げることはできません.その意味でスクリーンリーダと併用する必要があります.また,まだまだ足りない機能や不安定な動作が多いのも事実です.でも,BEPを使えばLinuxで作業ができるし,WindowsでもLinuxでもEmacsを音声利用することができます.
わからないことがあったら,まずBEPのWebサイトを見てください.また,BEPのメーリングリストでたずねてください.メーリングリストのあて先や入会方法は,「BEPのメーリングリスト」に書いてあります.
---
皆さんご存知のように,WebはHTML(HyperText Markup Language)という形式でデータを記述する.HTMLの前半のハイパーテキストというのは,リンクをクリックすると他の場所にジャンプするような機能を示してしている.HTMLの後半のマークアップ言語というのは,タグとよばれる仕組みを使ってデータの構造を示す機能であり,たとえば<title>はこのタグに挟まれたデータがタイトル要素であることを明示しているし,<a>タグはアンカー要素,つまりリンクであることを示している.このようにデータがマークアップされているのもWebページの大きな特徴であり,このおかげでデータそのものとデータの表示方法を分離することができる.例えば箇条書きの場合,リストの各項目は<li>,全体は<ul>で表す.インターネットエクスプロ―ラなどのWebブラウザは,このタグを見て,頭に中黒の点を付けて各項目を画面にレイアウトして,見た目に箇条書きらしく表示する.ここで大事なのは,箇条書きに見えるように画面に表示したのはWebブラウザーであって,HTMLデータそのものにはそのデータがUL要素であるということしか書かれていない事である.このおかげで,画面表示とは別の音声表示に適した形で箇条書きリストを表現することが原理的に可能になる.つまり音声ブラウザーは,UL要素の各項目を,箇条書きらしく読み上げることが出来る.リンクを女性の声で読み上げるのもこのような要素に応じた読み上げの工夫の一例である.
WWWには,CSS(Cascadig Style Sheets)という仕組みがある.CSSの後ろ2文字のスタイルシートというのは見た目のスタイルを指定するシート(ページ)という意味である.つまりHTMLページの見た目,すなわちフォントの大きさや形や色,インデントや背景色などのレイアウトを指定する仕組みであり,CSSを取り替えれば,同じ内容のHTMLページでもまったく見た目が異なるページにすることができる.CSSの最初のCのカスケーディングはスタイルシートを重ねて使うことができることを示している.つまり,作者が指定したCSSを上書きする形でユーザが指定したCSSを使うことができる.大きな文字を使いたい人や特定の配色を使いたい人は,CSSのこの機能を使うこともできる.
CSSのようなWebに関する仕様は、W3C(World Wide Consortium)という団体が標準化を行っている.CSS2(CSS, Level2)までの仕様が確定し,現在はCSS3が議論されている.ただし,インターネットエクスプローラやネットスケープナビゲータなどのWebブラウザは,CSSの機能のうちの一部しかサポートしていないので,CSSの仕様にあっても利用できない機能も多い.
CSS2には出力メディアによってスタイルシートを切り替える仕組みがあり,画面表示用のスタイルシートのほかに,印刷用のスタイルシートや音声表示用のスタイルシート(Auditory CSS)を用意して,HTMLの表示メディアに応じて適切なスタイルシートを使う仕組みが用意されている.残念ながら最新のブラウザでも,この機能のうち印刷用のスタイルシートをサポートし始めた段階にとどまっている.Emacs用のWebブラウザであるW3は音声表示用のスタイルシートをサポートしているが,日本語表示などに難点があり,日本人には一般的ではない.
「Emacspeak/W3によるWeb読み上げのデモ(MP3ファイル)」
BEPのユーザ9名に、BEPを使う際にカタカナ英語(以下、K英語と略す)とネイティブ 英語(N英語)をどう使い分けたいかインタビューした。9名の内訳は男性8名と女性1名、 全盲5名と弱視1名と晴眼3名である。英語の聞き取り能力に関してはほぼ不自由なく聞き 取れるユーザから英語が苦手なユーザまでさまざまである。インタビューの結果、以下の ことが明らかになった。
BEPのバイリンガル化にあたっては、以上の点を考慮して3種類のモードを用意した。