Пример #1
0
 def __init__(self, engine, controlnum, samprate=44100):
   Task.__init__(self)
   self.engine = engine
   self.controlnum = controlnum
   devnum = self.engine.input.controls.micDevice[controlnum]
   if devnum == -1:
     devnum = None
     self.devname = pa.get_default_input_device_info()['name']
   else:
     self.devname = pa.get_device_info_by_index(devnum)['name']
   self.mic = pa.open(samprate, 1, pyaudio.paFloat32, input=True, input_device_index=devnum, start=False)
   if Config.get('game', 'use_new_pitch_analyzer') or not have_pypitch:
     self.analyzer = Analyzer(samprate)
   else:
     self.analyzer = pypitch.Analyzer(samprate)
   self.mic_started = False
   self.lastPeak    = 0
   self.detectTaps  = True
   self.tapStatus   = False
   self.tapThreshold = -self.engine.input.controls.micTapSensitivity[controlnum]
   self.passthroughQueue = []
   passthroughVolume = self.engine.input.controls.micPassthroughVolume[controlnum]
   if passthroughVolume > 0.0:
     Log.debug('Microphone: creating passthrough stream at %d%% volume' % round(passthroughVolume * 100))
     self.passthroughStream = Audio.MicrophonePassthroughStream(engine, self)
     self.passthroughStream.setVolume(passthroughVolume)
   else:
     Log.debug('Microphone: not creating passthrough stream')
     self.passthroughStream = None
Пример #2
0
 def __init__(self, engine, controlnum, samprate=44100):
     Task.__init__(self)
     self.engine = engine
     self.controlnum = controlnum
     devnum = self.engine.input.controls.micDevice[controlnum]
     if devnum == -1:
         devnum = None
         self.devname = pa.get_default_input_device_info()['name']
     else:
         self.devname = pa.get_device_info_by_index(devnum)['name']
     self.mic = pa.open(samprate,
                        1,
                        pyaudio.paFloat32,
                        input=True,
                        input_device_index=devnum,
                        start=False)
     if Config.get('game',
                   'use_new_pitch_analyzer') or not have_pypitch:
         self.analyzer = Analyzer(samprate)
     else:
         self.analyzer = pypitch.Analyzer(samprate)
     self.mic_started = False
     self.lastPeak = 0
     self.detectTaps = True
     self.tapStatus = False
     self.tapThreshold = -self.engine.input.controls.micTapSensitivity[
         controlnum]
     self.passthroughQueue = []
     passthroughVolume = self.engine.input.controls.micPassthroughVolume[
         controlnum]
     if passthroughVolume > 0.0:
         Log.debug(
             'Microphone: creating passthrough stream at %d%% volume' %
             round(passthroughVolume * 100))
         self.passthroughStream = Audio.MicrophonePassthroughStream(
             engine, self)
         self.passthroughStream.setVolume(passthroughVolume)
     else:
         Log.debug('Microphone: not creating passthrough stream')
         self.passthroughStream = None
Пример #3
0
  class Microphone(Task):
    def __init__(self, engine, controlnum, samprate=44100):
      Task.__init__(self)
      self.engine = engine
      self.controlnum = controlnum
      devnum = self.engine.input.controls.micDevice[controlnum]
      if devnum == -1:
        devnum = None
        self.devname = pa.get_default_input_device_info()['name']
      else:
        self.devname = pa.get_device_info_by_index(devnum)['name']
      self.mic = pa.open(samprate, 1, pyaudio.paFloat32, input=True, input_device_index=devnum, start=False)
      if Config.get('game', 'use_new_pitch_analyzer') or not have_pypitch:
        self.analyzer = Analyzer(samprate)
      else:
        self.analyzer = pypitch.Analyzer(samprate)
      self.mic_started = False
      self.lastPeak    = 0
      self.detectTaps  = True
      self.tapStatus   = False
      self.tapThreshold = -self.engine.input.controls.micTapSensitivity[controlnum]
      self.passthroughQueue = []
      passthroughVolume = self.engine.input.controls.micPassthroughVolume[controlnum]
      if passthroughVolume > 0.0:
        Log.debug('Microphone: creating passthrough stream at %d%% volume' % round(passthroughVolume * 100))
        self.passthroughStream = Audio.MicrophonePassthroughStream(engine, self)
        self.passthroughStream.setVolume(passthroughVolume)
      else:
        Log.debug('Microphone: not creating passthrough stream')
        self.passthroughStream = None

    def __del__(self):
      self.stop()
      self.mic.close()

    def start(self):
      if not self.mic_started:
        self.mic_started = True
        self.mic.start_stream()
        self.engine.addTask(self, synchronized=False)
        Log.debug('Microphone: started %s' % self.devname)
        if self.passthroughStream is not None:
          Log.debug('Microphone: starting passthrough stream')
          self.passthroughStream.play()

    def stop(self):
      if self.mic_started:
        if self.passthroughStream is not None:
          Log.debug('Microphone: stopping passthrough stream')
          self.passthroughStream.stop()
        self.engine.removeTask(self)
        self.mic.stop_stream()
        self.mic_started = False
        Log.debug('Microphone: stopped %s' % self.devname)

    # Called by the Task machinery: pump the mic and shove the data through the analyzer.
    def run(self, ticks):
      while self.mic.get_read_available() > 1024:
        try:
          chunk = self.mic.read(1024)
        except IOError, e:
          if e.args[1] == pyaudio.paInputOverflowed:
            Log.notice('Microphone: ignoring input buffer overflow')
            chunk = '\x00' * 4096
          else:
            raise
        if self.passthroughStream is not None:
          self.passthroughQueue.append(chunk)
        self.analyzer.input(numpy.frombuffer(chunk, dtype=numpy.float32))
        self.analyzer.process()
        pk = self.analyzer.getPeak()
        if self.detectTaps:
          if pk > self.tapThreshold and pk > self.lastPeak + 5.0:
            self.tapStatus = True
        self.lastPeak = pk
