diff options
Diffstat (limited to 'simple_tts3.py')
-rw-r--r-- | simple_tts3.py | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/simple_tts3.py b/simple_tts3.py new file mode 100644 index 0000000..9f4f7b7 --- /dev/null +++ b/simple_tts3.py @@ -0,0 +1,87 @@ +# From http://wiki.sugarlabs.org/go/Activity_Team/gst-plugins-espeak +from gi.repository import Gtk +#import pygst +#pygst.require("0.10") +from gi.repository import Gst +from gi.repository import Pango + +import logging + +window = Gtk.Window() +window.connect('destroy', + lambda sender: Gtk.main_quit()) + +workspace = Gtk.VBox() +window.add(workspace) + +# text widget + +scrolled = Gtk.ScrolledWindow() +workspace.pack_start(scrolled, False, False, padding=5) + +text = Gtk.TextView() +scrolled.add(text) + +buffer = text.props.buffer +buffer.props.text = 'This is a simple text to speech test' + +tag = buffer.create_tag() +tag.props.weight = Pango.Weight.BOLD + +# play controls + +toolbar = Gtk.HBox() +workspace.pack_end(toolbar, False, False, padding=5) + +play = Gtk.Button('Play/Resume') +play.connect('clicked', + lambda sender: pipe.set_state(Gst.State.PLAYING)) +toolbar.add(play) + +pause = Gtk.Button('Pause') +pause.connect('clicked', + lambda sender: pipe.set_state(Gst.State.PAUSED)) +toolbar.add(pause) + +stop = Gtk.Button('Stop') +stop.connect('clicked', + lambda sender: pipe.set_state(Gst.State.NULL)) +toolbar.add(stop) + +# gst code + +Gst.init_check(None) + +pipe = Gst.parse_launch('espeak name=src ! autoaudiosink') + +src = pipe.get_by_name('src') +src.props.voice = 'english_wmids' +src.props.text = buffer.props.text +src.props.track = 2 +#src.props.track = 1 # track for words + + +def tts_cb(bus, message): + logging.error('gstreamer message %s', message) + if message is None: + return + if message.structure.get_name() != 'espeak-word': + return + + offset = message.structure['offset'] + len = message.structure['len'] + + buffer.remove_tag(tag, buffer.get_start_iter(), buffer.get_end_iter()) + start = buffer.get_iter_at_offset(offset) + end = buffer.get_iter_at_offset(offset + len) + buffer.apply_tag(tag, start, end) + +bus = pipe.get_bus() +bus.add_signal_watch() +#bus.connect('message::element', tts_cb) +bus.connect('message', tts_cb) + +# gtk start + +window.show_all() +Gtk.main() |