Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/miniTamTam
diff options
context:
space:
mode:
authorOli2 <olivier.belanger@umontreal.ca>2007-03-12 07:35:18 (GMT)
committer Oli2 <olivier.belanger@umontreal.ca>2007-03-12 07:35:18 (GMT)
commitb9f2160bfd40c28ee2ee7e14d3b4802cbc84f06b (patch)
tree14ee31f4009a0ff668c2038e50845ad9c9db86b6 /miniTamTam
parent9b48f6c0d50b9fa068aac9cf048968681d47d1ea (diff)
fine tunning on drums fill-in in miniTamTam
Diffstat (limited to 'miniTamTam')
-rw-r--r--miniTamTam/Fillin.py20
-rw-r--r--miniTamTam/GenRythm.py12
-rw-r--r--miniTamTam/RythmGenerator.py22
-rw-r--r--miniTamTam/miniTamTamMain.py11
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)