def __init__(self, parent, surface): scrolled.ScrolledPanel.__init__(self, parent, -1) self.SetBackgroundColour(BACKGROUND_COLOUR) self.parent = parent self.surface = surface self.type = 0 self.selected = 0 self.selectedOkToChange = True self.sndPath = "" self.sndDur = 0.0 self.amplitude = 1 self.nchnls = 2 self.samplingRate = 44100 self.fileformat = 0 self.sampletype = 0 self.tempState = None box = wx.BoxSizer(wx.VERTICAL) box.Add(wx.StaticText(self, -1, "Trajectories"), 0, wx.CENTER | wx.TOP, 3) typeBox = wx.BoxSizer(wx.HORIZONTAL) popupBox = wx.BoxSizer(wx.VERTICAL) self.trajType = wx.Choice(self, -1, choices=['Free', 'Circle', 'Oscil', 'Line']) self.trajType.SetSelection(0) popupBox.Add(self.trajType) typeBox.Add(popupBox, 0, wx.CENTER | wx.RIGHT, 5) # TODO: Check the size of this button on Windows and OSX self.closedToggle = wx.ToggleButton(self, -1, 'Closed', size=self.trajType.GetSize()) font = self.closedToggle.GetFont() if PLATFORM.startswith('linux') or PLATFORM == 'win32': font = wx.Font(8, wx.FONTFAMILY_DEFAULT, wx.FONTSTYLE_NORMAL, wx.FONTWEIGHT_NORMAL) self.closedToggle.SetFont(font) typeBox.Add(self.closedToggle, wx.CENTER | wx.RIGHT, 5) box.Add(typeBox, 0, wx.CENTER | wx.ALL, 5) self.notebook = wx.Notebook(self, -1, style=wx.BK_DEFAULT | wx.EXPAND) self.notebook.SetBackgroundColour(BACKGROUND_COLOUR) self.drawing = DrawingParameters(self.notebook) self.playback = PlaybackParameters(self.notebook) self.notebook.AddPage(self.drawing, "Drawing") self.notebook.AddPage(self.playback, "Playback") box.Add(self.notebook, 0, wx.ALL, 5) # EQ eqTitle = wx.StaticText(self, id=-1, label="4 Bands Equalizer") box.Add(eqTitle, 0, wx.CENTER) eqFreqBox = wx.BoxSizer(wx.HORIZONTAL) self.knobEqF1 = ControlKnob(self, 40, 250, 100, label='Freq 1', outFunction=self.changeEqF1) eqFreqBox.Add(self.knobEqF1, 0, wx.LEFT | wx.RIGHT, 20) self.knobEqF1.setFloatPrecision(2) self.knobEqF2 = ControlKnob(self, 300, 1000, 500, label='Freq 2', outFunction=self.changeEqF2) eqFreqBox.Add(self.knobEqF2, 0, wx.LEFT | wx.RIGHT, 4) self.knobEqF2.setFloatPrecision(2) self.knobEqF3 = ControlKnob(self, 1200, 5000, 2000, label='Freq 3', outFunction=self.changeEqF3) eqFreqBox.Add(self.knobEqF3, 0, wx.LEFT | wx.RIGHT, 20) self.knobEqF3.setFloatPrecision(2) box.Add(eqFreqBox) eqGainBox = wx.BoxSizer(wx.HORIZONTAL) self.knobEqA1 = ControlKnob(self, -40, 18, 0, label='B1 gain', outFunction=self.changeEqA1) eqGainBox.Add(self.knobEqA1, 0, wx.LEFT | wx.RIGHT, 5) self.knobEqA2 = ControlKnob(self, -40, 18, 0, label='B2 gain', outFunction=self.changeEqA2) eqGainBox.Add(self.knobEqA2, 0, wx.LEFT | wx.RIGHT, 5) self.knobEqA3 = ControlKnob(self, -40, 18, 0, label='B3 gain', outFunction=self.changeEqA3) eqGainBox.Add(self.knobEqA3, 0, wx.LEFT | wx.RIGHT, 5) self.knobEqA4 = ControlKnob(self, -40, 18, 0, label='B4 gain', outFunction=self.changeEqA4) eqGainBox.Add(self.knobEqA4, 0, wx.LEFT | wx.RIGHT, 5) box.Add(eqGainBox) box.Add(wx.StaticLine(self, size=(210, 1)), 0, wx.ALL, 5) #Compress compTitle = wx.StaticText(self, id=-1, label="Dynamic Compressor") box.Add(compTitle, 0, wx.CENTER) cpKnobBox = wx.BoxSizer(wx.HORIZONTAL) self.knobComp1 = ControlKnob(self, -60, 0, -3, label='Thresh', outFunction=self.changeComp1) cpKnobBox.Add(self.knobComp1, 0, wx.LEFT | wx.RIGHT, 5) self.knobComp2 = ControlKnob(self, 1, 10, 2, label='Ratio', outFunction=self.changeComp2) cpKnobBox.Add(self.knobComp2, 0, wx.LEFT | wx.RIGHT, 5) self.knobComp3 = ControlKnob(self, 0.001, 0.5, 0.05, label='Rise', outFunction=self.changeComp3) cpKnobBox.Add(self.knobComp3, 0, wx.LEFT | wx.RIGHT, 5) self.knobComp4 = ControlKnob(self, 0.01, 1, .2, label='Fall', outFunction=self.changeComp4) cpKnobBox.Add(self.knobComp4, 0, wx.LEFT | wx.RIGHT, 5) box.Add(cpKnobBox) box.Add(wx.StaticLine(self, size=(210, 1)), 0, wx.ALL, 5) box.Add(wx.StaticText(self, -1, "Global amplitude (dB)"), 0, wx.LEFT | wx.TOP, 10) ampBox = wx.BoxSizer(wx.HORIZONTAL) self.sl_amp = ControlSlider(self, -60, 18, 0, size=(200, 16), outFunction=self.handleAmp) ampBox.Add(self.sl_amp, 0, wx.LEFT | wx.RIGHT, 5) box.Add(ampBox, 0, wx.LEFT | wx.RIGHT, 5) box.AddSpacer(10) self.meter = VuMeter(self, size=(200, 11)) self.meter.setNumSliders(self.nchnls) box.Add(self.meter, 0, wx.LEFT, 10) box.AddSpacer(5) box.Add(wx.StaticLine(self, size=(210, 1)), 0, wx.ALL, 5) box.Add(wx.StaticText(self, -1, "Project Settings"), 0, wx.CENTER | wx.ALL, 5) projSettingsBox = wx.BoxSizer(wx.HORIZONTAL) srBox = wx.BoxSizer(wx.VERTICAL) srText = wx.StaticText(self, -1, "Rate") srBox.Add(srText, 0, wx.CENTER | wx.LEFT | wx.RIGHT, 5) self.pop_sr = wx.Choice(self, -1, choices=['44100', '48000', '96000'], size=(80, -1)) self.pop_sr.SetSelection(0) self.pop_sr.Bind(wx.EVT_CHOICE, self.handleSamplingRate) srBox.Add(self.pop_sr, 0, wx.LEFT | wx.RIGHT, 5) chnlsBox = wx.BoxSizer(wx.VERTICAL) chnlsText = wx.StaticText(self, -1, "Chnls") chnlsBox.Add(chnlsText, 0, wx.CENTER | wx.LEFT | wx.RIGHT, 5) self.tx_chnls = wx.TextCtrl(self, -1, "2", size=(60, -1), style=wx.TE_PROCESS_ENTER) self.tx_chnls.Bind(wx.EVT_TEXT_ENTER, self.handleNchnls) chnlsBox.Add(self.tx_chnls, 0, wx.LEFT | wx.RIGHT, 5) projSettingsBox.Add(srBox, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 5) projSettingsBox.Add(chnlsBox, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 5) box.Add(projSettingsBox, 0, wx.ALIGN_CENTER, 5) box.Add(wx.StaticLine(self, size=(210, 1)), 0, wx.ALL, 5) soundBox = wx.BoxSizer(wx.HORIZONTAL) self.tog_audio = wx.ToggleButton(self, -1, "Start", size=(80, -1)) self.tog_audio.SetFont(font) self.tog_audio.Disable() soundBox.Add(self.tog_audio, 0, wx.CENTER | wx.LEFT | wx.RIGHT, 5) box.Add(soundBox, 0, wx.CENTER | wx.ALL, 5) box.Add(wx.StaticLine(self, size=(210, 1)), 0, wx.ALL, 5) box.Add(wx.StaticText(self, -1, "Record Settings"), 0, wx.CENTER | wx.ALL, 5) recSettingsBox = wx.BoxSizer(wx.HORIZONTAL) fileformatBox = wx.BoxSizer(wx.VERTICAL) fileformatText = wx.StaticText(self, -1, "Format") fileformatBox.Add(fileformatText, 0, wx.CENTER | wx.LEFT | wx.RIGHT, 5) self.pop_fileformat = wx.Choice(self, -1, choices=EXPORT_FORMATS, size=(80, -1)) self.pop_fileformat.SetSelection(0) self.pop_fileformat.Bind(wx.EVT_CHOICE, self.handleFileFormat) fileformatBox.Add(self.pop_fileformat, 0, wx.LEFT | wx.RIGHT, 5) sampletypeBox = wx.BoxSizer(wx.VERTICAL) sampletypeText = wx.StaticText(self, -1, "Type") sampletypeBox.Add(sampletypeText, 0, wx.CENTER | wx.LEFT | wx.RIGHT, 5) self.pop_sampletype = wx.Choice(self, -1, choices=EXPORT_TYPES) self.pop_sampletype.SetSelection(0) self.pop_sampletype.Bind(wx.EVT_CHOICE, self.handleSampleType) sampletypeBox.Add(self.pop_sampletype, 0, wx.LEFT | wx.RIGHT, 5) recSettingsBox.Add(fileformatBox, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 5) recSettingsBox.Add(sampletypeBox, 0, wx.LEFT | wx.RIGHT | wx.BOTTOM, 5) box.Add(recSettingsBox, 0, wx.ALIGN_CENTER | wx.BOTTOM, 5) rec1Box = wx.BoxSizer(wx.HORIZONTAL) self.tx_rec_folder = wx.TextCtrl(self, -1, "~/Desktop", size=(120, -1)) rec1Box.Add(self.tx_rec_folder, 0, wx.LEFT | wx.RIGHT, 10) self.but_folder = wx.ToggleButton(self, -1, "Choose", size=(65, -1)) self.but_folder.SetFont(font) rec1Box.Add(self.but_folder, 1, wx.ALIGN_CENTER_VERTICAL | wx.EXPAND | wx.RIGHT, 10) rec2Box = wx.BoxSizer(wx.HORIZONTAL) self.tx_output = wx.TextCtrl(self, -1, "snd", size=(120, -1)) rec2Box.Add(self.tx_output, 0, wx.LEFT | wx.RIGHT, 10) self.tog_record = wx.ToggleButton(self, -1, "Start Rec", size=(65, -1)) self.tog_record.SetFont(font) rec2Box.Add(self.tog_record, 1, wx.ALIGN_CENTER_VERTICAL | wx.EXPAND | wx.RIGHT, 10) box.Add(wx.StaticText(self, -1, "Destination"), 0, wx.LEFT | wx.RIGHT, 17) box.Add(rec1Box, 0, wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT, 5) box.Add(wx.StaticText(self, -1, "Filename"), 0, wx.LEFT | wx.RIGHT, 17) box.Add(rec2Box, 0, wx.EXPAND | wx.BOTTOM | wx.LEFT | wx.RIGHT, 5) self.Bind(wx.EVT_CHOICE, self.handleType, self.trajType) self.Bind(wx.EVT_TOGGLEBUTTON, self.handleClosed, self.closedToggle) self.Bind(wx.EVT_TOGGLEBUTTON, self.handleAudio, self.tog_audio) self.tx_output.Bind(wx.EVT_CHAR, self.handleOutput) self.tx_rec_folder.Bind(wx.EVT_CHAR, self.handleOutput) self.Bind(wx.EVT_TOGGLEBUTTON, self.handleRecord, self.tog_record) self.Bind(wx.EVT_TOGGLEBUTTON, self.chooseRecFolder, self.but_folder) self.SetAutoLayout(True) self.SetSizerAndFit(box) self.SetupScrolling(scroll_x=False)