diff options
author | amartin <olpc@xo-05-28-21.localdomain> | 2008-02-12 12:59:37 (GMT) |
---|---|---|
committer | amartin <olpc@xo-05-28-21.localdomain> | 2008-02-12 12:59:37 (GMT) |
commit | f52524e274d7e0b47da68b2fb5f27d1bb8e72662 (patch) | |
tree | 50fa1e3373b1e7425434910f1826eabdd1680e94 /TamTamJam.activity/Jam/JamMain.py | |
parent | 2712a2be52a76f28d625d2531b9fe8ac91905603 (diff) |
beat sync
Diffstat (limited to 'TamTamJam.activity/Jam/JamMain.py')
-rw-r--r-- | TamTamJam.activity/Jam/JamMain.py | 74 |
1 files changed, 46 insertions, 28 deletions
diff --git a/TamTamJam.activity/Jam/JamMain.py b/TamTamJam.activity/Jam/JamMain.py index c875d68..c652269 100644 --- a/TamTamJam.activity/Jam/JamMain.py +++ b/TamTamJam.activity/Jam/JamMain.py @@ -61,7 +61,7 @@ class JamMain(gtk.EventBox): self.csnd.setMasterVolume( self.volume*100 ) # csnd expects a range 0-100 for now self.csnd.setTempo( self.tempo ) - self.paused = False + self.muted = False presenceService = presenceservice.get_instance() self.xoOwner = presenceService.get_owner() @@ -256,7 +256,7 @@ class JamMain(gtk.EventBox): #-- Keyboard ------------------------------------------ self.key_dict = {} - self.nextTrack = 1 + self.nextTrack = 2 self.keyboardListener = None self.recordingNote = None @@ -426,7 +426,7 @@ class JamMain(gtk.EventBox): mode = 'mini' ) self.nextTrack += 1 if self.nextTrack > 8: - self.nextTrack = 1 + self.nextTrack = 2 self.csnd.play(self.key_dict[key], 0.3) return self.key_dict[key] @@ -465,8 +465,6 @@ class JamMain(gtk.EventBox): loopId = self.csnd.loopCreate() - # TODO update track volume - noteOnsets = [] notePitchs = [] for n in self.noteDB.getNotesByTrack( pageId, 0 ): @@ -474,7 +472,7 @@ class JamMain(gtk.EventBox): noteOnsets.append( n.cs.onset ) notePitchs.append( n.cs.pitch ) n.cs.instrumentId = id - n.cs.amplitude = volume * n.cs.amplitude # TODO remove me once track volume is working + n.cs.amplitude = volume * n.cs.amplitude n.cs.reverbSend = reverb self.csnd.loopPlay( n, 1, loopId = loopId ) #add as active n.popState() @@ -514,8 +512,7 @@ class JamMain(gtk.EventBox): self.csnd.loopSetTick( startTick, loopId ) - if not self.paused: - self.csnd.loopStart( loopId ) + self.csnd.loopStart( loopId ) return loopId @@ -533,8 +530,6 @@ class JamMain(gtk.EventBox): loopId = self.csnd.loopCreate() - # TODO update track volume - inst = self.instrumentDB.instId[id] offset = 0 @@ -542,7 +537,7 @@ class JamMain(gtk.EventBox): for n in self.noteDB.getNotesByTrack( page, 0 ): n.pushState() n.cs.instrumentId = id - n.cs.amplitude = volume * n.cs.amplitude # TODO remove me once track volume is working + n.cs.amplitude = volume * n.cs.amplitude n.cs.reverbSend = reverb if inst.kit: # drum kit if n.cs.pitch in GenerationConstants.DRUMPITCH: @@ -552,6 +547,8 @@ class JamMain(gtk.EventBox): n.popState() for n in self.noteDB.getNotesByTrack( page, 1 ): # metronome track self.csnd.loopPlay( n, 1, loopId = loopId ) + for n in self.noteDB.getNotesByTrack( page, 2 ): # record scratch track + self.csnd.loopPlay( n, 1, loopId = loopId ) offset += self.noteDB.getPage(page).ticks self.csnd.loopSetNumTicks( offset, loopId ) @@ -581,8 +578,7 @@ class JamMain(gtk.EventBox): self.csnd.loopSetTick( startTick, loopId ) - if not self.paused or force: - self.csnd.loopStart( loopId ) + self.csnd.loopStart( loopId ) return loopId @@ -597,7 +593,7 @@ class JamMain(gtk.EventBox): 0.2, # amplitude 0.5, # pan 100, # duration - 0, # track + 1, # track self.instrumentDB.instNamed["drum1hatpedal"].instrumentId, reverbSend = 0.5, tied = True, @@ -628,20 +624,21 @@ class JamMain(gtk.EventBox): def removeMetronome( self, page ): self.noteDB.deleteNotesByTrack( [ page ], [ 1 ] ) - def setPaused( self, paused ): - if self.paused == paused: - return + def setMuted( self, muted ): + self.playbackToolbar.setMuted( muted ) - loops = self.desktop.getLoopIds() + def _setMuted( self, muted ): + if self.muted == muted: + return False + + if self.muted: # unmute + self.muted = False + self.csnd.setTrackVolume( 100, 0 ) + else: # mute + self.muted = True + self.csnd.setTrackVolume( 0, 0 ) - if self.paused: # unpause - self.paused = False - for loop in loops: - self.csnd.loopStart( loop ) - else: # pause - self.paused = True - for loop in loops: - self.csnd.loopPause( loop ) + return True def setStopped( self ): for drum in list(self.desktop.drums): @@ -756,6 +753,8 @@ class JamMain(gtk.EventBox): self.jamToolbar.volumeSlider.set_value( volume ) def _setVolume( self, volume ): + if self.muted: + self.setMuted( False ) self.volume = volume self.csnd.setMasterVolume( self.volume*100 ) # csnd expects a range 0-100 for now @@ -1163,8 +1162,27 @@ class JamMain(gtk.EventBox): beatTick = curTick % Config.TICKS_PER_BEAT newTick = beat*Config.TICKS_PER_BEAT + beatTick - - self.csnd.adjustTick( newTick - curTick ) + maxTick = self.syncBeats*Config.TICKS_PER_BEAT + while newTick >= maxTick: + newTick -= maxTick + while newTick < 0: + newTick += maxTick + self.csnd.loopSetTick( newTick, self.heartbeatLoop ) + offset = newTick - curTick + print "_setBeat", curTick, newTick, maxTick, offset + + for id in self.desktop.getLoopIds(): + tick = self.csnd.loopGetTick( id ) + newTick = tick + offset + maxTick = self.csnd.loopGetNumTicks( id ) + while newTick >= maxTick: + newTick -= maxTick + while newTick < 0: + newTick += maxTick + self.csnd.loopSetTick( newTick, id ) + print id, tick, newTick, maxTick + + #self.csnd.adjustTick( newTick - curTick ) def updateBeatWheel( self ): curTick = self.csnd.loopGetTick( self.heartbeatLoop ) |