def tick(self): #print "tick", self.offset if self.stop == 1 or self.pause == 1: return False mapIndex = 0 if self._tracks.numSolo() > 0: #print "using solo list" t = self._tracks.soloList() else: t = self._tracks._tracks #nTracks = self.midFile.numTracks() for k, trackInfo in t.iteritems(): track = self.midFile.track(k) if track.hasNormalEvent(): mapIndex += 1 sublist = track.events[track.startEventIndex:] if self.selectedTrack == k: self.count += 1 if self.count > 20: p = float(self.offset) / float(track._maxTime) self.scoreLocationCallback(p) self.count = 0 for e in sublist: #print "e.offset=", e.offset if self.offset > e.offset: if not trackInfo.mute: if e.type == 0x09 and e.vel > 0: # note on #print "note on", e.note self.noteOn(e.channel, e.note, e.vel) self.notes[e.note] = e.channel + 1 if k == self.selectedTrack: self.notifyNoteOn(e.note) elif e.type == 0x08 or (e.type == 0x09 and e.vel == 0): # note off #print "note off", e.note self.noteOff(e.channel, e.note, e.vel) self.notes[e.note] = 0 if k == self.selectedTrack: self.notifyNoteOff(e.note) elif e.type == 0x0c: # program change self.setProgramForChannel(e.program, e.channel) track.startEventIndex += 1 else: break self.offset += self.stepSize * self.tempoScale * self.timeScale return True