diff options
author | amartin <olpc@xo-05-28-21.localdomain> | 2007-08-11 12:00:48 (GMT) |
---|---|---|
committer | amartin <olpc@xo-05-28-21.localdomain> | 2007-08-11 12:00:48 (GMT) |
commit | 6be4708f0f20da7f9065e4b12aa6baaf6595296c (patch) | |
tree | 80ae450ab196c7f8d9047ec270d4f204a9285d64 /Jam/GenRythm.py | |
parent | 480d87215c6667ccf1ea837409965cd7671d3169 (diff) |
Jam intsrument picking
Diffstat (limited to 'Jam/GenRythm.py')
-rw-r--r-- | Jam/GenRythm.py | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Jam/GenRythm.py b/Jam/GenRythm.py new file mode 100644 index 0000000..d0e23e3 --- /dev/null +++ b/Jam/GenRythm.py @@ -0,0 +1,80 @@ +import random +import Config + +from Generation.GenerationConstants import GenerationConstants +from Generation.Utils import * + +class GenRythm: + def drumRythmSequence(self, instrumentName, nbeats, density, regularity ): + rythmSequence = [] + binSelection = [] + downBeats = [] + upBeats = [] + beats = [] + countDown = 0 + onsetTime = None + + if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.PUNCH: + registerDensity = 0.5 + downBeatRecurence = 4 + downBeats = [x for x in GenerationConstants.DRUM_PUNCH_ACCENTS[ nbeats ]] + for downBeat in downBeats: + upBeats.append( downBeat + Config.TICKS_PER_BEAT / 2 ) + + if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.LOW: + registerDensity =1 + downBeatRecurence = 4 + downBeats = [x for x in GenerationConstants.DRUM_LOW_ACCENTS[ nbeats ]] + for downBeat in downBeats: + upBeats.append( downBeat + Config.TICKS_PER_BEAT / 2 ) + + if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.MID: + registerDensity = .75 + downBeatRecurence = 1 + downBeats = [x for x in GenerationConstants.DRUM_MID_ACCENTS[ nbeats ]] + for downBeat in downBeats: + upBeats.append( downBeat + Config.TICKS_PER_BEAT / 4 ) + + if Config.INSTRUMENTS[instrumentName].instrumentRegister == Config.HIGH: + registerDensity = 1.5 + downBeatRecurence = 1 + downBeats = [x for x in GenerationConstants.DRUM_HIGH_ACCENTS[ nbeats ]] + for downBeat in downBeats: + upBeats.append( downBeat + Config.TICKS_PER_BEAT / 4 ) + + 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: + if binSelection.count( 0 ) < len( downBeats ): + binSelection.append( 0 ) + else: + binSelection.append( 1 ) + + countDown = binSelection.count( 1 ) + + length = len(downBeats) - 1 + for i in range( countDown ): + ran1 = random.randint(0, length) + ran2 = random.randint(0, length) + randMin = min(ran1, ran2) + onsetTime = downBeats.pop(randMin) + rythmSequence.append( onsetTime ) + length -= 1 + + length = len(upBeats) - 1 + for i in range( len( binSelection ) - countDown ): + ran1 = random.randint(0, length) + ran2 = random.randint(0, length) + randMin = min(ran1, ran2) + onsetTime = upBeats.pop(randMin) + rythmSequence.append( onsetTime ) + length -= 1 + + rythmSequence.sort() + return rythmSequence |