Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/Generation/GenerationParametersWindow.py
diff options
context:
space:
mode:
Diffstat (limited to 'Generation/GenerationParametersWindow.py')
-rwxr-xr-xGeneration/GenerationParametersWindow.py206
1 files changed, 206 insertions, 0 deletions
diff --git a/Generation/GenerationParametersWindow.py b/Generation/GenerationParametersWindow.py
new file mode 100755
index 0000000..5964566
--- /dev/null
+++ b/Generation/GenerationParametersWindow.py
@@ -0,0 +1,206 @@
+import pygtk
+pygtk.require('2.0')
+import gtk
+
+from Generation.Generator import GenerationParameters
+from Generation.Generator import VariationParameters
+from Generation.GenerationConstants import GenerationConstants
+
+class GenerationParametersWindow( gtk.Window ):
+ def __init__( self, generateFunction, variateFunction, handleCloseWindowCallback ):
+ gtk.Window.__init__( self, gtk.WINDOW_TOPLEVEL )
+ self.rythmMethod = GenerationConstants.DEFAULT_RYTHM_METHOD
+ self.pitchMethod = GenerationConstants.DEFAULT_PITCH_METHOD
+ self.pattern = GenerationConstants.DEFAULT_PATTERN
+ self.scale = GenerationConstants.DEFAULT_SCALE
+ self.pitchVariation = GenerationConstants.DEFAULT_PITCH_VARIATION
+ self.rythmVariation = GenerationConstants.DEFAULT_RYTHM_VARIATION
+ self.generateFunction = generateFunction
+ self.variateFunction = variateFunction
+ self.sourceVariation = 0
+ self.setupWindow( handleCloseWindowCallback )
+
+ def setupWindow( self, handleCloseWindowCallback ):
+ self.set_position( gtk.WIN_POS_CENTER_ON_PARENT )
+ self.set_title("Algorithmic generator")
+ self.set_border_width(5)
+ self.connect( "delete_event", handleCloseWindowCallback )
+ self.mainBox = gtk.VBox(False, 5)
+ self.generationBox = gtk.VBox(False, 2)
+ self.variationBox = gtk.VBox(False, 2)
+ self.sliderBox = gtk.VBox(False, 2)
+ self.labelRythmMethodBox = gtk.VBox(False, 2)
+ self.rythmMethodBox = gtk.HBox(False, 2)
+ self.labelSourceVariationBox = gtk.VBox(False, 2)
+ self.sourceVariationBox = gtk.HBox(False, 2)
+ self.labelPitchMethodBox = gtk.VBox(False, 2)
+ self.pitchMethodBox = gtk.HBox(False, 2)
+ self.labelPatternBox = gtk.VBox(False, 2)
+ self.patternBox = gtk.HBox(False, 2)
+ self.labelScaleBox = gtk.VBox(False, 2)
+ self.scaleBox = gtk.HBox(False, 2)
+ self.buttonBox = gtk.HBox(False, 2)
+
+ self.labelPitchVariationBox = gtk.VBox(False, 2)
+ self.pitchVariationBox = gtk.HBox(False, 2)
+ self.labelRythmVariationBox = gtk.VBox(False, 2)
+ self.rythmVariationBox = gtk.HBox(False, 2)
+
+ self.generationBox.pack_start( gtk.Label( "GENERATION" ), False, False, 0 )
+ # Create parameters sliders box
+ #TODO: remove magic numbers
+ self.densityAdjust = self.initSlider("density", GenerationConstants.DEFAULT_DENSITY, 0, 1, 0.01, 0, 2)
+ self.rythmRegularityAdjust = self.initSlider("rythm regularity", GenerationConstants.DEFAULT_RYTHM_REGULARITY, 0, 1, 0.01, 0, 2)
+ self.pitchStepAdjust = self.initSlider("pitch max step", GenerationConstants.DEFAULT_STEP, -10, 10, 1, 2, 0)
+ self.pitchRegularityAdjust = self.initSlider("pitch regularity", GenerationConstants.DEFAULT_PITCH_REGULARITY, 0, 1, 0.01, 0, 2)
+ self.articulationAdjust = self.initSlider("stacato / legato", GenerationConstants.DEFAULT_ARTICULE, 0, 1, 0.01, 0, 2)
+ self.generationBox.pack_start(self.sliderBox, 5)
+
+ # Create melodic rythm methods box
+ self.labelRythmMethodBox.pack_start(gtk.Label("melodic rythm generation method"), False, False, 0)
+ self.generationBox.pack_start(self.labelRythmMethodBox, 3)
+ rythmMethodType = ['Cellule', 'Xnoise' ]
+ self.initRadioButton( rythmMethodType, self.rythmMethodCallback, self.rythmMethodBox )
+ self.generationBox.pack_start(self.rythmMethodBox, 3)
+
+ # Create pitch generation methods box
+ self.labelPitchMethodBox.pack_start(gtk.Label("pitch generation method"), False, False, 0)
+ self.generationBox.pack_start(self.labelPitchMethodBox, 3)
+ pitchMethodType = [ 'melodic', 'harmonic' ]
+ self.initRadioButton( pitchMethodType, self.pitchMethodCallback, self.pitchMethodBox )
+ self.generationBox.pack_start(self.pitchMethodBox, 3)
+
+ # Create pitch patterns box
+ self.labelPatternBox.pack_start(gtk.Label("pitch pattern"), False, False, 0)
+ self.generationBox.pack_start(self.labelPatternBox, 3)
+ patternType = [ 'Drunk', 'DroneJump', 'Repeter', 'Loopseg' ]
+ self.initRadioButton( patternType, self.patternCallback, self.patternBox )
+ self.generationBox.pack_start(self.patternBox, 3)
+
+ # Create scales box
+ self.labelScaleBox.pack_start(gtk.Label("scales"), False, False, 0)
+ self.generationBox.pack_start(self.labelScaleBox, 3)
+ scalesType = [ 'Major', 'Minor H', 'Minor N', 'Phrygien' ]
+ self.initRadioButton( scalesType, self.scaleCallback, self.scaleBox )
+ self.generationBox.pack_start(self.scaleBox, 3)
+
+ # create generate button
+ generateButton = gtk.Button('Generate')
+ generateButton.connect("clicked", self.generate)
+ self.buttonBox.pack_start(generateButton)
+ self.generationBox.pack_start(self.buttonBox, 3)
+
+ # create variation box
+ self.variationBox.pack_start( gtk.Label( "VARIATION" ), False, False, 0 )
+
+ # create source variation box
+ self.labelSourceVariationBox.pack_start(gtk.Label("pages sources"), False, False, 0)
+ self.variationBox.pack_start(self.labelSourceVariationBox, 3)
+ sourceVariationType = [ 1, 2, 3, 4, 5 ]
+ self.initSourceRadioButton( sourceVariationType, self.sourceVariationCallback, self.sourceVariationBox )
+ self.variationBox.pack_start(self.sourceVariationBox, 3)
+
+ # create pitch variation box
+ self.labelPitchVariationBox.pack_start(gtk.Label("pitch variation"), False, False, 0)
+ self.variationBox.pack_start(self.labelPitchVariationBox, 3)
+ pitchVariationType = [ 'Copy', 'Markov', 'Reverse', 'Sort', 'Shuffle' ]
+ self.initRadioButton( pitchVariationType, self.pitchVariationCallback, self.pitchVariationBox )
+ self.variationBox.pack_start(self.pitchVariationBox, 3)
+
+ # create rythm variation box
+ self.labelRythmVariationBox.pack_start(gtk.Label("rythm variation"), False, False, 0)
+ self.variationBox.pack_start(self.labelRythmVariationBox, 3)
+ rythmVariationType = [ 'Copy', 'Reverse', 'Shuffle' ]
+ self.initRadioButton( rythmVariationType, self.rythmVariationCallback, self.rythmVariationBox )
+ self.variationBox.pack_start(self.rythmVariationBox, 3)
+
+ # create variate button
+ variateButton = gtk.Button('Variate')
+ variateButton.connect("clicked", self.variate)
+ self.variationBox.pack_start(variateButton, 3)
+
+ self.mainBox.pack_start(self.generationBox)
+ self.mainBox.pack_start(self.variationBox)
+
+ self.add(self.mainBox)
+
+ def getGenerationParameters( self ):
+ return GenerationParameters( self.densityAdjust.value,
+ self.rythmRegularityAdjust.value,
+ self.pitchStepAdjust.value,
+ self.pitchRegularityAdjust.value,
+ self.articulationAdjust.value,
+ self.rythmMethod,
+ self.pitchMethod,
+ self.pattern,
+ self.scale )
+
+ def generate(self, data=None):
+ self.generateFunction( self.getGenerationParameters() )
+
+ def getVariationParameters( self ):
+ return VariationParameters( self.sourceVariation,
+ self.pitchVariation,
+ self.rythmVariation )
+
+ def variate( self, data=None ):
+ self.variateFunction( self.getVariationParameters() )
+
+ def rythmMethodCallback( self, widget, rythmMethod ):
+ if widget.get_active():
+ self.rythmMethod = rythmMethod
+
+ def pitchMethodCallback( self, widget, pitchMethod ):
+ if widget.get_active():
+ self.pitchMethod = pitchMethod
+
+ def patternCallback( self, widget, pattern ):
+ if widget.get_active():
+ self.pattern = pattern
+
+ def scaleCallback( self, widget, scale ):
+ if widget.get_active():
+ self.scale = scale
+
+ def sourceVariationCallback( self, widget, data ):
+ if widget.get_active():
+ self.sourceVariation = int( data )
+
+ def pitchVariationCallback( self, widget, data ):
+ if widget.get_active():
+ self.pitchVariation = data
+
+ def rythmVariationCallback( self, widget, data ):
+ if widget.get_active():
+ self.rythmVariation = data
+
+ def initSlider(self, label, initValue, minValue, maxValue, incStep, policy, digits):
+ sliderAdjust = gtk.Adjustment(initValue, minValue, maxValue, incStep, incStep, 0)
+ slider = gtk.HScale(sliderAdjust)
+ slider.set_update_policy(policy)
+ slider.set_digits(digits)
+ slider.set_value_pos(1)
+ slider.set_size_request(250, 25)
+ self.sliderBox.pack_start(gtk.Label(label), False, False, 0)
+ self.sliderBox.pack_start(slider)
+ return sliderAdjust
+
+ def initRadioButton( self, labelList, methodCallback, box ):
+ for i in range( len( labelList ) ):
+ if i == 0:
+ button = gtk.RadioButton( None, labelList[ i ] )
+ else:
+ button = gtk.RadioButton( button, labelList[ i ] )
+ button.connect( "toggled", methodCallback, i )
+ box.pack_start( button, True, True, 0 )
+
+ def initSourceRadioButton( self, labelList, methodCallback, box ):
+ for i in range( len( labelList ) ):
+ if i == 0:
+ button = gtk.RadioButton(None, str( labelList[ i ] ) )
+ else:
+ button = gtk.RadioButton( button, str( labelList[ i ] ) )
+ button.connect( "toggled", methodCallback, i )
+ box.pack_start( button, True, True, 0 )
+ if i == 0:
+ button.set_active(True)