From ca7cf069ee7cb1796bb199cfa8406492e609c407 Mon Sep 17 00:00:00 2001 From: Olipet2 Date: Wed, 07 Mar 2007 11:52:41 +0000 Subject: loop points in edit and sequencer comes back again in mini --- (limited to 'miniTamTam') diff --git a/miniTamTam/KeyboardStandAlone.py b/miniTamTam/KeyboardStandAlone.py index 124e412..23824a2 100644 --- a/miniTamTam/KeyboardStandAlone.py +++ b/miniTamTam/KeyboardStandAlone.py @@ -74,9 +74,8 @@ class KeyboardStandAlone: tied = True, mode = 'mini') self.csnd.play(self.key_dict[key], 0.3) - #self.key_dict[key].playNow(0.3) if self.getPlayState(): - recOnset = self.csnd.loopGetTick() / 3 + recOnset = self.csnd.loopGetTick() self.onset_dict[key] = recOnset self.recording( CSoundNote( onset = recOnset, @@ -86,9 +85,10 @@ class KeyboardStandAlone: duration = 100, trackId = track, decay = .1, - instrument = instrument, - instrumentFlag = instrument, - reverbSend = self.reverb)) + instrumentId = Config.INSTRUMENTS[instrument].instrumentId, + reverbSend = self.reverb, + tied = False, + mode = 'mini')) def onKeyRelease(self,widget,event): key = event.hardware_keycode @@ -102,8 +102,8 @@ class KeyboardStandAlone: csnote.tied = False csnote.mode = 'mini' self.csnd.play(csnote, 0.3) - if self.getPlayState(): - self.adjustDuration(csnote.pitch, self.onset_dict[key]) + if self.getPlayState(): + self.adjustDuration(csnote.pitch, self.onset_dict[key]) del self.key_dict[key] if self.getPlayState(): if self.onset_dict.has_key(key): diff --git a/miniTamTam/MiniSequencer.py b/miniTamTam/MiniSequencer.py new file mode 100644 index 0000000..61dafcd --- /dev/null +++ b/miniTamTam/MiniSequencer.py @@ -0,0 +1,105 @@ +import pygtk +pygtk.require( '2.0' ) +import gtk +import gobject +import time +import Config +from Util.CSoundNote import CSoundNote +from Util.CSoundClient import new_csound_client +from Util.NoteDB import Note + +class MiniSequencer: + def __init__( self, recordButtonState ): + self.notesList = [] + self.sequencer = [] + self.pitchs = [] + self.beat = 4 + self.tempo = Config.PLAYER_TEMPO + self.tickDuration = 60. / self.tempo / 12. + self.tick = 15 + self.id = 1000 + self.csnd = new_csound_client() + self.startLooking = 0 + self.recordState = 0 + self.recordButtonState = recordButtonState + self.playbackTimeout = None + self.playState = 0 + + def setTempo( self, tempo ): + self.tempo = tempo + self.tickDuration = 60. / self.tempo / 12. + gobject.source_remove( self.playBackTimeout ) + self.playState = 0 + + def handleRecordButton( self, widget, event ): + if not self.startLooking: + if 1: #widget.get_active() == True: + self.beats = [i*4 for i in range(self.beat)] + self.upBeats = [i+2 for i in self.beats] + self.realTick = [i for i in range(self.beat*4)] + if event.button == 1: + for n in self.notesList: + self.csnd.loopDelete(n) + self.notesList = [] + self.startLooking = 1 + self.startPlayback() + + def getPlayState( self ): + return self.playState + + def startPlayback( self ): + if not self.playState: + self.playbackTimeout = gobject.timeout_add( int(60000/self.tempo/12), self.handleClock ) + self.handleClock() + self.playState = 1 + + def stopPlayback( self ): + if self.playbackTimeout != None: + gobject.source_remove( self.playbackTimeout ) + self.playbackTimeout = None + self.playState = 0 + + def recording( self, note ): + if self.recordState: + self.pitchs.append( note.pitch ) + self.sequencer.append( note ) + + def adjustDuration( self, pitch, onset ): + if pitch in self.pitchs: + offset = self.csnd.loopGetTick() + for note in self.sequencer: + if note.pitch == pitch and note.onset == onset: + if offset > note.onset: + note.duration = ( offset - note.onset ) + 6 + else: + note.duration = ( (offset+(self.beat*Config.TICKS_PER_BEAT)) - note.onset ) + 6 + + n = Note(0, note.trackId, self.id, note) + self.notesList.append(n) + self.id = self.id + 1 + self.csnd.loopPlay(n,1) #add as active + + self.pitchs.remove( pitch ) + + def handleClock( self ): + t = self.csnd.loopGetTick() / 3 + if self.tick != t: + self.tick = t + if self.startLooking: + if self.tick in self.beats: + self.recordButtonState(True) + if self.tick in self.upBeats: + self.recordButtonState(False) + if self.tick == 0: + self.sequencer = [] + self.pitchs = [] + self.recordState = 1 + self.startLooking = 0 + + if self.tick >= (4 * self.beat - 1): + if self.recordState: + self.recordState = 0 + self.recordButtonState(False) + + return True + diff --git a/miniTamTam/miniTamTamMain.py b/miniTamTam/miniTamTamMain.py index e12338c..6b4afab 100644 --- a/miniTamTam/miniTamTamMain.py +++ b/miniTamTam/miniTamTamMain.py @@ -16,7 +16,7 @@ from Util.NoteDB import Note from Util.CSoundClient import new_csound_client from KeyboardStandAlone import KeyboardStandAlone -from RythmPlayer import RythmPlayer +from MiniSequencer import MiniSequencer from RythmGenerator import * from SynthLab.SynthLabWindow import SynthLabWindow from Util.Trackpad import Trackpad @@ -42,7 +42,7 @@ class miniTamTamMain(SubActivity): self.beat = 4 self.tempo = Config.PLAYER_TEMPO self.rythmInstrument = 'drum1kit' - self.rythmPlayer = RythmPlayer(self.recordStateButton) + self.sequencer= MiniSequencer(self.recordStateButton) self.regenerate() self.csnd.loopSetTempo(self.tempo) self.noteList = [] @@ -53,7 +53,7 @@ class miniTamTamMain(SubActivity): self.csnd.setTrackVolume( 100, i ) self.csnd.setMasterVolume(self.volume) - self.rythmPlayer.beat = self.beat + self.sequencer.beat = self.beat self.tooltips = gtk.Tooltips() @@ -196,7 +196,7 @@ class miniTamTamMain(SubActivity): #Transport Button Box self.seqRecordButton = ImageToggleButton(Config.IMAGE_ROOT + 'record2.png', Config.IMAGE_ROOT + 'record2sel.png') - self.seqRecordButton.connect('clicked', self.rythmPlayer.handleRecordButton ) + self.seqRecordButton.connect('button-press-event', self.sequencer.handleRecordButton ) self.playStopButton = ImageToggleButton(Config.IMAGE_ROOT + 'miniplay.png', Config.IMAGE_ROOT + 'stop.png') self.playStopButton.connect('clicked' , self.handlePlayButton) @@ -296,13 +296,13 @@ class miniTamTamMain(SubActivity): def handleBeatSliderRelease(self, widget, event): self.beat = int(widget.get_adjustment().value) - self.rythmPlayer.beat = self.beat + self.sequencer.beat = self.beat self.regenerate() def handleTempoSliderRelease(self, widget, event): #self.tempo = int(widget.get_adjustment().value) #self.csnd.loopSetTempo(self.tempo) - self.rythmPlayer.tempo = widget.get_adjustment().value + self.sequencer.tempo = widget.get_adjustment().value pass def handleTempoSliderChange(self,adj): @@ -328,7 +328,7 @@ class miniTamTamMain(SubActivity): def handlePlayButton(self, widget, data = None): if widget.get_active() == False: - self.rythmPlayer.stopPlayback() + self.sequencer.stopPlayback() self.playbackTimeout = None self.csnd.loopPause() else: @@ -350,7 +350,7 @@ class miniTamTamMain(SubActivity): self.playStartupSound() def enableKeyboard( self ): - self.keyboardStandAlone = KeyboardStandAlone( self.rythmPlayer.recording, self.rythmPlayer.adjustDuration, self.csnd.loopGetTick, self.rythmPlayer.getPlayState ) + self.keyboardStandAlone = KeyboardStandAlone( self.sequencer.recording, self.sequencer.adjustDuration, self.csnd.loopGetTick, self.sequencer.getPlayState ) self.add_events(gtk.gdk.BUTTON_PRESS_MASK) def setInstrument( self , instrument ): -- cgit v0.9.1