Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNat <natcl@hotmail.com>2007-07-31 20:06:33 (GMT)
committer Nat <natcl@hotmail.com>2007-07-31 20:06:33 (GMT)
commit481f16539533e9322ff8c4a1a35eca79d6c4dcce (patch)
tree6c8fb54a3b762dbcf64f2e2c5b0ba030fb1e5963
parent959e22e186ee46900a712d23abd6ffd2b1d29184 (diff)
parentc2b6af23a9491f59da247f7ef1f785abbe921b37 (diff)
Merge branch 'master' of git+ssh://natcl@dev.laptop.org/git/projects/tamtam
-rw-r--r--Config.py2
-rw-r--r--Edit/MainWindow.py41
-rwxr-xr-xGeneration/GenerationParametersWindow.py74
-rwxr-xr-xGeneration/Generator.py89
-rw-r--r--Resources/univorc.csd4
-rw-r--r--Util/NoteDB.py8
6 files changed, 37 insertions, 181 deletions
diff --git a/Config.py b/Config.py
index f4896dc..fef09ee 100644
--- a/Config.py
+++ b/Config.py
@@ -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 ):