diff options
author | Oli2 <olivier.belanger@umontreal.ca> | 2007-03-12 07:35:18 (GMT) |
---|---|---|
committer | Oli2 <olivier.belanger@umontreal.ca> | 2007-03-12 07:35:18 (GMT) |
commit | b9f2160bfd40c28ee2ee7e14d3b4802cbc84f06b (patch) | |
tree | 14ee31f4009a0ff668c2038e50845ad9c9db86b6 /miniTamTam | |
parent | 9b48f6c0d50b9fa068aac9cf048968681d47d1ea (diff) |
fine tunning on drums fill-in in miniTamTam
Diffstat (limited to 'miniTamTam')
-rw-r--r-- | miniTamTam/Fillin.py | 20 | ||||
-rw-r--r-- | miniTamTam/GenRythm.py | 12 | ||||
-rw-r--r-- | miniTamTam/RythmGenerator.py | 22 | ||||
-rw-r--r-- | miniTamTam/miniTamTamMain.py | 11 |
4 files changed, 45 insertions, 20 deletions
diff --git a/miniTamTam/Fillin.py b/miniTamTam/Fillin.py index 2fe7578..0825d44 100644 --- a/miniTamTam/Fillin.py +++ b/miniTamTam/Fillin.py @@ -17,6 +17,8 @@ class Fillin: self.tempo = tempo self.instrument = instrument self.reverb = reverb + self.onsets = [] + self.pitchs = [] self.playBackTimeout = None self.csnd = new_csound_client() @@ -28,6 +30,9 @@ class Fillin: self.instrument = instrument def setBeats( self, nbeats ): + if self.playBackTimeout != None: + gobject.source_remove( self.playBackTimeout ) + self.nbeats = nbeats self.clear() self.reset() @@ -74,6 +79,10 @@ class Fillin: self.regenerate() return True + def unavailable( self, onsets, pitchs ): + self.onsets = onsets + self.pitchs = pitchs + def regenerate(self): def flatten(ll): rval = [] @@ -82,9 +91,10 @@ class Fillin: return rval i = 500 self.notesList= [] - for x in flatten( generator(self.instrument, self.nbeats, 0, self.reverb) ): - n = Note(0, x.trackId, i, x) - self.notesList.append(n) - i += 1 - self.csnd.loopPlay(n,1) #add as active + for x in flatten( generator(self.instrument, self.nbeats, 0.4, 0.1, self.reverb) ): + if x.onset not in self.onsets or x.pitch not in self.pitchs: + n = Note(0, x.trackId, i, x) + self.notesList.append(n) + i += 1 + self.csnd.loopPlay(n,1) #add as active diff --git a/miniTamTam/GenRythm.py b/miniTamTam/GenRythm.py index eba0eb8..97bd2c0 100644 --- a/miniTamTam/GenRythm.py +++ b/miniTamTam/GenRythm.py @@ -5,13 +5,12 @@ from Generation.GenerationConstants import GenerationConstants from Generation.Utils import * class GenRythm: - def drumRythmSequence(self, instrument, nbeats, regularity ): + def drumRythmSequence(self, instrument, nbeats, density, regularity ): rythmSequence = [] binSelection = [] downBeats = [] upBeats = [] beats = [] - density = 0.8 countDown = 0 onsetTime = None @@ -23,7 +22,7 @@ class GenRythm: upBeats.append( ( downBeat[ 0 ] + Config.TICKS_PER_BEAT , downBeat[ 1 ] ) ) if Config.INSTRUMENTS[ instrument ].instrumentRegister == Config.LOW: - registerDensity =1.5 + registerDensity =1 downBeatRecurence = 4 downBeats = GenerationConstants.DRUM_LOW_PROB[ nbeats ] for downBeat in downBeats: @@ -43,7 +42,12 @@ class GenRythm: for downBeat in downBeats: upBeats.append( ( downBeat[ 0 ] + Config.TICKS_PER_BEAT / 4 , downBeat[ 1 ] ) ) - for i in range( int( density * registerDensity * len( downBeats ) ) ): + realDensity = density * registerDensity + if realDensity > 1.: + realDensity = 1. + + list = range( int( realDensity * len( downBeats ) ) ) + for i in list: if random.random() < ( regularity * downBeatRecurence ) and binSelection.count( 1 ) < len( downBeats ): binSelection.append( 1 ) else: diff --git a/miniTamTam/RythmGenerator.py b/miniTamTam/RythmGenerator.py index b7fb21b..539274c 100644 --- a/miniTamTam/RythmGenerator.py +++ b/miniTamTam/RythmGenerator.py @@ -1,12 +1,11 @@ import random -import math import Config from Util.CSoundNote import CSoundNote from Generation.GenerationConstants import GenerationConstants from GenRythm import GenRythm -def generator( instrument, nbeats, regularity, reverbSend ): +def generator( instrument, nbeats, density, regularity, reverbSend ): makeRythm = GenRythm() @@ -22,12 +21,16 @@ def generator( instrument, nbeats, regularity, reverbSend ): def makePitchSequence(length, drumPitch): pitchSequence = [] - for i in range(length): - pitchSequence.append(drumPitch[ random.randint( 0, ( len( drumPitch ) - 1 ) ) ] ) + append = pitchSequence.append + list = range(length) + max = len(drumPitch) - 1 + for i in list: + append(drumPitch[ random.randint( 0, max ) ] ) return pitchSequence def makeGainSequence( onsetList ): gainSequence = [] + append = gainSequence.append for onset in onsetList: if onset == 0: gain = random.uniform(GenerationConstants.GAIN_MID_MAX_BOUNDARY, GenerationConstants.GAIN_MAX_BOUNDARY) @@ -35,7 +38,7 @@ def generator( instrument, nbeats, regularity, reverbSend ): gain = random.uniform(GenerationConstants.GAIN_MID_MIN_BOUNDARY, GenerationConstants.GAIN_MID_MAX_BOUNDARY) else: gain = random.uniform(GenerationConstants.GAIN_MIN_BOUNDARY, GenerationConstants.GAIN_MID_MIN_BOUNDARY) - gainSequence.append(gain*2) + append(gain) return gainSequence def pageGenerate( regularity, drumPitch ): @@ -44,16 +47,19 @@ def generator( instrument, nbeats, regularity, reverbSend ): if Config.INSTRUMENTS[instrument].kit != None: currentInstrument = Config.INSTRUMENTS[instrument].kit[drumPitch[0]].name - rythmSequence = makeRythm.drumRythmSequence(currentInstrument, nbeats, regularity) + rythmSequence = makeRythm.drumRythmSequence(currentInstrument, nbeats, density, regularity) pitchSequence = makePitchSequence(len(rythmSequence), drumPitch ) gainSequence = makeGainSequence(rythmSequence) trackNotes = [] - for i in range(len(rythmSequence)): + list = range(len(rythmSequence)) + for i in list: trackNotes.append( CSoundNote( rythmSequence[i], pitchSequence[i], gainSequence[i], pan, noteDuration, trackId, - Config.INSTRUMENTS[instrument].instrumentId, attack, decay, reverbSend, filterType, filterCutoff, tied, mode ) ) + Config.INSTRUMENTS[instrument].instrumentId, attack, + decay, reverbSend, filterType, filterCutoff, tied, mode)) return trackNotes + ################################################################################## # begin generate() if regularity > 0.75: diff --git a/miniTamTam/miniTamTamMain.py b/miniTamTam/miniTamTamMain.py index 64ed76c..82dce2a 100644 --- a/miniTamTam/miniTamTamMain.py +++ b/miniTamTam/miniTamTamMain.py @@ -42,8 +42,8 @@ class miniTamTamMain(SubActivity): self.reverb = 0. self.tempo = Config.PLAYER_TEMPO self.rythmInstrument = 'drum1kit' - self.regenerate() self.drumFillin = Fillin( self.beat, self.tempo, self.rythmInstrument, self.reverb ) + self.regenerate() self.sequencer= MiniSequencer(self.recordStateButton) self.csnd.loopSetTempo(self.tempo) self.noteList = [] @@ -270,16 +270,21 @@ class miniTamTamMain(SubActivity): for l in ll: rval += l return rval + noteOnsets = [] + notePitchs = [] i = 0 self.noteList= [] self.csnd.loopClear() - for x in flatten( generator(self.rythmInstrument, self.beat, self.regularity, self.reverb) ): + for x in flatten( generator(self.rythmInstrument, self.beat, 0.8, self.regularity, self.reverb) ): + noteOnsets.append(x.onset) + notePitchs.append(x.pitch) n = Note(0, x.trackId, i, x) self.noteList.append( (x.onset, n) ) i = i + 1 self.csnd.loopPlay(n,1) #add as active self.csnd.loopSetNumTicks( self.beat * Config.TICKS_PER_BEAT) - + self.drumFillin.unavailable( noteOnsets, notePitchs ) + def handleClose(self,widget): if self.playStopButton.get_active() == True: self.playStopButton.set_active(False) |