diff options
author | Oli <olivier.belanger@umontreal.ca> | 2007-08-24 09:01:41 (GMT) |
---|---|---|
committer | Oli <olivier.belanger@umontreal.ca> | 2007-08-24 09:01:41 (GMT) |
commit | 23166ec5ffeb26d0a4467e72a9f4dabea67b0133 (patch) | |
tree | c6e64209aa2816afb8a86c52ab1412dc5e451b98 | |
parent | e90310bd612fc920ffb2121b05b69342edc6e270 (diff) |
META ALGO: tune form structure
-rw-r--r-- | Edit/MainWindow.py | 76 | ||||
-rwxr-xr-x | Generation/Generator.py | 18 |
2 files changed, 77 insertions, 17 deletions
diff --git a/Edit/MainWindow.py b/Edit/MainWindow.py index 2d0db40..8779f8d 100644 --- a/Edit/MainWindow.py +++ b/Edit/MainWindow.py @@ -56,6 +56,9 @@ class MainWindow( SubActivity ): self.scale = GenerationConstants.DEFAULT_SCALE + # META ALGO: [section, variation or not, nPages] A B A C + self.tuneForm = [[0, False, 4], [1, False, 4], [0, True, 4], [2, False, 2]] + def init_data( ): TP.ProfileBegin("init_data") self._data = {} @@ -401,9 +404,9 @@ class MainWindow( SubActivity ): def createNewTune( self, widget, data=None ): if random.choice([0,1]): - self.createNewTune1() + self.createNewTune3() else: - self.createNewTune2() + self.createNewTune3() def createNewTune1( self ): @@ -559,6 +562,67 @@ class MainWindow( SubActivity ): self.tuneInterface.selectPages( self.noteDB.getTune() ) self.displayPage( self.noteDB.getTune()[0] ) + def createNewTune3( self ): + + if self.playing == True: + self.handleStop() + + self.tuneInterface.selectPages( self.noteDB.getTune() ) + + beats = random.randint(3,8) + stream = [] + for page in self.noteDB.getTune(): + stream += [ page, beats ] + if len(stream): + self.noteDB.updatePages( [ PARAMETER.PAGE_BEATS, len(stream)//2 ] + stream ) + + orch = self.newOrchestra() + + instrumentsIds = [] + for inst in orch: + instrumentsIds.append(inst.instrumentId) + + self.pageDelete( -1, instruments = instrumentsIds ) + + initTempo = random.randint(60, 132) + self._data['tempo'] = initTempo + + formsUsed = [] + for section in self.tuneForm: + if section[0] not in formsUsed: + param = self.chooseGenParams() + self.tuneInterface.selectPages( self.noteDB.getTune() ) + if not formsUsed: + for i in range(section[2]-1): + self.pageAdd(instruments = instrumentsIds) + else: + for i in range(section[2]): + self.pageAdd(instruments = instrumentsIds) + formsUsed.append(section[0]) + + self.tuneInterface.selectPages( self.noteDB.getTune()[-section[2]:] ) + self.generateMode = 'page' + self.generate( GenerationParameters( density = param[0], rythmRegularity = param[1], step = param[2], pitchRegularity = param[3], articule = param[4], silence = param[5], pattern = param[6], scale = param[7]), section[2] ) + else: + pageOffset = 0 + pageIds = [] + firstPos = [i[0] for i in self.tuneForm].index(section[0]) + if firstPos == 0: + pageOffset = 0 + else: + for i in range(firstPos): + pageOffset += self.tuneForm[i][2] + for i in range(section[2]): + pageIds.append(self.noteDB.getTune()[pageOffset + i]) + after = self.noteDB.getTune()[-1] + self.displayPage( self.noteDB.getTune()[pageOffset] ) + self.tuneInterface.selectPages(self.noteDB.getTune()) + self.pageDuplicate(-1, pageIds) + + self.tuneInterface.selectPages( self.noteDB.getTune() ) + self.displayPage( self.noteDB.getTune()[0] ) + + def newOrchestra(self): stringsPickup = [] windsPickup = [] @@ -1047,7 +1111,7 @@ class MainWindow( SubActivity ): # generation functions #----------------------------------- - def recompose( self, algo, params): + def recompose( self, algo, params, nPagesCycle = 4): if self.generateMode == "track": if self.trackSelected == [ 0 for i in range(Config.NUMBER_OF_TRACKS) ]: newtracks = set(range(Config.NUMBER_OF_TRACKS)) @@ -1079,7 +1143,7 @@ class MainWindow( SubActivity ): beatsOfPages, newtracks, newpages, - dict) + dict, nPagesCycle) # filter & fix input ...WTF!? for track in dict: @@ -1107,8 +1171,8 @@ class MainWindow( SubActivity ): stream += [-1] self.noteDB.addNotes( stream ) - def generate( self, params ): - self.recompose( generator1, params) + def generate( self, params, nPagesCycle = 4 ): + self.recompose( generator1, params, nPagesCycle) #======================================================= # Clipboard Functions diff --git a/Generation/Generator.py b/Generation/Generator.py index f12ef26..5fc2f71 100755 --- a/Generation/Generator.py +++ b/Generation/Generator.py @@ -41,7 +41,8 @@ def generator1( nbeats, # map [ pageId : beats ] trackIds, # list of trackIds to generate pageIds, # list of pageIds to generate - trackDictionary # map [ trackId : [ pageId : events ] ] + trackDictionary, # map [ trackId : [ pageId : events ] ] + nPagesCycle = 4 # META ALGO number of pages in a section ): makeRythm = GenerationRythm() @@ -81,7 +82,7 @@ def generator1( append( ( barLength - onsetList[0] ) * proba( table_duration )) return durationSequence - def pageGenerate( parameters, trackId, pageId, trackOfNotes, drumPitch = None ): + def pageGenerate(parameters, trackId, pageId, trackOfNotes, drumPitch = None): trackNotes = trackOfNotes @@ -138,14 +139,14 @@ def generator1( for pageId in pageIds: barLength = Config.TICKS_PER_BEAT * nbeats[ pageId ] trackOfNotes = [] - pageCycle = selectedPageCount % 4 # this should be fix in the meta algo + pageCycle = selectedPageCount % nPagesCycle if instrument[pageId][trackId][0:4] == 'drum': - if pageCycle in [1,2] and nbeats[pageId] == nbeats[lastPageId]: + 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 == 3 and nbeats[pageId] == nbeats[lastPageId]: + 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] @@ -162,11 +163,6 @@ def generator1( pageGenerate( parameters, trackId, pageId, trackOfNotes, drumPitch ) else: - if (selectedPageCount % 2) == 0 or random.randint(0, 5) < 2 or selectedPageCount == 0 or nbeats[pageId] != nbeats[lastPageId]: - pageGenerate( parameters, trackId, pageId, trackOfNotes, drumPitch = None ) - else: - trackDictionary[trackId][pageId] = [] - for n in trackDictionary[trackId][lastPageId]: - trackDictionary[trackId][pageId].append(n.clone()) + pageGenerate( parameters, trackId, pageId, trackOfNotes, drumPitch = None ) selectedPageCount += 1 lastPageId = pageId |