Example #1
0
    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)