Lookupの辞書に音声データへのリンクを後付けするツールです。 WordVoxのページを見てたらやってみたくなりました。 現在対応している音声データは StarDictやWordVoxで使われているものだけです。 Lookup 1.4+mediaが必要です。 Lookup 1.4では動くかもしれませんが確認はしていません。
実験段階の状態ですので仕様が大幅に変更される可能性もあります。
lookup-sound.elと名前を変更してLookupをインストールしたディレクトリへコピーして下さい。 必要ならばバイトコンパイルして下さい。 また、音声データはStarDictのダウンロードページ等から、WyabdcRealPeopleTTS.tar.bz2というファイルをダウンロードして任意のディレクトリに展開して下さい。
~/.lookupで、音声リンクを表示させたい辞書(またはエージェント)に:soundオプションで音声データを展開したディレクトリを設定し、アレンジ関数(のできるだけ最後)にlookup-sound-arrange-englishを追加します。 複数の辞書およびエージェントに指定可能です。 また、lookup-soundをrequireするのを忘れないようにして下さい。 例えば
(lookup-set-agent-option "ndebs+web" :sound "E:/DIC/sounds")
(lookup-set-agent-option
"ndebs+web"
:arranges
'(ndeb-arrange-xbm
ndeb-arrange-bmp
ndeb-arrange-jpeg
ndeb-arrange-ignore
ndeb-arrange-no-newline
ndeb-arrange-prev-next
lookup-arrange-references
lookup-arrange-gaijis
lookup-arrange-default-headings
ndeb-arrange-fill-lines
lookup-sound-arrange-english))
(require 'lookup-sound)
のように設定します。 この場合は"ndebs+web"エージェントの辞書全てに設定されたことになります。 ちなみに、音声データはE:/DIC/sounds/aからE:/DIC/sounds/zのディレクトリ内に実データが存在することになります。
key(define-keyのdocstringを参照して下さい)を指定する事でEntryモードからリンク先のURIを参照する事ができます。 例えば、以下の様な内容を~/.lookupに記述を行います。
(setq lookup-sound-follow-from-entry "N")
必ずlookup-soundをrequireする前に設定して下さい。 そうしないと設定が反映されません。
音声データの再生方法を設定します。 デフォルトはplay-sound-file関数を持ったMeadow用の設定になっています。 設定内容は、音声データのファイル名に対する正規表現と、それに対応する関数名のシンボル(またはプログラム名の文字列、プログラム名と引数のリスト)のリストのリストを記載します。 ファイル名に対する正規表現がnilの場合は常にマッチしたと見なします。 例えば
(setq lookup-sound-follow-functions
'((".wav$" lookup-sound-follow-with-play-sound-file)
(nil "fiber")))
の様に設定すると拡張子が"wav"のデータに対してはlookup-sound-follow-with-play-sound-fileが実行され、それ以外の場合はfiberが起動されます。 このツールで予め用意している関数として以下のものがあります。
Emacsが持つplay-sound-file関数を使用して再生します。 Meadow以外のEmacsでは音声再生中は他の操作が一切できません。
例えば元々音声データを持っている辞書に設定した場合、Entryモードから音声再生させようとすると、EPWINGの音声データを再生させる時と後付けされた音声データを再生させる時とでは違うキーを使用しないといけません。
contentの最初の一行から単語を類推しており、そのルーチンもいい加減なのでそういう事も多々起きると思います。 対策としてはもっと賢いルーチンを作るか、その辞書専用のルーチンをlookup-sound-arrange-english関数の代替として作成する事になります。
(ndeb.el等の)エージェントのプログラムを読み込んだ後でデフォルト値を変更すれば、同じ種類のエージェントについては一度の変更で済みます。 例えばndebエージェントであれば~/.lookupに以下のように記述します。
(eval-after-load "ndeb"
'(put 'ndeb ':arranges
'(ndeb-arrange-auto-jump-reference
ndeb-arrange-xbm
ndeb-arrange-bmp
ndeb-arrange-jpeg
ndeb-arrange-image-page
ndeb-arrange-wave
ndeb-arrange-mpeg
ndeb-arrange-ignore
ndeb-arrange-no-newline
ndeb-arrange-prev-next
ndeb-arrange-paged-reference
lookup-arrange-references
lookup-arrange-gaijis
lookup-arrange-squeezed-references
lookup-arrange-default-headings
ndeb-arrange-fill-lines
ndeb-arrange-snd-autoplay
lookup-sound-arrange-english)))
このツールはmp3やogg等のファイルも認識するので、StarDictで使用している音声データをそれらのフォーマットに変換する事でデータ容量を削減できます。 ただし、それぞれの形式の再生に対応したツールが必要です。
アルファベットの小文字のみというファイル名の命名規則に従ったデータを正しいディレクトリにコピーすれば音声を追加できます。 例えば、LSD voiceの音声データは頭文字毎に正しいディレクトリにコピーする事で使用可能になります。
2007/01/19 複数の辞書とエージェントに設定できるのを書き忘れていたので追記。 Tipsを追加。
2007/01/18 公開。 なんだか偉そうな名前になってしまった。 まだでっちあげレベルだけどないよりはましだと思いたい。
Kazuhiro's blog
http://ikazuhiro.s206.xrea.com/staticpages/index.php/lookup-sound