Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/simple_tts3.py
diff options
context:
space:
mode:
Diffstat (limited to 'simple_tts3.py')
-rw-r--r--simple_tts3.py87
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()