diff options
author | Nat <natcl@hotmail.com> | 2007-07-31 20:06:33 (GMT) |
---|---|---|
committer | Nat <natcl@hotmail.com> | 2007-07-31 20:06:33 (GMT) |
commit | 481f16539533e9322ff8c4a1a35eca79d6c4dcce (patch) | |
tree | 6c8fb54a3b762dbcf64f2e2c5b0ba030fb1e5963 | |
parent | 959e22e186ee46900a712d23abd6ffd2b1d29184 (diff) | |
parent | c2b6af23a9491f59da247f7ef1f785abbe921b37 (diff) |
Merge branch 'master' of git+ssh://natcl@dev.laptop.org/git/projects/tamtam
-rw-r--r-- | Config.py | 2 | ||||
-rw-r--r-- | Edit/MainWindow.py | 41 | ||||
-rwxr-xr-x | Generation/GenerationParametersWindow.py | 74 | ||||
-rwxr-xr-x | Generation/Generator.py | 89 | ||||
-rw-r--r-- | Resources/univorc.csd | 4 | ||||
-rw-r--r-- | Util/NoteDB.py | 8 |
6 files changed, 37 insertions, 181 deletions
@@ -487,7 +487,7 @@ ModKeys = _ModKeys() #DEFAULTS PLAYER_TEMPO = 100 PLAYER_TEMPO_LOWER = 30 -PLAYER_TEMPO_UPPER = 180 +PLAYER_TEMPO_UPPER = 160 DEFAULT_VOLUME = 50 #NUMERICAL CONSTANTS diff --git a/Edit/MainWindow.py b/Edit/MainWindow.py index 9c268de..13eedc1 100644 --- a/Edit/MainWindow.py +++ b/Edit/MainWindow.py @@ -35,7 +35,7 @@ from Edit.Properties import Properties from Edit.TrackInterface import TrackInterface, TrackInterfaceParasite from Edit.TuneInterface import TuneInterface, TuneInterfaceParasite -from Generation.Generator import generator1, variate, GenerationParameters +from Generation.Generator import generator1, GenerationParameters Tooltips = Config.Tooltips() KEY_MAP_PIANO = Config.KEY_MAP_PIANO @@ -457,7 +457,7 @@ class MainWindow( SubActivity ): self.GUI["9drumPopup"].add( self.drumPanel ) # + generation window TP.ProfileBegin("init_GUI::generationPanel") - self.generationPanel = GenerationParametersWindow( self.generate, self.variate, self.doneGenerationPopup ) + self.generationPanel = GenerationParametersWindow( self.generate, self.doneGenerationPopup ) TP.ProfileEnd("init_GUI::generationPanel") self.GUI["9generationPopup"] = gtk.Window(gtk.WINDOW_POPUP) self.GUI["9generationPopup"].set_modal(True) @@ -717,12 +717,13 @@ class MainWindow( SubActivity ): fxPickup = [] drumsPickup = ["drum1kit", "drum2kit", "drum3kit", "drum4kit", "drum5kit"] for name in Config.INSTRUMENTS.keys(): - if Config.INSTRUMENTS[name].category == 'strings': + if Config.INSTRUMENTS[name].category == 'strings' and Config.INSTRUMENTS[name].name != 'violin': stringsPickup.append(name) - elif Config.INSTRUMENTS[name].category == 'winds': + elif Config.INSTRUMENTS[name].category == 'winds' and Config.INSTRUMENTS[name].name != 'didjeridu': windsPickup.append(name) - elif Config.INSTRUMENTS[name].category == 'keyboard' or Config.INSTRUMENTS[name].category == 'people': - keyboardPickup.append(name) + elif Config.INSTRUMENTS[name].category == 'keyboard' or Config.INSTRUMENTS[name].category == 'percussions': + if Config.INSTRUMENTS[name].name != 'zap' and Config.INSTRUMENTS[name].name != 'cling': + keyboardPickup.append(name) return [ Config.INSTRUMENTS[random.choice(stringsPickup)], Config.INSTRUMENTS[random.choice(stringsPickup)], @@ -1188,7 +1189,7 @@ class MainWindow( SubActivity ): # generation functions #----------------------------------- - def recompose( self, algo, params, genOrVar): + def recompose( self, algo, params): if self.generateMode == "track": if self.trackSelected == [ 0 for i in range(Config.NUMBER_OF_TRACKS) ]: newtracks = set(range(Config.NUMBER_OF_TRACKS)) @@ -1199,26 +1200,23 @@ class MainWindow( SubActivity ): newtracks = set(range(Config.NUMBER_OF_TRACKS)) newpages = self.tuneInterface.getSelectedIds() - if genOrVar == 0: - dict = {} - for t in newtracks: - dict[t] = {} - for p in newpages: - dict[t][p] = self.noteDB.getCSNotesByTrack( p, t ) - else: - dict = {} - for t in newtracks: - dict[t] = {} - dict[t][1] = self.noteDB.getCSNotesByTrack( 1, t ) + dict = {} + for t in newtracks: + dict[t] = {} + for p in newpages: + dict[t][p] = self.noteDB.getCSNotesByTrack( p, t ) beatsOfPages = {} for pageId in newpages: beatsOfPages[pageId] = self.noteDB.pages[pageId].beats + instruments = self.noteDB.getInstruments(newpages) + + #[ i.name for i in self.trackInstrument ], algo( params, self._data['track_volume'][:], - [ i.name for i in self.trackInstrument ], + instruments, self._data['tempo'], beatsOfPages, newtracks, @@ -1252,10 +1250,7 @@ class MainWindow( SubActivity ): self.noteDB.addNotes( stream ) def generate( self, params ): - self.recompose( generator1, params, 0) - - def variate( self, params ): - self.recompose( variate, params, 1) + self.recompose( generator1, params) #======================================================= # Clipboard Functions diff --git a/Generation/GenerationParametersWindow.py b/Generation/GenerationParametersWindow.py index ea886a3..bde409d 100755 --- a/Generation/GenerationParametersWindow.py +++ b/Generation/GenerationParametersWindow.py @@ -3,7 +3,6 @@ pygtk.require('2.0') import gtk import shelve from Generation.Generator import GenerationParameters -from Generation.Generator import VariationParameters from Generation.GenerationConstants import GenerationConstants from Util.ThemeWidgets import * import Config @@ -11,7 +10,7 @@ import Config Tooltips = Config.Tooltips() class GenerationParametersWindow( gtk.VBox ): - def __init__( self, generateFunction, variateFunction, handleCloseWindowCallback ): + def __init__( self, generateFunction, handleCloseWindowCallback ): gtk.VBox.__init__( self ) self.handleCloseWindowCallback = handleCloseWindowCallback self.tooltips = gtk.Tooltips() @@ -22,7 +21,6 @@ class GenerationParametersWindow( gtk.VBox ): self.scale = GenerationConstants.DEFAULT_SCALE self.sourceVariation = 1 self.generateFunction = generateFunction - self.variateFunction = variateFunction self.setupWindow() self.show_all() @@ -132,57 +130,6 @@ class GenerationParametersWindow( gtk.VBox ): self.pack_start(generationBox) - - # Variation Panel setup - if 0: # TEMPORARILY REMOVED DUE TO BUGS - variationBox = RoundVBox(fillcolor=Config.INST_BCK_COLOR,bordercolor=Config.PANEL_BCK_COLOR) - variationBox.set_border_width(1) - variationBox.set_radius(10) - variationSpacingBox = gtk.VBox() - - varPitchBox = gtk.HBox() - pitchSourceImg = gtk.Image() - pitchSourceImg.set_from_file(Config.IMAGE_ROOT + 'pitchOri.png') - varPitchBox.pack_start(pitchSourceImg, False, False) - arrowImg = gtk.Image() - arrowImg.set_from_file(Config.IMAGE_ROOT + 'flecheAlgo.png') - varPitchBox.pack_start(arrowImg, False, False) - - listOfPitchVar = ['copy', 'markov', 'reverse', 'sort', 'shuffle', 'invert'] - for var in listOfPitchVar: - button = ImageButton(Config.IMAGE_ROOT + var + '.png', Config.IMAGE_ROOT + var + 'Down.png', Config.IMAGE_ROOT + var + 'Over.png', backgroundFill=Config.INST_BCK_COLOR ) - button.connect('pressed', self.handlePitchVariationButton, listOfPitchVar.index(var)) - varPitchBox.pack_start(button, False, False) - - varRytBox = gtk.HBox() - rytSourceImg = gtk.Image() - rytSourceImg.set_from_file(Config.IMAGE_ROOT + 'rytOri.png') - varRytBox.pack_start(rytSourceImg, False, False) - arrowRytImg = gtk.Image() - arrowRytImg.set_from_file(Config.IMAGE_ROOT + 'flecheAlgo.png') - varRytBox.pack_start(arrowRytImg, False, False) - - listOfRytVar = ['copy', 'reverse', 'shuffle'] - for var in listOfRytVar: - button = ImageButton(Config.IMAGE_ROOT + var + '.png', Config.IMAGE_ROOT + var + 'Down.png', Config.IMAGE_ROOT + var + 'Over.png', backgroundFill=Config.INST_BCK_COLOR ) - button.connect('pressed', self.handleRythmVariationButton, listOfRytVar.index(var)) - varRytBox.pack_start(button, False, False) - - sourcePageImg = gtk.Image() - sourcePageImg.set_from_file(Config.IMAGE_ROOT + 'sourcePage.png') - varRytBox.pack_end(sourcePageImg, False, False) - egalImg = gtk.Image() - egalImg.set_from_file(Config.IMAGE_ROOT + 'egal.png') - varRytBox.pack_end(egalImg, False, False) - sourceImg = gtk.Image() - sourceImg.set_from_file(Config.IMAGE_ROOT + 'source.png') - varRytBox.pack_end(sourceImg, False, False) - - variationSpacingBox.pack_start(varPitchBox) - variationSpacingBox.pack_start(varRytBox) - variationBox.pack_start(variationSpacingBox, False, False, 5) - self.pack_start(variationBox) - # Meta Algo panel setup metaAlgoBox = RoundVBox(fillcolor=Config.INST_BCK_COLOR, bordercolor=Config.PANEL_BCK_COLOR) metaAlgoBox.set_border_width(1) @@ -354,12 +301,6 @@ class GenerationParametersWindow( gtk.VBox ): self.pattern, self.scale ) - def getVariationParameters( self ): - return VariationParameters( self.sourceVariation, - self.pitchVariation, - self.rythmVariation ) - - def cancel( self, widget, data=None ): self.handleCloseWindowCallback() @@ -367,19 +308,6 @@ class GenerationParametersWindow( gtk.VBox ): self.generateFunction( self.getGenerationParameters() ) self.handleCloseWindowCallback() - def handlePitchVariationButton( self, widget, var ): - self.pitchVariation = var - self.rythmVariation = 0 - self.variate() - - def handleRythmVariationButton( self, widget, var ): - self.rythmVariation = var - self.pitchVariation = 0 - self.variate() - - def variate( self ): - self.variateFunction( self.getVariationParameters()) - def handleMethod( self, widget, method ): if widget.get_active(): self.pattern = method diff --git a/Generation/Generator.py b/Generation/Generator.py index f893f47..8cce48d 100755 --- a/Generation/Generator.py +++ b/Generation/Generator.py @@ -38,7 +38,7 @@ class GenerationParameters: def generator1( parameters, # algorithm-specific parameters volume, # [trackId: float(volume) ] - instrument, # [trackId: instrument] + instrument, # [pageId][trackId: instrument] tempo, # integer bpm nbeats, # map [ pageId : beats ] trackIds, # list of trackIds to generate @@ -89,11 +89,11 @@ def generator1( trackNotes = trackOfNotes if drumPitch: - currentInstrument = Config.INSTRUMENTS[instrument[ trackId ]].kit[drumPitch[0]].name + currentInstrument = Config.INSTRUMENTS[instrument[pageId][trackId]].kit[drumPitch[0]].name rythmSequence = makeRythm.drumRythmSequence(parameters, currentInstrument, barLength) pitchSequence = makePitch.drumPitchSequence(len(rythmSequence), parameters, drumPitch, table_pitch ) else: - currentInstrument = instrument[ trackId ] + currentInstrument = instrument[pageId][trackId] rythmSequence = makeRythm.celluleRythmSequence(parameters, barLength, currentInstrument) pitchSequence = makePitch.drunkPitchSequence(len(rythmSequence),parameters, table_pitch) makePitch.pitchMethod.__init__(5, 12) @@ -105,7 +105,7 @@ def generator1( rand = random.random append = trackNotes.append pan = GenerationConstants.DEFAULT_PAN - instrument_id = Config.INSTRUMENTS[instrument[trackId]].instrumentId + instrument_id = Config.INSTRUMENTS[instrument[pageId][trackId]].instrumentId for i in numOfNotes: if drumPitch: if ( rand() * fillDrum ) > ( parameters.silence * .5 ): @@ -131,7 +131,7 @@ def generator1( table_pitch = GenerationConstants.SCALES[parameters.scale] for trackId in trackIds: - if instrument[ trackId ][0:4] == 'drum': + if trackId == 4: #instrument[pageId][trackId][0:4] == 'drum': if parameters.rythmRegularity > 0.75: streamOfPitch = GenerationConstants.DRUM_COMPLEXITY1 elif parameters.rythmRegularity > 0.5: @@ -147,7 +147,7 @@ def generator1( trackOfNotes = [] pageCycle = selectedPageCount % 4 # this should be fix in the meta algo - if instrument[ trackId ][0:4] == 'drum': + if instrument[pageId][trackId][0:4] == 'drum': if pageCycle in [1,2] and nbeats[pageId] == nbeats[lastPageId]: trackDictionary[trackId][pageId] = [] for n in trackDictionary[trackId][lastPageId]: @@ -177,80 +177,3 @@ def generator1( trackDictionary[trackId][pageId].append(n.clone()) selectedPageCount += 1 lastPageId = pageId - -class VariationParameters: - def __init__( self, sourceVariation, pitchVariation = 0, rythmVariation = 0 ): - self.sourceVariation = sourceVariation - self.pitchVariation = pitchVariation - self.rythmVariation = rythmVariation - - -def variate( - parameters, # algorithm-specific parameters - volume, # [trackId: float(volume) ] - instrument, # [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 ] ] - ): - - pitchMarkov = PitchMarkov() - pitchReverse = PitchReverse() - pitchSort = PitchSort() - pitchShuffle = PitchShuffle() - - makePitch = GenerationPitch() - makeHarmonicSequence = Drunk.Drunk(0, 7 ) - rythmShuffle = RythmShuffle( ) - rythmReverse = RythmReverse( ) - - def pageVariate( parameters, trackId, pageId ): - tempTrackNotes = [] - trackNotes = [] - for note in trackDictionary[ trackId ][ parameters.sourceVariation ]: - tempTrackNotes.append( note.clone() ) - - if parameters.rythmVariation == 0: - for note in tempTrackNotes: - trackNotes.append( note.clone() ) - if parameters.rythmVariation == 1: - for note in rythmReverse.getNewList( tempTrackNotes, nbeats[ pageId ] ): - trackNotes.append( note.clone() ) - if parameters.rythmVariation == 2: - for note in rythmShuffle.getNewList( tempTrackNotes , nbeats[ pageId ] ): - trackNotes.append( note.clone() ) - - #del trackDictionary[ trackId ][ pageId ] - trackDictionary[ trackId ][ pageId ] = trackNotes - - tempTrackNotes = [] - trackNotes = [] - for note in trackDictionary[ trackId ][ parameters.sourceVariation ]: - tempTrackNotes.append( note.clone() ) - - if parameters.pitchVariation == 0: - for note in tempTrackNotes: - trackNotes.append( note.clone() ) - elif parameters.pitchVariation == 1: - for note in pitchMarkov.getNewList( tempTrackNotes, 1 ): - trackNotes.append( note.clone() ) - elif parameters.pitchVariation == 2: - for note in pitchReverse.reorderPitch( tempTrackNotes ): - trackNotes.append( note.clone() ) - elif parameters.pitchVariation == 3: - for note in pitchSort.reorderPitch( tempTrackNotes ): - trackNotes.append( note.clone() ) - elif parameters.pitchVariation == 4: - for note in pitchShuffle.reorderPitch( tempTrackNotes ): - trackNotes.append( note.clone() ) - - #del trackDictionary[ trackId ][ pageId ] - trackDictionary[ trackId ][ pageId ] = trackNotes - - for trackId in trackIds: - for pageId in pageIds: - pageVariate( parameters, trackId, pageId ) - - diff --git a/Resources/univorc.csd b/Resources/univorc.csd index 5c32f95..315b1f8 100644 --- a/Resources/univorc.csd +++ b/Resources/univorc.csd @@ -909,6 +909,8 @@ Soundfile player with edit's looped notes *************************/ instr 5101, 5102, 5103, 5104, 5105, 5106, 5107, 5108, 5109, 5110 +ipitch random p4*.995, p4*1.005 + iTrackId = int(p1-5101) SvolTrackName2 sprintf "trackVolume%0d", iTrackId kvol chnget SvolTrackName2 @@ -919,7 +921,7 @@ ivibRand random 4.1, 5.7 kvibrato oscil .006, ivibRand, 1 -a1 flooper2 1, p4+kvibrato, p13, p14, p15, p8, 0, 0, 0 +a1 flooper2 1, ipitch+kvibrato, p13, p14, p15, p8, 0, 0, 0 if (p11-1) != -1 then acomp = a1 diff --git a/Util/NoteDB.py b/Util/NoteDB.py index bc452da..f6ec5de 100644 --- a/Util/NoteDB.py +++ b/Util/NoteDB.py @@ -266,6 +266,14 @@ class NoteDB: val = self._readstream(stream,i) self.updatePage( page, parameter, val ) + def getInstruments(self, pages): + dict = {} + for page in pages: + list = [] + for track in range(Config.NUMBER_OF_TRACKS): + list.append(Config.INSTRUMENTSID[self.pages[page].instruments[track]].name) + dict[page] = list[:] + return dict #-- private -------------------------------------------- def _newPage( self, pid, page ): |