Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import pi
- from pi.becore import ScarlettConfig
- from recorder import Recorder
- from brain import Brain
- import os
- import json
- import tempfile
- #import sys
- import pygtk
- pygtk.require('2.0')
- import gtk
- import gobject
- import pygst
- pygst.require('0.10')
- gobject.threads_init()
- import gst
- scarlett_config=ScarlettConfig()
- class Listener:
- def __init__(self, gobject, gst):
- self.failed = 0
- # scarlettPi ( mmj2f I added this after attempting the scarlettPi change )
- self.recording = tempfile.mktemp(suffix='pi.wav')
- ## SOURCE: http://stackoverflow.com/questions/18220129/pocketsphinx-gstreamer-race-condition-pocketsphinx-cant-listen-to-audio-re
- ## according to stackoverflow: gst-launch alsasrc device=hw:1 ! queue ! audioconvert !
- ## audioresample ! "audio/x-raw-int, rate=16000, width=16, depth=16, channels=1" !
- ## tee name=t ! queue ! audioresample ! "audio/x-raw-int, rate=8000" !
- ## vader name=vader auto-threshold=true !
- ## pocketsphinx lm=/home/pi/dev/scarlettPi/config/speech/lm/scarlett.lm dict=/home/pi/dev/scarlettPi/config/speech/dict/scarlett.dic hmm=/usr/local/share/pocketsphinx/model/hmm/en_US/hub4wsj_sc_8k name=listener
- ## ! fakesink dump=1 t. ! valve drop=0 ! queue ! wavenc ! filesink location=test.wav async=0
- # self.pipeline = gst.parse_launch(' ! '.join(['alsasrc device=' + scarlett_config.gimmie('audio_input_device'),
- # 'queue',
- # 'audioconvert',
- # 'audioresample',
- # 'queue',
- # 'vader name=vader auto-threshold=true',
- # 'pocketsphinx lm=' + scarlett_config.gimmie('LM') + ' dict=' + scarlett_config.gimmie('DICT') + ' hmm=' + scarlett_config.gimmie('HMM') + ' name=listener',
- # 'fakesink dump=1']))
- self.pipeline = gst.Pipeline("mypipeline")
- # alsasrc - we'll use this to connect our ps3 eye and record
- gst.debug("Adding alsasrc")
- self.source = gst.element_factory_make("alsasrc", "alsasrc")
- self.source.set_property("device", scarlett_config.gimmie('audio_input_device'))
- self.pipeline.add(self.source)
- # add a queue to allow pocketsphinx to recognize more data
- gst.debug("Adding encoding queue")
- self.qone = gst.element_factory_make("queue", "qone")
- self.pipeline.add(self.qone)
- # audio convert
- gst.debug("Adding encoding audioconvert")
- self.recfileconvert = gst.element_factory_make("audioconvert", "recfileconvert")
- self.pipeline.add(self.recfileconvert)
- # resample the wav
- gst.debug("Adding encoding audioresample")
- self.resample = gst.element_factory_make("audioresample", "resample")
- self.pipeline.add(self.resample)
- # Add our tee
- gst.debug("Adding tee")
- self.rectee = gst.element_factory_make("tee", "rectee")
- self.pipeline.add(self.rectee)
- # taken from: http://www.jonobacon.org/files/recgui-works.py
- # link tee to alsasrc
- gst.debug("Linking alsasrc to tee")
- self.source.link(self.rectee)
- gst.debug("Adding encoding queue")
- self.qtwo = gst.element_factory_make("queue", "qtwo")
- self.pipeline.add(self.qtwo)
- gst.debug("Adding vader element")
- self.vader = gst.element_factory_make("vader","vader")
- self.vader.set_property("auto-threshold",False)
- self.pipeline.add(self.vader)
- gst.debug("Adding pocketsphinx element")
- self.pocketsphinx = gst.element_factory_make("pocketsphinx","listener")
- print "Pocketsphinx: "
- print dir( self.pocketsphinx )
- self.pocketsphinx.set_property("lm",scarlett_config.gimmie('LM'))
- self.pocketsphinx.set_property("dict",scarlett_config.gimmie('DICT'))
- self.pocketsphinx.set_property("hmm",scarlett_config.gimmie('HMM'))
- gst.debug("Adding fakesink")
- self.fakesink = gst.element_factory_make("fakesink", "fakesink")
- self.fakesink.set_property("dump", True)
- self.pipeline.add(self.fakesink)
- # Linking fakesink to tee
- # taken from: http://www.jonobacon.org/files/recgui-works.py
- gst.debug("Linking fakesink to tee")
- self.fakesink.link(self.rectee)
- # creating valve now
- gst.debug("Adding Valve element")
- self.recording_valve = gst.element_factory_make('valve')
- self.record_valve.set_property("drop",False)
- self.pipeline.add(self.recording_valve)
- # another queue
- gst.debug("Adding encoding queue")
- self.recording_valve_queue = gst.element_factory_make("queue", "recording_valve_queue")
- self.pipeline.add(self.recording_valve_queue)
- self.recording_valve.link (self.recording_valve_queue)
- # adding wavenc element
- gst.debug("Adding wavenc")
- self.wavenc = gst.element_factory_make("wavenc", "wavenc")
- self.pipeline.add(self.wavenc)
- # adding filesink element
- gst.debug("Adding filesink")
- self.filesink = gst.element_factory_make("filesink", "filesink")
- self.filesink.set_property("location", self.recording)
- self.filesink.set_property("async", False)
- self.pipeline.add(self.filesink)
- # lets add the static pads now and link them?
- # NOTE: Not sure if this is correct at all:
- # self.rectee_pad = self.rectee.get_request_pad("src%d")
- # print "Obtained request pad %s for audio branch."% self.rectee_pad.get_name()
- self.rectee.get_request_pad('src%d').link(self.recording_valve_queue.get_pad('sink'))
- self.rectee.get_request_pad('src%d').link(self.qtwo.get_pad('sink'))
- # Original code going forward:
- listener = self.pipeline.get_by_name('listener')
- listener.connect('result', self.__result__)
- listener.set_property('configured', True)
- print "KEYWORDS WE'RE LOOKING FOR: " + scarlett_config.gimmie('ourkeywords')
- ................
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement