diff options
Diffstat (limited to 'Edit/NoteParametersWindow.py')
-rw-r--r-- | Edit/NoteParametersWindow.py | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/Edit/NoteParametersWindow.py b/Edit/NoteParametersWindow.py new file mode 100644 index 0000000..f5be5b5 --- /dev/null +++ b/Edit/NoteParametersWindow.py @@ -0,0 +1,159 @@ +import pygtk +pygtk.require('2.0') +import gtk +from types import * +from math import sqrt + +class NoteParametersWindow( gtk.Window ): + def __init__(self, note, getNoteParameters ): + gtk.Window.__init__( self, gtk.WINDOW_TOPLEVEL ) + if type( note ) is DictType: + self.trackDictionary = note + self.inputType = 0 + elif type( note ) is InstanceType: + self.note = note + self.inputType = 1 + + self.tied = False + self.overlap = False + self.filterType = 0 + self.getNoteParameters = getNoteParameters + + self.setupWindow() + self.show_all() + + def delete_event(self, widget, event, data=None): + return False + + def setupWindow( self ): + self.set_position(gtk.WIN_POS_CENTER_ON_PARENT) + self.set_title("Note parameters") + self.set_border_width(5) + self.connect("delete_event", self.delete_event) + self.parametersBox = gtk.VBox(False, 2) + self.add(self.parametersBox) + + if self.inputType == 0: + self.pitchAdjust = self.initSlider( " pitch ",0 ,-12 , 12, 1, 0, 0 ) + self.amplitudeAdjust = self.initSlider( " amplitude ", 1., 0, 2, .01, 0, 2 ) + self.panAdjust = self.initSlider( " pan ", .5, 0, 1, .01, 0, 2) + self.reverbSendAdjust = self.initSlider( " reverb gain ", 1, 0, 4, .01, 0, 2 ) + self.attackAdjust = self.initSlider( "attack", .002, 0, 1, .001, 0, 3 ) + self.decayAdjust = self.initSlider( "decay", .098, 0, 1, .001, 0, 3 ) + elif self.inputType == 1: + self.pitchAdjust = self.initSlider( " pitch ",self.note.pitch, 24, 48, 1, 0, 0 ) + self.amplitudeAdjust = self.initSlider( " amplitude ", self.note.amplitude, 0, 1, .01, 0, 2 ) + self.panAdjust = self.initSlider( " pan ", self.note.pan, 0, 1, .01, 0, 2) + self.reverbSendAdjust = self.initSlider( " reverb gain ", self.note.reverbSend, 0, 1, .01, 0, 2 ) + self.attackAdjust = self.initSlider( "attack", self.note.attack, 0, 1, .001, 0, 3 ) + self.decayAdjust = self.initSlider( "decay", self.note.decay, 0, 1, .001, 0, 3 ) + + self.toggleBox = gtk.HBox(False, 2) + self.parametersBox.pack_start(self.toggleBox) + + tiedButton = gtk.ToggleButton("tied note") + tiedButton.connect("toggled", self.tiedCallback, 0) + self.toggleBox.pack_start(tiedButton, True, True, 0) + tiedButton.show() + + overlapButton = gtk.ToggleButton("overlaped note") + overlapButton.connect("toggled", self.overlapCallback, 0) + self.toggleBox.pack_start(overlapButton, True, True, 0) + overlapButton.show() + + if self.inputType == 0: + tiedButton.set_active(False) + elif self.inputType == 1: + tiedButton.set_active(self.note.tied) + + self.parametersBox.pack_start(gtk.Label("filter"), False, False, 0) + self.filterBox = gtk.HBox( False, 2 ) + self.parametersBox.pack_start( self.filterBox ) + + offButton = gtk.RadioButton(None, "off") + offButton.connect("toggled", self.filterCallback, 0) + self.filterBox.pack_start(offButton, True, True, 0) + offButton.show() + + lpButton = gtk.RadioButton(offButton, "lp") + lpButton.connect("toggled", self.filterCallback, 1) + self.filterBox.pack_start(lpButton, True, True, 0) + lpButton.show() + + hpButton = gtk.RadioButton(offButton, "hp") + hpButton.connect("toggled", self.filterCallback, 2) + self.filterBox.pack_start(hpButton, True, True, 0) + hpButton.show() + + bpButton = gtk.RadioButton(offButton, "bp") + bpButton.connect("toggled", self.filterCallback, 3) + self.filterBox.pack_start(bpButton, True, True, 0) + bpButton.show() + + brButton = gtk.RadioButton(offButton, "br") + brButton.connect("toggled", self.filterCallback, 4) + self.filterBox.pack_start(brButton, True, True, 0) + brButton.show() + + if self.inputType == 0: + offButton.set_active(True) + elif self.inputType == 1: + if self.note.filterType == 0: offButton.set_active(True) + if self.note.filterType == 1: lpButton.set_active(True) + if self.note.filterType == 2: hpButton.set_active(True) + if self.note.filterType == 3: bpButton.set_active(True) + if self.note.filterType == 4: brButton.set_active(True) + + self.scaleFilterBox = gtk.HBox( False, 2 ) + self.parametersBox.pack_start( self.scaleFilterBox ) + + if self.inputType == 0: + self.filterCutoffAdjust = gtk.Adjustment(.25, 0, 1, 0.001, 0.001, 0) + currentValue = self.filterCutoff = 1300 + self.filterCutoff = currentValue + elif self.inputType == 1: + currentValue = self.filterCutoff = self.note.filterCutoff + scaleCurrentValue = sqrt( ( self.note.filterCutoff - 20 ) / 19980. ) + self.filterCutoffAdjust = gtk.Adjustment(scaleCurrentValue, 0, 1, 0.001, 0.001, 0) + slider = gtk.HScale(self.filterCutoffAdjust) + slider.set_update_policy(0) + slider.set_digits(3) + slider.set_draw_value(False) + slider.set_size_request(250, 25) + slider.connect("value-changed", self.handleCutoffScale) + self.scaleFilterBox.pack_start(slider) + self.filterCutoffLabel = gtk.Label( str( currentValue ) ) + self.scaleFilterBox.pack_start(self.filterCutoffLabel, False, False, 0) + + applyButton = gtk.Button( " apply " ) + applyButton.connect( "clicked", self.applyParametersChange ) + self.parametersBox.pack_start( applyButton ) + + def applyParametersChange( self, data=None ): + self.getNoteParameters() + self.window.destroy() + + def filterCallback( self, widget, data=None): + if widget.get_active(): + self.filterType = data + + def tiedCallback( self, widget, data=None ): + self.tied = widget.get_active() + + def overlapCallback( self, widget, data=None ): + self.overlap = widget.get_active() + + def handleCutoffScale( self, widget, data=None ): + self.filterCutoff = int( pow( self.filterCutoffAdjust.value, 2) * 19980 + 20 ) + self.filterCutoffLabel.set_text( str( self.filterCutoff ) ) + + 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.parametersBox.pack_start(gtk.Label(label), False, False, 0) + self.parametersBox.pack_start(slider) + return sliderAdjust |