Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/TamTamJam.activity/common/Generation/Generator.py
diff options
context:
space:
mode:
Diffstat (limited to 'TamTamJam.activity/common/Generation/Generator.py')
-rw-r--r--TamTamJam.activity/common/Generation/Generator.py174
1 files changed, 0 insertions, 174 deletions
diff --git a/TamTamJam.activity/common/Generation/Generator.py b/TamTamJam.activity/common/Generation/Generator.py
deleted file mode 100644
index ff05462..0000000
--- a/TamTamJam.activity/common/Generation/Generator.py
+++ /dev/null
@@ -1,174 +0,0 @@
-import random
-import math
-
-import Utils
-import Drunk
-
-import common.Util.InstrumentDB as InstrumentDB
-import common.Config as Config
-from common.Util.CSoundNote import CSoundNote
-from common.Generation.GenerationConstants import GenerationConstants
-from common.Generation.GenerationRythm import GenerationRythm
-from common.Generation.GenerationPitch import GenerationPitch
-
-instrumentDB = InstrumentDB.getRef()
-
-class GenerationParameters:
- def __init__( self,
- density = GenerationConstants.DEFAULT_DENSITY,
- rythmRegularity = GenerationConstants.DEFAULT_RYTHM_REGULARITY,
- step = GenerationConstants.DEFAULT_STEP,
- pitchRegularity = GenerationConstants.DEFAULT_PITCH_REGULARITY,
- articule = GenerationConstants.DEFAULT_DURATION,
- silence = GenerationConstants.DEFAULT_SILENCE,
- rythmMethod = GenerationConstants.DEFAULT_RYTHM_METHOD,
- pitchMethod = GenerationConstants.DEFAULT_PITCH_METHOD,
- pattern = GenerationConstants.DEFAULT_PATTERN,
- scale = GenerationConstants.DEFAULT_SCALE ):
- self.density = density
- self.rythmRegularity = rythmRegularity
- self.step = step
- self.pitchRegularity = pitchRegularity
- self.articule = articule
- self.silence = silence
- self.rythmMethod = rythmMethod
- self.pitchMethod = pitchMethod
- self.pattern = pattern
- self.scale = scale
-
-def generator1(
- parameters, # algorithm-specific parameters
- volume, # [trackId: float(volume) ]
- instrument, # [pageId][trackId: instrument]
- tempo, # integer bpm
- nbeats, # map [ pageId : beats ]
- trackIds, # list of trackIds to generate
- pageIds, # list of pageIds to generate
- trackDictionary, # map [ trackId : [ pageId : events ] ]
- nPagesCycle = 4 # META ALGO number of pages in a section
- ):
-
- makeRythm = GenerationRythm()
- makePitch = GenerationPitch()
-
- def makeGainSequence( onsetList ):
- gainSequence = []
- append = gainSequence.append
- rand = random.uniform
- max = GenerationConstants.GAIN_MAX_BOUNDARY
- midMax = GenerationConstants.GAIN_MID_MAX_BOUNDARY
- midMin = GenerationConstants.GAIN_MID_MIN_BOUNDARY
- min = GenerationConstants.GAIN_MIN_BOUNDARY
- for onset in onsetList:
- if onset == 0:
- append(rand(midMax, max))
- elif ( onset % Config.TICKS_PER_BEAT) == 0:
- append(rand(midMin, midMax))
- else:
- append(rand(min, midMin))
- return gainSequence
-
- def makeDurationSequence( onsetList, parameters, table_duration, barLength, currentInstrument ):
- durationSequence = []
- if instrumentDB.instNamed[currentInstrument].name[0:4] == 'drum':
- duration = GenerationConstants.DOUBLE_TICK_DUR / 2
- durationSequence = [duration] * len(onsetList)
- return durationSequence
-
- append = durationSequence.append
- proba = Utils.prob2
- if len( onsetList ) > 1:
- for i in range(len(onsetList) - 1):
- append((onsetList[i+1] - onsetList[i]) * proba( table_duration ))
- append(( barLength - onsetList[-1]) * proba( table_duration ))
- elif len( onsetList ) == 1:
- append( ( barLength - onsetList[0] ) * proba( table_duration ))
- return durationSequence
-
- def pageGenerate(parameters, trackId, pageId, trackOfNotes, drumPitch = None):
-
- trackNotes = trackOfNotes
-
- if drumPitch:
- currentInstrument = instrumentDB.instNamed[instrument[pageId][trackId]].kit[drumPitch[0]]
- rythmSequence = makeRythm.drumRythmSequence(parameters, currentInstrument, barLength)
- pitchSequence = makePitch.drumPitchSequence(len(rythmSequence), parameters, drumPitch, table_pitch )
- else:
- currentInstrument = instrument[pageId][trackId]
- rythmSequence = makeRythm.celluleRythmSequence(parameters, barLength, trackId, currentInstrument)
- pitchSequence = makePitch.drunkPitchSequence(len(rythmSequence),parameters, table_pitch, trackId)
-
- gainSequence = makeGainSequence(rythmSequence)
- durationSequence = makeDurationSequence(rythmSequence, parameters, table_duration, barLength, currentInstrument)
-
- numOfNotes = range(len(rythmSequence))
- rand = random.random
- append = trackNotes.append
- pan = GenerationConstants.DEFAULT_PAN
- instrument_id = instrumentDB.instNamed[instrument[pageId][trackId]].instrumentId
- for i in numOfNotes:
- if drumPitch:
- if ( rand() * fillDrum ) > ( parameters.silence[0] * .5 ):
- if fillDrum != 1:
- if rythmSequence[i] not in trackOnsets or pitchSequence[i] not in trackPitchs:
- append( CSoundNote( rythmSequence[i], pitchSequence[i], gainSequence[i], pan, durationSequence[i], trackId, instrument_id, 0.002, 0.098, 0.1, 0, 1000, False, 'edit' ) )
- else:
- append( CSoundNote( rythmSequence[i], pitchSequence[i], gainSequence[i], pan, durationSequence[i], trackId, instrument_id, 0.002, 0.098, 0.1, 0, 1000, False, 'edit' ) )
- else:
- if rand() > parameters.silence[trackId]:
- append( CSoundNote( rythmSequence[i], pitchSequence[i], gainSequence[i], pan, durationSequence[i], trackId, instrument_id, 0.002, 0.1, 0.1, 0, 1000, False, 'edit' ) )
-
- trackDictionary[ trackId ][ pageId ] = trackNotes
-
-##################################################################################
- # begin generate()
-
- table_pitch = GenerationConstants.SCALES[parameters.scale]
-
- for trackId in trackIds:
- if trackId == 4: # drum index
- table_duration = Utils.scale(parameters.articule[0], GenerationConstants.ARTICULATION_SCALE_MIN_MAPPING, GenerationConstants.ARTICULATION_SCALE_MAX_MAPPING, GenerationConstants.ARTICULATION_SCALE_STEPS)
- if parameters.rythmRegularity > 0.75:
- streamOfPitch = GenerationConstants.DRUM_COMPLEXITY1
- elif parameters.rythmRegularity > 0.5:
- streamOfPitch = GenerationConstants.DRUM_COMPLEXITY2
- elif parameters.rythmRegularity > 0.25:
- streamOfPitch = GenerationConstants.DRUM_COMPLEXITY3
- else:
- streamOfPitch = GenerationConstants.DRUM_COMPLEXITY4
- else:
- table_duration = Utils.scale(parameters.articule[trackId], GenerationConstants.ARTICULATION_SCALE_MIN_MAPPING, GenerationConstants.ARTICULATION_SCALE_MAX_MAPPING, GenerationConstants.ARTICULATION_SCALE_STEPS)
-
- selectedPageCount = 0
- lastPageId = 0
- for pageId in pageIds:
- barLength = Config.TICKS_PER_BEAT * nbeats[ pageId ]
- trackOfNotes = []
- pageCycle = selectedPageCount % nPagesCycle
-
- #if instrument[pageId][trackId][0:4] == 'drum':
- if trackId == 4:
- if pageCycle not in [0,nPagesCycle-1] and nbeats[pageId] == nbeats[lastPageId]:
- trackDictionary[trackId][pageId] = []
- for n in trackDictionary[trackId][lastPageId]:
- trackDictionary[trackId][pageId].append(n.clone())
- elif pageCycle == (nPagesCycle-1) and nbeats[pageId] == nbeats[lastPageId]:
- for n in trackDictionary[trackId][lastPageId]:
- trackOfNotes.append(n.clone())
- trackOnsets = [n.onset for n in trackOfNotes]
- trackPitchs = [n.pitch for n in trackOfNotes]
- fillDrum = .5
- rythmRegTemp = parameters.rythmRegularity[0]
- parameters.rythmRegularity[0] = 0.5
- for drumPitch in GenerationConstants.DRUM_COMPLEXITY4:
- pageGenerate( parameters, trackId, pageId, trackOfNotes, drumPitch )
- parameters.rythmRegularity[0] = rythmRegTemp
- else:
- fillDrum = 1
- for drumPitch in streamOfPitch:
- pageGenerate( parameters, trackId, pageId, trackOfNotes, drumPitch )
-
- else:
- pageGenerate( parameters, trackId, pageId, trackOfNotes, drumPitch = None )
- selectedPageCount += 1
- lastPageId = pageId