Пример #4
0
    class Microphone(Task):
        def __init__(self, engine, controlnum, samprate=44100):
            Task.__init__(self)
            self.engine = engine
            self.controlnum = controlnum
            devnum = self.engine.input.controls.micDevice[controlnum]
            if devnum == -1:
                devnum = None
                self.devname = pa.get_default_input_device_info()['name']
            else:
                self.devname = pa.get_device_info_by_index(devnum)['name']
            self.mic = pa.open(samprate,
                               1,
                               pyaudio.paFloat32,
                               input=True,
                               input_device_index=devnum,
                               start=False)
            if Config.get('game',
                          'use_new_pitch_analyzer') or not have_pypitch:
                self.analyzer = Analyzer(samprate)
            else:
                self.analyzer = pypitch.Analyzer(samprate)
            self.mic_started = False
            self.lastPeak = 0
            self.detectTaps = True
            self.tapStatus = False
            self.tapThreshold = -self.engine.input.controls.micTapSensitivity[
                controlnum]
            self.passthroughQueue = []
            passthroughVolume = self.engine.input.controls.micPassthroughVolume[
                controlnum]
            if passthroughVolume > 0.0:
                Log.debug(
                    'Microphone: creating passthrough stream at %d%% volume' %
                    round(passthroughVolume * 100))
                self.passthroughStream = Audio.MicrophonePassthroughStream(
                    engine, self)
                self.passthroughStream.setVolume(passthroughVolume)
            else:
                Log.debug('Microphone: not creating passthrough stream')
                self.passthroughStream = None

        def __del__(self):
            self.stop()
            self.mic.close()

        def start(self):
            if not self.mic_started:
                self.mic_started = True
                self.mic.start_stream()
                self.engine.addTask(self, synchronized=False)
                Log.debug('Microphone: started %s' % self.devname)
                if self.passthroughStream is not None:
                    Log.debug('Microphone: starting passthrough stream')
                    self.passthroughStream.play()

        def stop(self):
            if self.mic_started:
                if self.passthroughStream is not None:
                    Log.debug('Microphone: stopping passthrough stream')
                    self.passthroughStream.stop()
                self.engine.removeTask(self)
                self.mic.stop_stream()
                self.mic_started = False
                Log.debug('Microphone: stopped %s' % self.devname)

        # Called by the Task machinery: pump the mic and shove the data through the analyzer.
        def run(self, ticks):
            while self.mic.get_read_available() > 1024:
                try:
                    chunk = self.mic.read(1024)
                except IOError, e:
                    if e.args[1] == pyaudio.paInputOverflowed:
                        Log.notice(
                            'Microphone: ignoring input buffer overflow')
                        chunk = '\x00' * 4096
                    else:
                        raise
                if self.passthroughStream is not None:
                    self.passthroughQueue.append(chunk)
                self.analyzer.input(
                    numpy.frombuffer(chunk, dtype=numpy.float32))
                self.analyzer.process()
                pk = self.analyzer.getPeak()
                if self.detectTaps:
                    if pk > self.tapThreshold and pk > self.lastPeak + 5.0:
                        self.tapStatus = True
                self.lastPeak = pk