Advertisement
bossjones

Revised python code to show @HavardGraff

Aug 20th, 2013
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.94 KB | None | 0 0
  1. import pi
  2. from pi.becore import ScarlettConfig
  3. from recorder import Recorder
  4. from brain import Brain
  5.  
  6. import os
  7. import json
  8. import tempfile
  9. #import sys
  10.  
  11. import pygtk
  12. pygtk.require('2.0')
  13. import gtk
  14. import gobject
  15. import pygst
  16. pygst.require('0.10')
  17. gobject.threads_init()
  18. import gst
  19.  
  20. scarlett_config=ScarlettConfig()
  21.  
  22. class Listener:
  23.   def __init__(self, gobject, gst):
  24.     self.failed = 0
  25.     # scarlettPi ( mmj2f I added this after attempting the scarlettPi change )
  26.     self.recording = tempfile.mktemp(suffix='pi.wav')
  27.  
  28.     ## SOURCE: http://stackoverflow.com/questions/18220129/pocketsphinx-gstreamer-race-condition-pocketsphinx-cant-listen-to-audio-re
  29.     ## according to stackoverflow: gst-launch alsasrc device=hw:1 ! queue ! audioconvert !
  30.         ## audioresample ! "audio/x-raw-int, rate=16000, width=16, depth=16, channels=1" !
  31.         ## tee name=t ! queue ! audioresample ! "audio/x-raw-int, rate=8000" !
  32.         ## vader name=vader auto-threshold=true !
  33.         ## 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
  34.         ## ! fakesink dump=1 t. ! valve drop=0 ! queue ! wavenc ! filesink location=test.wav async=0
  35.  
  36.     # self.pipeline = gst.parse_launch(' ! '.join(['alsasrc device=' + scarlett_config.gimmie('audio_input_device'),
  37.     #                                            'queue',
  38.     #                                            'audioconvert',
  39.     #                                            'audioresample',
  40.     #                                            'queue',
  41.     #                                            'vader name=vader auto-threshold=true',
  42.     #                                            'pocketsphinx lm=' + scarlett_config.gimmie('LM') + ' dict=' + scarlett_config.gimmie('DICT') + ' hmm=' + scarlett_config.gimmie('HMM') + ' name=listener',
  43.     #                                            'fakesink dump=1']))
  44.  
  45.     self.pipeline = gst.Pipeline("mypipeline")
  46.  
  47.     # alsasrc - we'll use this to connect our ps3 eye and record
  48.     gst.debug("Adding alsasrc")
  49.     self.source  = gst.element_factory_make("alsasrc", "alsasrc")
  50.     self.source.set_property("device", scarlett_config.gimmie('audio_input_device'))
  51.     self.pipeline.add(self.source)
  52.    
  53.     # add a queue to allow pocketsphinx to recognize more data
  54.     gst.debug("Adding encoding queue")
  55.     self.qone = gst.element_factory_make("queue", "qone")
  56.     self.pipeline.add(self.qone)
  57.    
  58.     # audio convert
  59.     gst.debug("Adding encoding audioconvert")
  60.     self.recfileconvert = gst.element_factory_make("audioconvert", "recfileconvert")
  61.     self.pipeline.add(self.recfileconvert)
  62.    
  63.     # resample the wav
  64.     gst.debug("Adding encoding audioresample")
  65.     self.resample = gst.element_factory_make("audioresample", "resample")
  66.     self.pipeline.add(self.resample)
  67.    
  68.     # Add our tee
  69.     gst.debug("Adding tee")
  70.     self.rectee = gst.element_factory_make("tee", "rectee")
  71.     self.pipeline.add(self.rectee)
  72.    
  73.     # taken from: http://www.jonobacon.org/files/recgui-works.py
  74.     # link tee to alsasrc
  75.     gst.debug("Linking alsasrc to tee")
  76.     self.source.link(self.rectee)
  77.    
  78.     gst.debug("Adding encoding queue")
  79.     self.qtwo = gst.element_factory_make("queue", "qtwo")
  80.     self.pipeline.add(self.qtwo)
  81.    
  82.     gst.debug("Adding vader element")
  83.     self.vader = gst.element_factory_make("vader","vader")
  84.     self.vader.set_property("auto-threshold",False)
  85.     self.pipeline.add(self.vader)
  86.    
  87.     gst.debug("Adding pocketsphinx element")
  88.     self.pocketsphinx = gst.element_factory_make("pocketsphinx","listener")
  89.     print "Pocketsphinx: "
  90.     print dir( self.pocketsphinx )
  91.     self.pocketsphinx.set_property("lm",scarlett_config.gimmie('LM'))
  92.     self.pocketsphinx.set_property("dict",scarlett_config.gimmie('DICT'))
  93.     self.pocketsphinx.set_property("hmm",scarlett_config.gimmie('HMM'))
  94.  
  95.     gst.debug("Adding fakesink")
  96.     self.fakesink = gst.element_factory_make("fakesink", "fakesink")
  97.     self.fakesink.set_property("dump", True)
  98.     self.pipeline.add(self.fakesink)
  99.    
  100.     # Linking fakesink to tee
  101.     # taken from: http://www.jonobacon.org/files/recgui-works.py
  102.     gst.debug("Linking fakesink to tee")
  103.     self.fakesink.link(self.rectee)
  104.  
  105.     # creating valve now
  106.     gst.debug("Adding Valve element")
  107.     self.recording_valve = gst.element_factory_make('valve')
  108.     self.record_valve.set_property("drop",False)
  109.     self.pipeline.add(self.recording_valve)
  110.    
  111.     # another queue
  112.     gst.debug("Adding encoding queue")
  113.     self.recording_valve_queue = gst.element_factory_make("queue", "recording_valve_queue")
  114.     self.pipeline.add(self.recording_valve_queue)
  115.     self.recording_valve.link (self.recording_valve_queue)
  116.    
  117.     # adding wavenc element
  118.     gst.debug("Adding wavenc")
  119.     self.wavenc = gst.element_factory_make("wavenc", "wavenc")
  120.     self.pipeline.add(self.wavenc)
  121.    
  122.     # adding filesink element
  123.     gst.debug("Adding filesink")
  124.     self.filesink = gst.element_factory_make("filesink", "filesink")
  125.     self.filesink.set_property("location", self.recording)
  126.     self.filesink.set_property("async", False)
  127.     self.pipeline.add(self.filesink)
  128.    
  129.     # lets add the static pads now and link them?
  130.     # NOTE: Not sure if this is correct at all:
  131.     # self.rectee_pad = self.rectee.get_request_pad("src%d")
  132.     # print "Obtained request pad %s for audio branch."% self.rectee_pad.get_name()    
  133.     self.rectee.get_request_pad('src%d').link(self.recording_valve_queue.get_pad('sink'))
  134.     self.rectee.get_request_pad('src%d').link(self.qtwo.get_pad('sink'))
  135.        
  136.     # Original code going forward:
  137.     listener = self.pipeline.get_by_name('listener')
  138.     listener.connect('result', self.__result__)
  139.     listener.set_property('configured', True)
  140.     print "KEYWORDS WE'RE LOOKING FOR: " + scarlett_config.gimmie('ourkeywords')
  141.  
  142. ................
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement