読み上げてもらう

ふと、w3m やら Mew でテキストを読み上げてもらえないかな〜、などと思い立ちました。

調べると 音声合成 が見つかるのですが・・・
う〜む、正直、ここまでの重たいニーズではありません・・・。

更に調べたら Windowsでもsayコマンドを - 今日覚えたこと が見つかったので、
参考にさせていただきました。

で、Ruby を使って ↓ のような感じで。

talk.rb:

#!ruby
require 'win32ole'
o = WIN32OLE.new("SAPI.SpVoice")
while STDIN.gets
  o.Speak($_)
end

.emacs に ↓ を記述。

(defun talk-region (start end)
  (interactive "r")
  (let ((pname "*talk-region*")
        (coding-system-for-write 'cp932))
    (start-process-shell-command pname nil "PATH/talk.rb"))) ; パスを指定
    (process-send-region pname start end)
    (process-send-eof pname)))

読み上げてほしいところをリージョン選択して M-x talk-region で読み上げ開始。

でも、よく考えたら、英語読み上げの出番は稀なので・・・
日本語のを探したら SofTalk - アットウィキ が見つかりました。
ああ、これ、某ニコニコするところで見た (聞いた) ことあるなwww
早速インストールして Emacs から呼び出せるようにしてみました。

(defun talk-region (start end)
  (interactive "r")
  (let ((pname "*talk-region*")
        (coding-system-for-write 'cp932))
    (start-process-shell-command pname nil "INSTALL-PATH/SofTalk.exe") ; パスを指定
    (process-send-string pname "/W:") ; SofTalk のオプション
    (process-send-region pname start end)
    (process-send-eof pname)))

(global-set-key "\C-c\M-t" 'talk-region) ; キーバインドは適当に

あ、とりあえず、SofTalk の読み辞書に
"いーまっくす emacs" と "りすぷ lisp" は登録しとかないと・・・。