Hatena::ブログ(Diary)

nishimotzの日記 このページをアンテナに追加 RSSフィード

2007-12-15

Python + GalateaTalk 00:19  Python + GalateaTalkを含むブックマーク  Python + GalateaTalkのブックマークコメント

NVDA というオープンソースのWindows用スクリーンリーダーで GalateaTalk が使えないか、という話があったので、調べてみました。

最新の NVDA snapshots には NVDAJp の活動の成果が取り込まれています。

まず、python で gtalk を実行してみます。下記を UTF-8 で保存して実行。

# -*- coding: utf-8 -*-
import popen2
import os
import codecs
os.chdir("c:\\work\\istc\\SSM\\gtalk\\")
cmd = "gtalk -C ssm-win.conf"
(cout, cin) = popen2.popen4( cmd )
cin = codecs.getwriter('shift_jis')(cin)
text = u'こんにちは'
cin.write("set Text = " + text + "\n")
cin.write("set Speak = NOW\n")
for line in cout.readlines():
	print line

あちこちからパクったソースです。「こんにちは」と喋ってくれました。

次は NVDA のドライバー実装です。

NVDA/synthDrivers/display.py をコピーして gtalk.py を作り、

class SynthDriver(silence.SynthDriver):
	name = "gtalk"
	description = "galatea talk (experimental)"

にしてみたら、とりあえず NVDA 起動→ Ctrl-Shift-S で gtalk が選択可能に。

	def initialize(self):
		os.chdir("c:\\work\\istc\\SSM\\gtalk")
		cmd = "gtalk -C ssm-win.conf"
		(self.cout, self.cin) = popen2.popen4( cmd )
		self.cin = codecs.getwriter('shift_jis')(self.cin)
		text = u'子猫が隠れんぼをしています'
		self.cin.write("set Text = " + text + "\n")
		self.cin.write("set Speak = NOW\n")
		self.frame = SynthFrame()

gtalk ドライバー選択時に「子猫が・・」と喋ってくれました。

	def speakText(self,text,wait=False,index=None):
		self.cin.write("set Text = " + text + "\n")
		self.cin.write("set Speak = NOW\n")
		self.frame.textCtrl.AppendText(text + "\n")

お、最初の2行くらい喋った!!

でも、すぐに音声合成がハングアップ。やっぱり「音切れ」の処理を実装しないとダメですね。

続きは明日!!

なべなべ 2007/12/16 00:59 素敵!
この先があっさりいくか,結構大変か,興味津々.
期待しています!