def __init__(self, parent, id, pos, size, screen_size): wx.Frame.__init__(self, parent, id, "", pos, size) self.SetMinSize((600,300)) self.screen_size = screen_size self.is_unsaved = False self.currentFile = None self.currentPath = None self.temps = [] self.draw = True self.lowpass = True self.fillPoints = True self.editionLevels = [2, 4, 8, 12, 16, 24, 32, 50] self.editionLevel = 2 self.arrowSpeedLevels = [1, 2, 4, 8, 16, 32] self.arrowSpeedLevel = 1 self.audioDriver = None self.recall = self.undos = 0 self.sample_precision = SAMPLE_PRECISION self.status = wx.StatusBar(self, -1) self.SetStatusBar(self.status) self.menuBar = wx.MenuBar() self.menu = wx.Menu() self.menu.Append(11, "New...\tCtrl+N") self.Bind(wx.EVT_MENU, self.handleNew, id=11) self.menu.Append(1, "Open...\tCtrl+O") self.Bind(wx.EVT_MENU, self.handleOpen, id=1) self.menu.Append(2, "Open Soundfile...\tShift+Ctrl+O") self.Bind(wx.EVT_MENU, self.handleLoad, id=2) self.menu.Append(12, "Insert Soundfile...\tShift+Ctrl+I") self.Bind(wx.EVT_MENU, self.handleInsert, id=12) self.menu.Append(3, "Save\tCtrl+S") self.Bind(wx.EVT_MENU, self.handleSave, id=3) self.menu.Append(4, "Save as...\tShift+Ctrl+S") self.Bind(wx.EVT_MENU, self.handleSaveAs, id=4) self.menu.AppendSeparator() self.menu.Append(6, "Open Granulator Controls\tCtrl+P") self.Bind(wx.EVT_MENU, self.openFxWindow, id=6) self.menu.Append(5, "Open Envelope Window\tCtrl+E") self.Bind(wx.EVT_MENU, self.openEnvelopeWindow, id=5) self.menu.AppendSeparator() self.menu.Append(7, "Run\tCtrl+R", "", wx.ITEM_CHECK) self.Bind(wx.EVT_MENU, self.onRun, id=7) self.menu.AppendSeparator() quit_item = self.menu.Append(wx.ID_EXIT, "Quit\tCtrl+Q") self.Bind(wx.EVT_MENU, self.OnClose, id=wx.ID_EXIT) self.menuBar.Append(self.menu, "&File") self.menu1 = wx.Menu() self.menu1.Append(110, "Undo\tCtrl+Z", "") self.menu1.Enable(110, False) self.Bind(wx.EVT_MENU, self.handleUndo, id=110) self.menu1.Append(111, "Redo\tShift+Ctrl+Z", "") self.menu1.Enable(111, False) self.Bind(wx.EVT_MENU, self.handleUndo, id=111) self.menu1.InsertSeparator(2) self.menu1.Append(100, "Draw Waveform", "", wx.ITEM_CHECK) self.menu1.Check(100, True) self.Bind(wx.EVT_MENU, self.handleDrawWave, id=100) self.menu1.Append(101, "Activate Lowpass filter", "", wx.ITEM_CHECK) self.menu1.Check(101, True) self.Bind(wx.EVT_MENU, self.handleActivateLp, id=101) self.menu1.Append(102, "Fill points", "", wx.ITEM_CHECK) self.menu1.Check(102, True) self.Bind(wx.EVT_MENU, self.handleActivateFill, id=102) self.submenu1 = wx.Menu() for i, level in enumerate(self.editionLevels): menuId = 1000 + i self.submenu1.Append(menuId, str(level), "", wx.ITEM_RADIO) self.Bind(wx.EVT_MENU, self.handlesEditionLevels, id=menuId) self.menu1.AppendSubMenu(self.submenu1, "Edition levels") self.submenu2 = wx.Menu() for i, level in enumerate(self.arrowSpeedLevels): menuId = 12000 + i self.submenu2.Append(menuId, str(level), "", wx.ITEM_RADIO) self.Bind(wx.EVT_MENU, self.handlesArrowSpeedLevels, id=menuId) self.menu1.AppendSubMenu(self.submenu2, "Arrow Moves Speed levels") self.menu1.InsertSeparator(8) self.menu1.Append(103, "Reinit counters\tCtrl+T", "") self.Bind(wx.EVT_MENU, self.handleReinit, id=103) self.menuBar.Append(self.menu1, "&Drawing") self.menu2 = wx.Menu() self.menuBar.Append(self.menu2, "&Audio Drivers") self.menu3 = wx.Menu() self.menu3.Append(2004, "Memorize Trajectory\tShift+Ctrl+M", "") self.Bind(wx.EVT_MENU, self.handleMemorize, id=2004) self.menu3.Append(2005, "Midi Settings...\tShift+Alt+Ctrl+M", "") self.Bind(wx.EVT_MENU, self.showMidiSettings, id=2005) self.menuBar.Append(self.menu3, "&Midi") self.menu4 = wx.Menu() self.menu4.Append(400, "Add Reverb ball\tCtrl+1", "") self.menu4.Append(401, "Add Delay ball\tCtrl+2", "") self.menu4.Append(402, "Add Disto ball\tCtrl+3", "") self.menu4.Append(403, "Add Waveguide ball\tCtrl+4", "") self.menu4.Append(404, "Add Complex Resonator ball\tCtrl+5", "") self.menu4.Append(405, "Add Degrade ball\tCtrl+6", "") self.menu4.Append(406, "Add Harmonizer ball\tCtrl+7", "") self.menu4.Append(407, "Add Clipper ball\tCtrl+8", "") self.menu4.Append(408, "Add Flanger ball\tCtrl+9", "") self.menu4.Append(409, "Add Detuned Resonator ball\tCtrl+0", "") for i in range(10): self.Bind(wx.EVT_MENU, self.addFxBall, id=400+i) self.menuBar.Append(self.menu4, "&FxBall") menu5 = wx.Menu() helpItem = menu5.Append(wx.ID_ABOUT, '&About %s %s' % (NAME, SG_VERSION)) self.Bind(wx.EVT_MENU, self.showAbout, helpItem) commands = menu5.Append(501, "Open SoundGrain Documentation\tCtrl+H") self.Bind(wx.EVT_MENU, self.openCommandsPage, commands) self.menuBar.Append(menu5, '&Help') self.SetMenuBar(self.menuBar) if os.path.isfile(PREFFILE): with open(PREFFILE, "r", encoding=FILE_ENCODING) as f: lines = f.readlines() try: auDriver = ensureNFD(lines[0].split("=")[1].replace("\n", "")) except: auDriver = None try: miDriver = ensureNFD(lines[1].split("=")[1].replace("\n", "")) except: miDriver = None try: self.lastFilePath = lines[3].split("=")[1].replace("\n", "") except: self.lastFilePath = os.path.expanduser("~") try: self.lastAudioPath = lines[4].split("=")[1].replace("\n", "") except: self.lastAudioPath = os.path.expanduser("~") else: auDriver = None miDriver = None self.lastFilePath = os.path.expanduser("~") self.lastAudioPath = os.path.expanduser("~") mainBox = wx.BoxSizer(wx.HORIZONTAL) self.panel = DrawingSurface(self) self.controls = ControlPanel(self, self.panel) mainBox.Add(self.panel, 20, wx.EXPAND, 5) mainBox.Add(self.controls, 0, wx.EXPAND, 5) self.SetSizer(mainBox) self.Bind(wx.EVT_CLOSE, self.OnClose) self.SetTitle('%s %s - ' % (NAME, SG_VERSION)) self.envelopeFrame = EnvelopeFrame(self) self.sg_audio = SG_Audio(self.panel.clock, self.panel.Refresh, self.controls, self.panel.addTrajFromMemory, self.panel.deleteMemorizedTraj, self.envelopeFrame) self.granulatorControls = GranulatorFrame(self, self.sg_audio) self.midiSettings = MidiSettings(self, self.panel, self.sg_audio, miDriver) self.createInitTempFile() self.check(auDriver)