Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/miniTamTam
diff options
context:
space:
mode:
authorOlipet2 <olivier.belanger@umontreal.ca>2007-03-07 11:52:41 (GMT)
committer Olipet2 <olivier.belanger@umontreal.ca>2007-03-07 11:52:41 (GMT)
commitca7cf069ee7cb1796bb199cfa8406492e609c407 (patch)
tree9b82aaf3440600b37cea55367fe1d8730064f0f2 /miniTamTam
parentb01119220d8d174b73f0f9d0d249e5f162ecda0e (diff)
loop points in edit and sequencer comes back again in mini
Diffstat (limited to 'miniTamTam')
-rw-r--r--miniTamTam/KeyboardStandAlone.py14
-rw-r--r--miniTamTam/MiniSequencer.py105
-rw-r--r--miniTamTam/miniTamTamMain.py16
3 files changed, 120 insertions, 15 deletions
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 ):