Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOli <olivier.belanger@umontreal.ca>2007-08-24 09:01:41 (GMT)
committer Oli <olivier.belanger@umontreal.ca>2007-08-24 09:01:41 (GMT)
commit23166ec5ffeb26d0a4467e72a9f4dabea67b0133 (patch)
treec6e64209aa2816afb8a86c52ab1412dc5e451b98
parente90310bd612fc920ffb2121b05b69342edc6e270 (diff)
META ALGO: tune form structure
-rw-r--r--Edit/MainWindow.py76
-rwxr-xr-xGeneration/Generator.py18
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