All pastes #935884 Raw Edit

Miscellany

public text v1 · immutable
·published 2008-03-09 23:55 UTC
rendered paste body
    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