def button_cb(self, path, args): # Anti-rebond diff = time() * 1000 - self.timestamp if diff < self.timeout: return self.timestamp = time() * 1000 if _engine.current_subscene() == 9 and args[0] < 12: _engine.switch_scene(args[0]) _engine.switch_subscene(1) # if args[0] == 1: # Rustine car acte 0 sur screen 14 !!! # _engine.output_event(_event.ProgramEvent('PBseq24', _util.NoDataOffset(1), 127)) # else: # _engine.output_event(_event.ProgramEvent('PBseq24', _util.NoDataOffset(1), seq24PageMap[args[0]])) # _engine.output_event(_event.CtrlEvent('PBTapeutape', _util.NoDataOffset(0), 0, args[0]-1)) else: if args[0] == 12: _engine.switch_subscene(9) if args[0] < 12: _engine.output_event(_event.ProgramEvent('PBCtrlOut', _util.NoDataOffset(1), args[0])) if _engine.current_subscene() == 8 and args[0] > 17: _engine.switch_subscene(args[0]-17) else: if args[0] == 24: _engine.switch_subscene(8) if args[0] < 24 and args[0] > 12: _engine.output_event(_event.ProgramEvent('PBCtrlOut', _util.NoDataOffset(1), args[0]))
def _panic_bypass(): # send all notes off (CC #123) and sustain off (CC #64) to all output # ports and on all channels for p in _engine.out_ports(): for c in range(16): _engine.output_event(_event.CtrlEvent(p, _util.offset(c), 123, 0)) _engine.output_event(_event.CtrlEvent(p, _util.offset(c), 64, 0))
def __arpeggiate(self): pattern = self.__applyPatternDirection() activeNotes = self.__getActiveNotes() for note, value in activeNotes.iteritems(): if self.__ticks % floor( self.__tickFactor / self.__resolution) == 0: newNote = self.__generatePatternNote( note, pattern[value['patternStep']] ) if pattern[value['patternStep']] != '.' else 'is silence' if isinstance(newNote, int): print 'port %s channel %i tick %i pattern step %s new note %s' % ( self.__outPort, self.__outChannel, self.__ticks, pattern[value['patternStep']], str(newNote)) output_event( NoteOnEvent( self.__outPort, self.__outChannel, newNote, randrange(70, 127) if self.__randomVelocity else value['velocity'])) if value['patternStep'] + 1 >= len(pattern): self.__notes[note]['patternStep'] = 0 self.__setPatternNotesOff() else: self.__notes[note]['patternStep'] += 1 return
def __setPatternNotesOff(self, note=None): pattern = self.__applyPatternDirection() activeNotes = self.__getActiveNotes() offNote = None if note is None: for _note, value in activeNotes.iteritems(): if pattern[value['patternStep']] != '.': offNote = self.__generatePatternNote( _note, pattern[value['patternStep']]) output_event( NoteOffEvent(self.__outPort, self.__outChannel, offNote)) else: for step in pattern: if step != '.': offNote = self.__generatePatternNote(note, step) output_event( NoteOffEvent(self.__outPort, self.__outChannel, offNote)) if isinstance(offNote, int): print 'port %s channel %i setting note %i off' % ( self.__outPort, self.__outChannel, offNote) return
def processOSC(self, path, *args): s = path.upper().split('/') if s[1] == 'MIDI': mtype = s[2] if self.events.has_key(mtype): output_event(self.events[mtype](self.midiPorts['out'][0], *args[0]))
def _panic_bypass(): # send all notes off (CC #123) and sustain off (CC #64) to all output # ports and on all channels for p in _engine.out_ports(): for c in range(16): _engine.output_event( _event.CtrlEvent(p, _util.NoDataOffset(c), 123, 0)) _engine.output_event( _event.CtrlEvent(p, _util.NoDataOffset(c), 64, 0))
def sendMidi(self, path, args): value = int(max(0, min(1, args[0])) * 127) if path[len(oscPrefix):] in self.patch and oscPrefix in path: output_event( CtrlEvent('Midi2oscOut', 1, self.patch[path[len(oscPrefix):]], value)) elif oscPrefix + '/CC/' in path: output_event( CtrlEvent('Midi2oscOut', 1, self.patch[path[len(oscPrefix):]], value))
def sendMidi(self, path, args): value = int(max(0,min(1,args[0]))*127) if path[len(oscPrefix):] in self.patch and oscPrefix in path: output_event(CtrlEvent('Midi2oscOut',1,self.patch[path[len(oscPrefix):]],value)) elif oscPrefix+'/CC/' in path: output_event(CtrlEvent('Midi2oscOut',1,self.patch[path[len(oscPrefix):]],value))