Пример #1
0
    def connectAudioMixer(self):
        audioMixer = QLiveLib.getVar("AudioMixer")
        audioServer = QLiveLib.getVar("AudioServer")

        for obj in self.buttonsInputs:
            if obj.name == "AudioIn":
                inchnls = obj.getInChannels()
                ismulti = obj.getIsMultiChannels()
                channels = [audioMixer.getInputChannel(i).getOutput()
                            for i in range(NUM_INPUTS) if inchnls[i]]
                if not ismulti:
                    channels = sum(channels)
                obj.setInput(channels)
            elif obj.name == "Soundfile":
                id = obj.getSoundfileId()
                if id is not None:
                    source = audioServer.getSoundfiles()[id]
                    if source:
                        obj.setInput(source.looper)

        for i, obj in enumerate(self.buttonsFxs):
            if obj.name == "AudioOut":
                chnls = len(obj.getOutput())
                outchnls = obj.getOutChannels()
                channels = [j for j in range(NUM_OUTPUTS) if outchnls[j]]
                for j in range(chnls):
                    audioMixer.addToMixer(channels[j % len(channels)],
                                          obj.getOutput()[j])
Пример #2
0
 def assignMidiCtl(self, num, which):
     self.midiBindings[num] = which
     if which == "up":
         self.upButton.SetToolTip(QLiveTooltip("Midi key: %d" % num))
     elif which == "down":
         self.downButton.SetToolTip(QLiveTooltip("Midi key: %d" % num))
     QLiveLib.getVar("MidiServer").bind("noteon", num, self.midi)
Пример #3
0
 def revertMidiAssignation(self):
     self.midiscanning = False
     QLiveLib.getVar("MidiServer").ctlscan(None)
     self.slider.setMidiLearn(False)
     QLiveLib.getVar("MidiServer").unbind("ctls", self.slider.midictl,
                                          self.midi)
     self.slider.setMidiCtl(None)
Пример #4
0
    def doLabelAction(self, evt):
        if evt.GetId() == 1: # Duplicate
            obj = self.objects[self.selRow]
            id = obj.getId()
            filename = obj.getFilename()
            new = SoundFileObject(id, filename)
            new.copy(obj)
            self.selRow += 1
            self.objects.insert(self.selRow, new)
            self.addRow(index=self.selRow)
            self.putObjectAttrOnCells(new, self.selRow)
            for id in [ID_COL_TRANSPO, ID_COL_GAIN, ID_COL_STARTPOINT,
                       ID_COL_ENDPOINT, ID_COL_CROSSFADE, ID_COL_CHANNEL]:
                attr = self.GetOrCreateCellAttr(self.selRow, id)
                attr.SetReadOnly(False)
        elif evt.GetId() == 2: # Delete
            QLiveLib.getVar("FxTracks").checkForDeletedSoundfile(self.selRow)
            del self.objects[self.selRow]
            self.DeleteRows(self.selRow, 1, True)

        if evt.GetId() in [3, 4]: # Show parameter values/interpolation times
            self.objects[self.selRow].setShowInterp(evt.GetId() - 3)
            self.putObjectAttrOnCells(self.objects[self.selRow], self.selRow)

        if evt.GetId() == 5:
            self.objects[self.selRow].openTranspoAutomationWindow()
        elif evt.GetId() == 6:
            self.objects[self.selRow].openGainAutomationWindow()

        for i, obj in enumerate(self.objects):
            obj.setId(i)
Пример #5
0
 def onClose(self, evt):
     if self.tabAudio.reinit_server:
         try:
             QLiveLib.getVar("AudioServer").reinitServer()
         except:
             pass
     self.Destroy()
Пример #6
0
 def setSaveState(self, state):
     if state:
         self.cueMidiNotes = state["cueMidiNotes"]
         for val, state in self.cueMidiNotes.items():
             if state in ["up", "down"]:
                 QLiveLib.getVar("ControlPanel").setButtonTooltip(state, 
                                                     "Midi key: %d" % val)
Пример #7
0
 def onMoveCue(self, evt):
     if QLiveLib.getVar("CanProcessCueKeys"):
         cues = QLiveLib.getVar("CuesPanel")
         current = cues.getCurrentCue()
         if evt.GetId() == self.prevId:
             cues.onCueSelection(current - 1)
         elif evt.GetId() == self.nextId:
             cues.onCueSelection(current + 1)
Пример #8
0
 def onMidiLearn(self, evt):
     QLiveLib.setVar("MidiLearnMode", evt.GetInt())
     if evt.GetInt():
         QLiveLib.getVar("MixerPanel").SetBackgroundColour(MIDILEARN_COLOUR)
         QLiveLib.setVar("CanProcessCueKeys", False)
     else:
         QLiveLib.getVar("MixerPanel").SetBackgroundColour(BACKGROUND_COLOUR)
         QLiveLib.setVar("CanProcessCueKeys", True)
Пример #9
0
    def __init__(self, parent):
        wx.Panel.__init__(self, parent, size=(95, -1), style=wx.SUNKEN_BORDER)
        self.mainSizer = wx.BoxSizer(wx.VERTICAL)
        self.newAddSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.upDownSizer = wx.BoxSizer(wx.HORIZONTAL)
        
        self.learnButton = None
        
        self.buttons = TransportButtons(self, 
                                        playCallback=QLiveLib.getVar("AudioServer").start,
                                        recordCallback=QLiveLib.getVar("AudioServer").record)
        self.mainSizer.Add(self.buttons, 0, wx.ALIGN_CENTER_HORIZONTAL)

        self.mainSizer.Add(wx.StaticLine(self, size=(1, 1)), 0, 
                           wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)        

        title = wx.StaticText(self, label="-- CUES --")
        self.mainSizer.Add(title, 0, wx.ALIGN_CENTER, 5)

        #button = wx.Button(self,wx.ID_OK, label="Interp Time" )
        #self.mainSizer.Add(button, 0, wx.ALIGN_CENTER, 5)
        #button.Bind(wx.EVT_BUTTON, self.onSetInterpTime)


        bmp = wx.Bitmap(ICON_ADD, wx.BITMAP_TYPE_PNG)
        self.newButton = wx.BitmapButton(self, wx.ID_ANY, bmp)
        self.newButton.Bind(wx.EVT_BUTTON, self.onNewCue)
        self.newAddSizer.Add(self.newButton, 1)

        bmp = wx.Bitmap(ICON_DELETE, wx.BITMAP_TYPE_PNG)
        self.delButton = wx.BitmapButton(self, wx.ID_ANY, bmp)
        self.delButton.Bind(wx.EVT_BUTTON, self.onDelCue)
        self.newAddSizer.Add(self.delButton, 1)

        self.mainSizer.Add(self.newAddSizer, 0, wx.EXPAND|wx.ALL, 5)

        self.upbmp = wx.Bitmap(ICON_ARROW_UP, wx.BITMAP_TYPE_PNG)
        self.upmidbmp = wx.Bitmap(ICON_ARROW_UP_MIDI, wx.BITMAP_TYPE_PNG)
        self.upButton = wx.BitmapButton(self, wx.ID_ANY, self.upbmp)
        self.upButton.Bind(wx.EVT_BUTTON, self.onMoveCueUp)
        self.upButton.Bind(wx.EVT_RIGHT_DOWN, self.midiLearn)
        self.upTooltip = wx.ToolTip("")
        self.upButton.SetToolTip(self.upTooltip)
        self.upDownSizer.Add(self.upButton, 1)

        self.downbmp = wx.Bitmap(ICON_ARROW_DOWN, wx.BITMAP_TYPE_PNG)
        self.downmidbmp = wx.Bitmap(ICON_ARROW_DOWN_MIDI, wx.BITMAP_TYPE_PNG)
        self.downButton = wx.BitmapButton(self, wx.ID_ANY, self.downbmp)
        self.downButton.Bind(wx.EVT_BUTTON, self.onMoveCueDown)
        self.downButton.Bind(wx.EVT_RIGHT_DOWN, self.midiLearn)
        self.downTooltip = wx.ToolTip("")
        self.downButton.SetToolTip(self.downTooltip)
        self.upDownSizer.Add(self.downButton, 1)

        self.mainSizer.Add(self.upDownSizer, 0, 
                           wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)

        self.SetSizerAndFit(self.mainSizer)
Пример #10
0
 def handleMidiScan(self):
     if not self.midiscanning:
         self.midiscanning = True
         QLiveLib.getVar("MidiServer").ctlscan(self.getMidiScan)
         self.slider.setMidiLearn(True)
     else:
         self.midiscanning = False
         QLiveLib.getVar("MidiServer").ctlscan(None)
         self.slider.setMidiLearn(False)
Пример #11
0
 def cueMidiLearnCallback(self, val, ctl=False):
     if ctl:
         self.cueMidiCtls[val] = self.cueMidiLearnState
     else:
         self.cueMidiNotes[val] = self.cueMidiLearnState
     QLiveLib.getVar("ControlPanel").setButtonTooltip(self.cueMidiLearnState, 
                                                     "Midi key: %d" % val)
     self.cueMidiLearnState = None
     QLiveLib.getVar("ControlPanel").resetCueButtonBackgroundColour()
Пример #12
0
 def handleMidiScan(self):
     if not self.midiscanning:
         self.midiscanning = True
         QLiveLib.getVar("MidiServer").ctlscan(self.getMidiScan)
         self.setMidiBackgroundColour(MIDILEARN_COLOUR)
     else:
         self.midiscanning = False
         QLiveLib.getVar("MidiServer").ctlscan(None)
         self.revertMidiBackgroundColour()
Пример #13
0
 def deleteButton(self, but):
     # work only for fxs, not for inputs
     but.delete()
     self.buttonsFxs.remove(but)
     for i, but in enumerate(self.buttonsFxs):
         id = but.getId()
         id[0] = i
         but.setId(id)
     QLiveLib.getVar("FxTracks").drawAndRefresh()
Пример #14
0
 def saveFile(self, path):
     QLiveLib.getVar("CuesPanel").onSaveCue()
     dictSave = self.getCurrentState()
     self.saveState = copy.deepcopy(dictSave)
     QLiveLib.setVar("currentProject", path)
     QLiveLib.setVar("projectFolder", os.path.dirname(path))
     with open(path, "w") as f:
         f.write(QLIVE_MAGIC_LINE)
         f.write("### %s ###\n" % APP_VERSION)
         f.write("dictSave = %s" % pprint.pformat(dictSave, indent=4))
Пример #15
0
 def onLoad(self, evt):
     if not self.askForSaving():
         return
     if QLiveLib.getVar("currentProject"):
         filepath = os.path.split(QLiveLib.getVar("currentProject"))[0]
     else:
         filepath = os.path.expanduser("~")
     dlg = wx.FileDialog(self, "Open Qlive Projet", filepath, "",
                         "QLive Project files (*.qlp)|*.qlp", style=wx.OPEN)
     if dlg.ShowModal() == wx.ID_OK:
         path = dlg.GetPath()
         self.loadFile(path)
     dlg.Destroy()
Пример #16
0
 def recStart(self, filename="", fileformat=0, sampletype=0):
     self.server.recordOptions(fileformat=fileformat, sampletype=sampletype)
     if not filename:
         filename = os.path.basename(QLiveLib.getVar("currentProject"))
     filename, ext = os.path.splitext(filename)
     filename = os.path.join(QLiveLib.getVar("projectFolder"), "bounce", filename)
     if fileformat >= 0 and fileformat < 8:
         ext = RECORD_EXTENSIONS[fileformat]
     else: 
         ext = ".wav"
     date = time.strftime('_%d_%b_%Y_%Hh%M')
     complete_filename = QLiveLib.toSysEncoding(filename+date+ext)
     self.server.recstart(complete_filename)
Пример #17
0
 def deleteButton(self, but):
     if but.isInput:
         self.buttonsInputs.remove(but)
         lst = self.buttonsInputs
     else:
         self.buttonsFxs.remove(but)
         lst = self.buttonsFxs
     for i, but in enumerate(lst):
         id = but.getId()
         id[0] = i
         but.setId(id)
     but.delete()
     QLiveLib.getVar("FxTracks").drawAndRefresh()
Пример #18
0
 def sendCueEvent(self, evt):
     if QLiveLib.getVar("MainWindow") != None:
         QLiveLib.getVar("FxTracks").cueEvent(evt)
         QLiveLib.getVar("Soundfiles").cueEvent(evt)
         QLiveLib.getVar("AudioMixer").cueEvent(evt)
     currentCueWindow = QLiveLib.getVar("CurrentCueWindow")
     currentCueWindow.refresh(self.getCurrentCue())
Пример #19
0
 def onSaveAs(self, evt):
     if QLiveLib.getVar("currentProject"):
         filepath = os.path.split(QLiveLib.getVar("currentProject"))
     else:
         filepath = os.path.join(os.path.expanduser("~"), "qlive_project.qlp")
         filepath = os.path.split(filepath)
     dlg = wx.FileDialog(self, "Save Qlive Projet", 
                         filepath[0], filepath[1],
                         "QLive Project files (*.qlp)|*.qlp",
                         style=wx.SAVE|wx.FD_OVERWRITE_PROMPT)
     if dlg.ShowModal() == wx.ID_OK:
         path = dlg.GetPath()
         self.saveFile(path)
     dlg.Destroy()
Пример #20
0
 def keyDown(self, evt):
     if QLiveLib.getVar("MidiLearnMode"):
         if evt.GetKeyCode() in [wx.WXK_BACK, wx.WXK_DELETE,
                                 wx.WXK_NUMPAD_DELETE]:
             # remove current binding
             midi = QLiveLib.getVar("MidiServer")
             self.learning = False
             self.select(0)
             midi.noteonscan(None)
             if self.midinote is not None:
                 midi.unbind("noteon", self.midinote, self.midi)
             self.midinote = None
             self.SetToolTip(QLiveTooltip(""))
     evt.Skip()
Пример #21
0
 def onMoveCue(self, evt):
     if QLiveLib.getVar("CanProcessCueKeys"):
         cues = QLiveLib.getVar("CuesPanel")
         current = cues.getCurrentCue()
         if evt.GetId() == self.prevId:
             cues.onCueSelection(current - 1)
         elif evt.GetId() == self.nextId:
             cues.onCueSelection(current + 1)
         elif evt.GetId() == self.cueZeroId:
             cues.onCueSelection(0)
         elif evt.GetId() >= self.cue1Id and evt.GetId() <= self.cue10Id:
             which = evt.GetId() - self.cue1Id + 1
             cues.onCueSelection(which)
     else:
         evt.Skip()
Пример #22
0
 def OnQuit(self, evt):
     self.timer.Stop()
     if not self.askForSaving():
         return
     self.currentCueWindow.Destroy()
     if self.audioServer.isStarted():
         self.audioServer.stop()
         time.sleep(0.25)
     if self.audioServer.isBooted():
         self.audioServer.shutdown()
         time.sleep(0.25)
     QLiveLib.getVar("Soundfiles").cleanUpSoundsFolder()
     QLiveLib.saveVars()
     self.tracks.close()
     self.Destroy()
Пример #23
0
 def askForSaving(self):
     state = True
     if self.saveState != self.getCurrentState():
         if not QLiveLib.getVar("currentProject"):
             filename = "Untitled"
         else:
             filename = QLiveLib.getVar("currentProject")
         msg = 'file "%s" has been modified. Do you want to save?' % filename
         dlg = wx.MessageDialog(None, msg, 'Warning!', wx.YES | wx.NO | wx.CANCEL)
         but = dlg.ShowModal()
         if but == wx.ID_YES:
             self.onSave(None)
         elif but == wx.ID_CANCEL:
             state = False
         dlg.Destroy()
     return state
Пример #24
0
    def __init__(self, id, filename, loopmode=0, transpo=1, gain=0,
                 playing=0, directout=True, startpoint=0,
                 endpoint=-1, crossfade=5, channel=0):
        self.id = id
        self.filename = filename
        sndfolder = os.path.join(QLiveLib.getVar("projectFolder"), "sounds")        
        info = sndinfo(os.path.join(sndfolder, self.filename))
        if info is None:
            self.valid = False
            self.duration = -1
        else:
            self.valid = True
            self.duration = info[1]
        self.loopmode = loopmode
        self.transpo = transpo
        self.gain = gain
        self.playing = playing
        self.directout = directout
        self.startpoint = startpoint
        self.endpoint = self.duration
        self.crossfade = crossfade
        self.channel = channel
        
        self.playerRef = None

        self.currentCue = 0
        self.cues = {}
        self.saveCue()
Пример #25
0
 def resetObjectRefs(self):
     tracks = QLiveLib.getVar("FxTracks").getTracks()
     for track in tracks:
         for but in track.getButtonInputs():
             but.setAudioRef(None)
         for but in track.getButtonFxs():
             but.setAudioRef(None)
Пример #26
0
 def createBoxObjects(self):
     tracks = QLiveLib.getVar("FxTracks").getTracks()
     for track in tracks:
         chnls = 1
         for but in track.getButtonInputs():
             name = but.name
             if not name: name = "None"
             if name == "AudioIn":
                 inchnls = but.getInChannels()
                 numchnls = inchnls.count(1)
                 ismulti = but.getIsMultiChannels()
                 if ismulti:
                     chnls = max(chnls, numchnls)
                 else:
                     chnls = 1
             ctrls = INPUT_DICT[name]["ctrls"]
             values = but.getCurrentValues()
             if values is not None:
                 obj = AUDIO_OBJECTS[name](chnls, ctrls, values,
                                           but.getCurrentInterps())
                 but.setAudioRef(obj)
                 self.audioObjects.append(obj)
         for but in track.getButtonFxs():
             name = but.name
             if not name: name = "None"
             ctrls = FX_DICT[name]["ctrls"]
             values = but.getCurrentValues()
             if values is not None:
                 obj = AUDIO_OBJECTS[name](chnls, ctrls, values,
                                           but.getCurrentInterps())
                 but.setAudioRef(obj)
                 self.audioObjects.append(obj)
Пример #27
0
 def onCuePaste(self, evt):
     cues = QLiveLib.getVar("CuesPanel")
     current = cues.getCurrentCue()
     if current == 0:
         QLiveLib.PRINT("Can't paste on cue number 0.")
         return
     cues.onPasteCue()
Пример #28
0
 def midiLearn(self, evt):
     obj = evt.GetEventObject()
     if self.learnButton is not None and self.learnButton != obj:
         if self.learnButton == self.upButton:
             wx.CallAfter(self.learnButton.SetBitmapLabel, self.upbmp)
         elif self.learnButton == self.downButton:
             wx.CallAfter(self.learnButton.SetBitmapLabel, self.downbmp)
     server = QLiveLib.getVar("AudioServer")
     if self.learnButton == obj:
         if obj == self.upButton:
             obj.SetBitmapLabel(self.upbmp)
         elif obj == self.downButton:
             obj.SetBitmapLabel(self.downbmp)
         self.learnButton = None
         server.stopCueMidiLearn()
     else:
         if obj == self.upButton:
             obj.SetBitmapLabel(self.upmidbmp)
         elif obj == self.downButton:
             obj.SetBitmapLabel(self.downmidbmp)
         self.learnButton = obj
         if obj == self.upButton:
             which = "up"
         elif obj == self.downButton:
             which = "down"
         server.setCueMidiLearnState(which)
         server.startCueMidiLearn()
Пример #29
0
 def __init__(self):
     prefs = self.getPrefs()
     sr = prefs[0]
     bufferSize = prefs[1]
     audio = prefs[2]
     jackname = prefs[3]
     nchnls = prefs[4]
     inchnls = prefs[5]
     duplex = prefs[6]
     outdev = prefs[7]
     indev = prefs[8]
     firstin = prefs[9]
     firstout = prefs[10]
     self.server = Server(sr=sr, buffersize=bufferSize, audio=audio,
                          jackname=jackname, nchnls=nchnls, duplex=duplex)
     if inchnls != None:
         self.server.setIchnls(inchnls)
     self.server.deactivateMidi()
     self.soundfiles = []
     self.audioObjects = []
     self.recording = False
     self.server.setOutputDevice(outdev)
     self.server.setInputOffset(firstin)
     self.server.setOutputOffset(firstout)
     if QLiveLib.getVar("duplex"):
         self.server.setInputDevice(indev)
     self.server.boot()
Пример #30
0
    def __init__(self, parent, parameters, fxbox):
        wx.Panel.__init__(self, parent)
        self.SetBackgroundColour(BACKGROUND_COLOUR)
        interpTime = QLiveLib.getVar("globalInterpTime")
        self.fromUser = False
        self.midiscanning = False
        self.parameters = parameters
        self.fxbox = fxbox
        self.name = parameters[0]
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.slider = QLiveControlKnob(self, parameters[2], parameters[3],
                                       parameters[1], label=parameters[0],
                                       log=parameters[5],
                                       outFunction=self.outputValue,
                                       editFunction=self.onEditFunction)
        self.sizer.Add(self.slider, 0, wx.ALL, 5)

        self.interpKnob = QLiveControlKnob(self,
                                INTERPTIME_MIN,
                                INTERPTIME_MAX, interpTime,
                                label=parameters[0], log=True,
                                outFunction=self.outputInterpValue,
                                outOnShiftFunction=self.onChangeAllInterp,
                                backColour=CONTROLSLIDER_BACK_COLOUR_INTERP)
        self.sizer.Add(self.interpKnob, 0, wx.ALL, 5)

        self.interpKnob.Hide()
        self.SetSizer(self.sizer)
Пример #31
0
 def openMenu(self, event):
     fxTracks = QLiveLib.getVar("FxTracks")
     menu = wx.Menu()
     id = BOX_MENU_ITEM_FIRST_ID
     if self.isInput == False:
         for fxList in self.choices:
             id_orig = id
             subMenu = wx.Menu()
             for fx in fxList[1:]:
                 id += 1
                 subMenu.Append(id, fx)
             menu.AppendMenu(id_orig, fxList[0], subMenu)
             id = id_orig + self.i
     if self.isInput == True:
         for name in self.choices:
             menu.Append(id, name)
             id += 1
     fxTracks.Bind(wx.EVT_MENU,
                   self.select,
                   id=BOX_MENU_ITEM_FIRST_ID,
                   id2=id)
     fxTracks.PopupMenu(menu, event.GetPosition())
     menu.Destroy()
Пример #32
0
 def keyDown(self, event):
     if QLiveLib.getVar("MidiLearnMode"):
         if event.GetKeyCode() in [
                 wx.WXK_BACK, wx.WXK_DELETE, wx.WXK_NUMPAD_DELETE
         ]:
             self.parent.revertMidiAssignation()
         event.Skip()
         return
     if self.selected:
         char = ''
         if event.GetKeyCode() in range(324, 334):
             char = str(event.GetKeyCode() - 324)
         elif event.GetKeyCode() == 390:
             char = '-'
         elif event.GetKeyCode() == 391:
             char = '.'
         elif event.GetKeyCode() == wx.WXK_BACK:
             if self.new != '':
                 self.new = self.new[0:-1]
         elif event.GetKeyCode() < 256:
             char = chr(event.GetKeyCode())
         if char in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']:
             self.new += char
         elif char == '.' and not '.' in self.new:
             self.new += char
         elif char == '-' and len(self.new) == 0:
             self.new += char
         elif event.GetKeyCode() in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
             if self.new != '':
                 self.SetValue(eval(self.new))
                 # Send value
                 if self.outFunction:
                     self.outFunction(self.GetValue())
                 self.new = ''
             self.selected = False
             QLiveLib.setVar("CanProcessCueKeys", True)
     wx.CallAfter(self.Refresh)
Пример #33
0
    def __init__(self, parent, parameters, fxbox):
        wx.Panel.__init__(self, parent)
        self.SetBackgroundColour(BACKGROUND_COLOUR)
        interpTime = QLiveLib.getVar("globalInterpTime")
        self.fromUser = False
        self.midiscanning = False
        self.parameters = parameters
        self.fxbox = fxbox
        self.name = parameters[0]
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.slider = QLiveControlKnob(self,
                                       parameters[2],
                                       parameters[3],
                                       parameters[1],
                                       label=parameters[0],
                                       log=parameters[5],
                                       outFunction=self.outputValue,
                                       editFunction=self.onEditFunction)
        self.sizer.Add(self.slider, 0, wx.ALL, 5)

        self.interpKnob = QLiveControlKnob(
            self,
            INTERPTIME_MIN,
            INTERPTIME_MAX,
            interpTime,
            label=parameters[0],
            log=True,
            outFunction=self.outputInterpValue,
            outOnShiftFunction=self.onChangeAllInterp,
            backColour=CONTROLSLIDER_BACK_COLOUR_INTERP)
        self.sizer.Add(self.interpKnob, 0, wx.ALL, 5)

        self.slider.Bind(wx.EVT_RIGHT_DOWN, self.MouseRightDown)

        self.interpKnob.Hide()
        self.SetSizer(self.sizer)
Пример #34
0
 def midiLearn(self, evt):
     obj = evt.GetEventObject()
     midi = QLiveLib.getVar("MidiServer")
     # remove current binding
     if evt.ShiftDown():
         num = -1
         if obj == self.upButton:
             search, bitmap = "up", self.upbmp
         elif obj == self.downButton:
             search, bitmap = "down", self.downbmp
         for key, val in self.midiBindings.items():
             if val == search:
                 num = key
                 break
         obj.SetBitmapLabel(bitmap)
         obj.SetToolTip(QLiveTooltip(""))
         midi.noteonscan(None)
         self.learnButton = None
         if num != -1:
             midi.unbind("noteon", num, self.midi)
     # stop midi learn
     elif self.learnButton == obj:
         if obj == self.upButton:
             obj.SetBitmapLabel(self.upbmp)
         elif obj == self.downButton:
             obj.SetBitmapLabel(self.downbmp)
         self.learnButton = None
         midi.noteonscan(None)
     # start midi learn
     else:
         if obj == self.upButton:
             obj.SetBitmapLabel(self.upmidbmp)
         elif obj == self.downButton:
             obj.SetBitmapLabel(self.downmidbmp)
         midi.noteonscan(self.getMidiScan)
         self.learnButton = obj
Пример #35
0
    def __init__(self, parent, callback=None):
        wx.Frame.__init__(self, parent)
        self.callback = callback
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)
        upSizer = wx.BoxSizer(wx.HORIZONTAL)
        downSizer = wx.BoxSizer(wx.HORIZONTAL)

        title = wx.StaticText(panel, -1, "GLOBAL INTERPOLATION TIME")
        sizer.Add(title, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.TOP, 5)

        sampleList = ["Current Cue", "All Cues"]
        self.cueButton = wx.RadioBox(panel, -1, "", wx.DefaultPosition,
                                     wx.DefaultSize, sampleList, 1,
                                     wx.RA_SPECIFY_COLS | wx.NO_BORDER)
        upSizer.Add(self.cueButton, 0, wx.BOTTOM | wx.LEFT | wx.RIGHT, 5)

        sampleList = ["Current Track", "All Tracks", "Not Applied to Tracks"]
        self.trackButton = wx.RadioBox(panel, -1, "", wx.DefaultPosition,
                                       wx.DefaultSize, sampleList, 1,
                                       wx.RA_SPECIFY_COLS | wx.NO_BORDER)
        upSizer.Add(self.trackButton, 0, wx.BOTTOM | wx.LEFT | wx.RIGHT, 5)

        sampleList = [
            "Current Soundfile", "All Soundfiles", "Not Applied to Soundfiles"
        ]
        self.sndButton = wx.RadioBox(panel, -1, "", wx.DefaultPosition,
                                     wx.DefaultSize, sampleList, 1,
                                     wx.RA_SPECIFY_COLS | wx.NO_BORDER)
        upSizer.Add(self.sndButton, 0, wx.BOTTOM | wx.LEFT | wx.RIGHT, 5)

        sizer.Add(upSizer, 0)

        knobSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.method = wx.Choice(panel,
                                -1,
                                choices=[
                                    "Overwrite", "Add to Current Values",
                                    "Substract to Current Values"
                                ])
        self.method.SetSelection(0)
        self.knob = QLiveControlKnob(panel,
                                     INTERPTIME_MIN,
                                     INTERPTIME_MAX,
                                     init=QLiveLib.getVar("globalInterpTime"),
                                     showAutomation=False,
                                     label="Time")
        self.knob.SetFocus()
        knobSizer.Add(self.method, 0,
                      wx.ALIGN_CENTER_VERTICAL | wx.LEFT | wx.RIGHT, 5)
        knobSizer.Add(self.knob, 1, wx.LEFT | wx.RIGHT, 30)
        sizer.Add(knobSizer, 0, wx.TOP | wx.BOTTOM, 10)

        sizer.Add(wx.StaticLine(panel, size=(360, 1)), 0,
                  wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 4)

        applyButton = wx.Button(panel, -1, label="Apply")
        applyButton.Bind(wx.EVT_BUTTON, self.onApply)
        closeButton = wx.Button(panel, -1, label="Close")
        closeButton.Bind(wx.EVT_BUTTON, self.onClose)
        downSizer.Add(applyButton, 0, wx.RIGHT, 5)
        downSizer.Add(closeButton, 0, wx.RIGHT, 5)
        sizer.Add(downSizer, 0,
                  wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_RIGHT | wx.TOP, 10)

        panel.SetSizerAndFit(sizer)
        psize = panel.GetSize()
        self.SetSize((psize[0] + 5, psize[1] + 40))

        self.Show()
Пример #36
0
 def midi(self, pitch, vel):
     which = self.midiBindings[pitch]
     if which == "up":
         wx.CallAfter(QLiveLib.getVar("CuesPanel").onMoveCueUp)
     elif which == "down":
         wx.CallAfter(QLiveLib.getVar("CuesPanel").onMoveCueDown)
Пример #37
0
 def onNew(self, evt):
     if self.askForSaving():
         QLiveLib.getVar("Soundfiles").cleanUpSoundsFolder()
         self.Hide()
         self.showIntro()
Пример #38
0
 def onTabulate(self, evt):
     QLiveLib.getVar("FxTracks").setSelectedTrack()
Пример #39
0
 def assignMidiCtl(self, ctlnum):
     interpTime = QLiveLib.getVar("globalInterpTime")
     self.slider.setMidiCtl(ctlnum)
     QLiveLib.getVar("MidiServer").bind("ctls", ctlnum, self.midi)
     self.setInterpValue(interpTime, True)
Пример #40
0
 def setBufferSize(self, evt):
     if QLiveLib.getVar("bufferSize") != evt.GetString():
         self.reinit_server = True
     QLiveLib.setVar("bufferSize", evt.GetString())
Пример #41
0
 def revertMidiAssignation(self):
     self.midiscanning = False
     QLiveLib.getVar("MidiServer").ctlscan(None)
     self.revertMidiBackgroundColour()
     QLiveLib.getVar("MidiServer").unbind("ctls", self.midictl, self.midi)
     self.setMidiCtl(None)
Пример #42
0
 def setnumOutputChannels(self, evt):
     if QLiveLib.getVar("nchnls") != int(evt.GetString()):
         self.reinit_server = True
     QLiveLib.setVar("nchnls", int(evt.GetString()))
Пример #43
0
 def setFirstPhysicalOutput(self, evt):
     if QLiveLib.getVar("defaultFirstOutput") != int(evt.GetString()):
         self.reinit_server = True
     QLiveLib.setVar("defaultFirstOutput", int(evt.GetString()))
Пример #44
0
 def setOutputDevice(self, evt):
     if QLiveLib.getVar("audioOutput") != evt.GetString():
         self.reinit_server = True
     QLiveLib.setVar("audioOutput", evt.GetString())
Пример #45
0
 def setAudioDriver(self, evt):
     if QLiveLib.getVar("audio") != evt.GetString():
         self.reinit_server = True
     QLiveLib.setVar("audio", evt.GetString())
     self.EnableDisablePortaudioOpts()
Пример #46
0
 def assignMidiCtl(self, ctlnum):
     self.setMidiCtl(ctlnum)
     QLiveLib.getVar("MidiServer").bind("ctls", ctlnum, self.midi)
Пример #47
0
    def MakeEnvPaneContent(self, panel):
        interpTime = QLiveLib.getVar("globalInterpTime")
        mainbox = wx.StaticBox(panel, -1, "")
        sizer = wx.StaticBoxSizer(mainbox, wx.VERTICAL)
        sizer.AddSpacer(5)

        headSizer = wx.BoxSizer(wx.HORIZONTAL)
        headSizer.AddStretchSpacer(1)
        self.envActiveCheck = wx.CheckBox(panel, -1, "Active:",
                                          style=wx.ALIGN_RIGHT)
        self.envActiveCheck.Bind(wx.EVT_CHECKBOX, self.envOnActivate)
        headSizer.Add(self.envActiveCheck, 0, wx.ALIGN_CENTER_HORIZONTAL)

        self.envChannelChecks = []
        statbox = wx.StaticBox(panel, -1, "Input Selections")
        selectorSizer = wx.StaticBoxSizer(statbox, wx.HORIZONTAL)
        for i in range(NUM_INPUTS):
            check = wx.CheckBox(panel, -1, str(i+1))
            check.Bind(wx.EVT_CHECKBOX, self.envOnCheckInputs)
            if i == 0:
                check.SetValue(1)
                self.envInputs[0] = 1
            self.envChannelChecks.append(check)
            selectorSizer.Add(check, 1, wx.EXPAND|wx.ALL, 5)

        interpLabel = wx.StaticText(panel, -1,
                                label="Input Interpolation Time in Seconds: ")
        self.envInInterpCtrl = NumericCtrl(panel, value=interpTime,
                                           interp=0, size=(80, -1),
                                           callback=self.envOnInputsInterp)
        interpSizer = wx.BoxSizer(wx.HORIZONTAL)
        interpSizer.Add(interpLabel, -1,
                        wx.LEFT|wx.RIGHT|wx.ALIGN_CENTER_VERTICAL, 5)
        interpSizer.Add(self.envInInterpCtrl)

        sampleList = ["Parameter Values", "Interpolation Times"]
        interpButton = wx.RadioBox(panel, -1, "",
                                   wx.DefaultPosition,
                                   wx.DefaultSize, sampleList, 2,
                                   wx.RA_SPECIFY_COLS | wx.NO_BORDER)
        interpButton.Bind(wx.EVT_RADIOBOX, self.envChangeParamMode)

        params = [["Threshold (dB)", -90, interpTime, self.envOnThresh],
                  ["Cutoff (Hz)", 20, interpTime, self.envOnCutoff],
                  ["Range Min", 0, interpTime, self.envOnMin],
                  ["Range Max", 1, interpTime, self.envOnMax]]
        self.envWidgets = []
        knobSizer = wx.BoxSizer(wx.HORIZONTAL)
        for param in params:
            numbox = wx.BoxSizer(wx.VERTICAL)
            label = wx.StaticText(panel, -1, label=param[0])
            ctrl = NumericCtrl(panel, value=param[1], interp=param[2],
                               size=(80, -1), callback=param[3])
            self.envWidgets.append(ctrl)
            numbox.Add(label, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 2)
            numbox.Add(ctrl, 0, wx.LEFT|wx.RIGHT|wx.EXPAND, 2)
            knobSizer.Add(numbox, 1, wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)

        sizer.Add(headSizer, 0, wx.EXPAND)
        sizer.Add(selectorSizer, 0, wx.EXPAND|wx.LEFT|wx.RIGHT|wx.BOTTOM, 5)
        sizer.Add(interpSizer, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
        sizer.Add(interpButton, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
        sizer.Add(knobSizer, 0, wx.EXPAND|wx.LEFT|wx.RIGHT, 5)
        panel.SetSizer(sizer)
Пример #48
0
    def __init__(self, parent, fxbox, parameters):
        style = wx.DEFAULT_FRAME_STYLE | wx.FRAME_FLOAT_ON_PARENT
        wx.Frame.__init__(self, parent, style=style)
        self.parent = parent
        self.fxbox = fxbox
        self.parameters = parameters
        self.last_enable = 1
        self.graph_object = None

        closeId = wx.NewId()

        tabId = wx.NewId()

        self.prevId = KEY_EVENT_FIRST_ID
        self.nextId = KEY_EVENT_FIRST_ID + 1
        self.cueZeroId = KEY_EVENT_FIRST_ID + 2
        self.cue1Id = KEY_EVENT_FIRST_ID + 3
        self.cue2Id = KEY_EVENT_FIRST_ID + 4
        self.cue3Id = KEY_EVENT_FIRST_ID + 5
        self.cue4Id = KEY_EVENT_FIRST_ID + 6
        self.cue5Id = KEY_EVENT_FIRST_ID + 7
        self.cue6Id = KEY_EVENT_FIRST_ID + 8
        self.cue7Id = KEY_EVENT_FIRST_ID + 9
        self.cue8Id = KEY_EVENT_FIRST_ID + 10
        self.cue9Id = KEY_EVENT_FIRST_ID + 11
        self.cue10Id = KEY_EVENT_FIRST_ID + 12
        accel_tbl = wx.AcceleratorTable([
            (wx.ACCEL_CTRL, ord('W'), closeId),
            (wx.ACCEL_NORMAL, wx.WXK_TAB, tabId),
            (wx.ACCEL_NORMAL, wx.WXK_LEFT, self.prevId),
            (wx.ACCEL_NORMAL, wx.WXK_RIGHT, self.nextId),
            (wx.ACCEL_NORMAL, wx.WXK_ESCAPE, self.cueZeroId),
            (wx.ACCEL_NORMAL, ord("1"), self.cue1Id),
            (wx.ACCEL_NORMAL, ord("2"), self.cue2Id),
            (wx.ACCEL_NORMAL, ord("3"), self.cue3Id),
            (wx.ACCEL_NORMAL, ord("4"), self.cue4Id),
            (wx.ACCEL_NORMAL, ord("5"), self.cue5Id),
            (wx.ACCEL_NORMAL, ord("6"), self.cue6Id),
            (wx.ACCEL_NORMAL, ord("7"), self.cue7Id),
            (wx.ACCEL_NORMAL, ord("8"), self.cue8Id),
            (wx.ACCEL_NORMAL, ord("9"), self.cue9Id),
            (wx.ACCEL_NORMAL, ord("0"), self.cue10Id)
        ])
        self.SetAcceleratorTable(accel_tbl)

        mainWin = QLiveLib.getVar("MainWindow")
        self.Bind(wx.EVT_MENU, mainWin.onTabulate, id=tabId)
        self.Bind(wx.EVT_MENU,
                  mainWin.onMoveCue,
                  id=KEY_EVENT_FIRST_ID,
                  id2=KEY_EVENT_FIRST_ID + 100)

        self.Bind(wx.EVT_MENU, self.onClose, id=closeId)
        self.Bind(wx.EVT_CLOSE, self.onClose)

        self.SetTitle("%s Parameter Controls" % self.fxbox.name)

        self.panel = wx.Panel(self)
        self.panel.SetBackgroundColour(BACKGROUND_COLOUR)

        self.sizer = wx.BoxSizer(wx.VERTICAL)

        # Head
        headSizer = wx.BoxSizer(wx.HORIZONTAL)
        headSizer.AddStretchSpacer(1)
        self.enable = wx.CheckBox(self.panel,
                                  -1,
                                  "Enable FX:",
                                  style=wx.ALIGN_RIGHT)
        self.enable.SetValue(1)
        self.enable.Bind(wx.EVT_CHECKBOX, self.enableFx)
        headSizer.Add(self.enable, 0, wx.TOP | wx.RIGHT, 5)
        self.sizer.Add(headSizer, 0, wx.EXPAND)

        self.sizer.Add(wx.StaticLine(self.panel, -1), 0, wx.ALL | wx.EXPAND, 5)

        # Selection boxes
        if self.parameters.has_key("inselect"):
            self.inChannelChecks = []
            statbox = wx.StaticBox(self.panel, -1, "Input Selections")
            selectorSizer = wx.StaticBoxSizer(statbox, wx.HORIZONTAL)
            labels = self.parameters["inselect"]
            for i in range(len(labels)):
                check = wx.CheckBox(self.panel, -1, labels[i])
                check.Bind(wx.EVT_CHECKBOX, self.onCheckInSelect)
                if i == 0:
                    check.SetValue(1)
                self.inChannelChecks.append(check)
                selectorSizer.Add(check, 1, wx.EXPAND | wx.ALL, 5)
            self.sizer.Add(selectorSizer, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 5)

            sampleList = ["Mono Track", "Multi-Channel Track"]
            self.chnlsButton = wx.RadioBox(self.panel, -1, "",
                                           wx.DefaultPosition, wx.DefaultSize,
                                           sampleList, 2,
                                           wx.RA_SPECIFY_COLS | wx.NO_BORDER)
            self.chnlsButton.Bind(wx.EVT_RADIOBOX, self.onChnlsRadioBox)
            self.sizer.Add(self.chnlsButton, 0, wx.LEFT, 5)

            self.sizer.Add(wx.StaticLine(self.panel), 0, wx.ALL | wx.EXPAND, 5)

        if self.parameters.has_key("outselect"):
            self.outChannelChecks = []
            statbox = wx.StaticBox(self.panel, -1, "Output Selections")
            selectorSizer = wx.StaticBoxSizer(statbox, wx.HORIZONTAL)
            labels = self.parameters["outselect"]
            for i in range(len(labels)):
                check = wx.CheckBox(self.panel, -1, labels[i])
                check.Bind(wx.EVT_CHECKBOX, self.onCheckOutSelect)
                if i == 0:
                    check.SetValue(1)
                self.outChannelChecks.append(check)
                selectorSizer.Add(check, 1, wx.EXPAND | wx.ALL, 5)
            self.sizer.Add(selectorSizer, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 5)

        if self.parameters.has_key("select"):
            self.selectedSoundfile = "None"
            soundfiles = QLiveLib.getVar("Soundfiles").getSoundFileObjects()
            choices = ["None"] + [str(snd.getId() + 1) for snd in soundfiles]
            popupSizer = wx.BoxSizer(wx.HORIZONTAL)
            popupTitle = wx.StaticText(self.panel, -1, "Choose a Soundfile:")
            popupSizer.Add(popupTitle, 0, wx.ALIGN_CENTER_VERTICAL | wx.ALL, 5)
            self.soundfilesPopup = wx.Choice(self.panel, -1, choices=choices)
            self.soundfilesPopup.SetSelection(0)
            self.soundfilesPopup.Bind(wx.EVT_CHOICE, self.chooseSoundfile)
            popupSizer.Add(self.soundfilesPopup, 0, wx.ALL, 5)
            self.sizer.Add(popupSizer, 0, wx.EXPAND | wx.LEFT | wx.RIGHT, 5)

        # Controller box
        if self.parameters.has_key("ctrls"):
            knobSizer = wx.BoxSizer(wx.HORIZONTAL)
            sampleList = ["Slider Values", "Interpolation Times"]
            self.interpButton = wx.RadioBox(self.panel, -1, "",
                                            wx.DefaultPosition, wx.DefaultSize,
                                            sampleList, 2,
                                            wx.RA_SPECIFY_COLS | wx.NO_BORDER)
            self.interpButton.Bind(wx.EVT_RADIOBOX, self.showMorphEvent)
            self.sizer.Add(self.interpButton, 0, wx.LEFT, 5)

            self.widgets = []
            for param in self.parameters["ctrls"]:
                slider = SliderWidget(self.panel, param, fxbox)
                self.widgets.append(slider)
                knobSizer.Add(slider, 0,
                              wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 5)
            self.sizer.Add(knobSizer, 0, wx.EXPAND)

        self.graph = Grapher(self.panel,
                             xlen=256,
                             yrange=(0, 1),
                             init=[(0, 0), (0.5, 0.5), (1, 0)],
                             mode=0,
                             outFunction=None)
        self.graph.SetSize((500, 200))
        self.graph.Hide()
        self.sizer.Add(self.graph, 1, wx.EXPAND | wx.ALL, 5)

        self.panel.SetSizer(self.sizer)

        self.frameSizer = wx.BoxSizer(wx.HORIZONTAL)
        self.frameSizer.Add(self.panel, 1, wx.EXPAND)
        self.SetSizerAndFit(self.frameSizer)

        self.Bind(wx.EVT_ENTER_WINDOW, self.getFocus)
        self.SetMinSize((500, -1))
        self.SetSize((500, -1))
Пример #49
0
    def __init__(self, parent, object=None, paramCallback=None):
        wx.Panel.__init__(self, parent, -1)
        cpstyle = wx.CP_DEFAULT_STYLE|wx.CP_NO_TLW_RESIZE
        self.SetBackgroundColour(BACKGROUND_COLOUR)

        interpTime = QLiveLib.getVar("globalInterpTime")

        # parameter object reference
        self.object = object
        self.paramCallback = paramCallback

        # global attributes
        self.mixingMethod = 0
        self.active = 0

        # envelope follower attributes
        self.envActive = 0
        self.envInputs = [0] * NUM_INPUTS
        self.envInputsInterp = interpTime
        self.envThreshold, self.envThresholdInterp = -90, interpTime
        self.envCutoff, self.envCutoffInterp = 20, interpTime
        self.envMin, self.envMinInterp = 0.0, interpTime
        self.envMax, self.envMaxInterp = 1.0, interpTime

        # breakpoint-function attributes
        self.bpfActive = 0
        self.bpfMode = 0
        self.bpfDur, self.bpfDurInterp = 1.0, interpTime
        self.bpfMin, self.bpfMinInterp = 0.0, interpTime
        self.bpfMax, self.bpfMaxInterp = 1.0, interpTime
        self.bpfFunction = [(0, 0.0), (512, 1.0)]

        title = wx.StaticText(self, label="Automation Controls")
        title.SetFont(wx.Font(12, wx.FONTFAMILY_SWISS, wx.FONTSTYLE_NORMAL,
                              wx.FONTWEIGHT_BOLD))

        methodChoices = ["Added to the main value",
                         "Multiplying the main value",
                         "Added and replace main value",
                         "Times and replace main value"]
        headSizer = wx.BoxSizer(wx.HORIZONTAL)
        headSizer.AddStretchSpacer(1)
        methodLabel = wx.StaticText(self, -1,
                                    label="Multiple Automations Mixing Method:")
        self.method = wx.Choice(self, -1, choices=methodChoices)
        self.method.SetSelection(0)
        self.method.Bind(wx.EVT_CHOICE, self.changeMixingMethod)
        headSizer.Add(methodLabel, 0, wx.RIGHT|wx.TOP, 5)
        headSizer.Add(self.method, 0, wx.ALIGN_CENTER_HORIZONTAL)

        # Collapsible Panes - TODO: remove those we won't use in the prototype?
        id = AUTOMATION_PANEL_FIRST_ID
        self.bpfCp = wx.CollapsiblePane(self, id, label="BPF", style=cpstyle)
        self.MakeBpfPaneContent(self.bpfCp.GetPane())
        self.envCp = wx.CollapsiblePane(self, id+1, label="Envelope Follower",
                                        style=cpstyle)
        self.MakeEnvPaneContent(self.envCp.GetPane())
#        self.lfoCp = wx.CollapsiblePane(self, id+2, label="LFO", style=cpstyle)
#        self.randCp = wx.CollapsiblePane(self, id+3, label="Random",
#                                         style=cpstyle)
#        self.pitCp = wx.CollapsiblePane(self, id+4, label="Pitch Follower",
#                                        style=cpstyle)
#        self.zeroCp = wx.CollapsiblePane(self, id+5, label="Zero-Crossing",
#                                         style=cpstyle)
#        self.centCp = wx.CollapsiblePane(self, id+6, label="Centroid",
#                                         style=cpstyle)

        self.Bind(wx.EVT_COLLAPSIBLEPANE_CHANGED, self.OnPaneChanged,
                  id=id, id2=id+1)

        sizer = wx.BoxSizer(wx.VERTICAL)
        sizer.Add(title, 0, wx.ALL|wx.CENTER, 5)
        sizer.Add(headSizer, 0, wx.ALL|wx.EXPAND, 5)
        sizer.Add(self.bpfCp, 0, wx.ALL|wx.EXPAND, 5)
        sizer.Add(self.envCp, 0, wx.ALL|wx.EXPAND, 5)
        #sizer.Add(self.lfoCp, 0, wx.ALL|wx.EXPAND, 5)
        #sizer.Add(self.randCp, 0, wx.ALL|wx.EXPAND, 5)
        #sizer.Add(self.pitCp, 0, wx.ALL|wx.EXPAND, 5)
        #sizer.Add(self.zeroCp, 0, wx.ALL|wx.EXPAND, 5)
        #sizer.Add(self.centCp, 0, wx.ALL|wx.EXPAND, 5)
        self.SetSizer(sizer)
Пример #50
0
 def enableFx(self, evt):
     self.fxbox.setEnable(evt.GetInt(), fromUser=True)
     QLiveLib.getVar("FxTracks").drawAndRefresh()
Пример #51
0
 def setSamplingRate(self, evt):
     if QLiveLib.getVar("sr") != evt.GetString():
         self.reinit_server = True
     QLiveLib.setVar("sr", evt.GetString())
Пример #52
0
 def setTitle(self, filename=""):
     if QLiveLib.getVar("locked"):
         state = "PLAY MODE"
     else:
         state = "EDIT MODE"
     self.SetTitle("QLive Session - " + filename + " - " + state)
Пример #53
0
 def getFocus(self, evt):
     if self.parameters.has_key("select"):
         soundfiles = QLiveLib.getVar("Soundfiles").getSoundFileObjects()
         choices = ["None"] + [str(snd.getId() + 1) for snd in soundfiles]
         self.soundfilesPopup.SetItems(choices)
         self.soundfilesPopup.SetStringSelection(self.selectedSoundfile)
Пример #54
0
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        self.reinit_server = False

        # Setting audio driver
        audioDriverDefault = QLiveLib.getVar("audio")
        audioDriverLabel = wx.StaticText(self, -1, "Audio driver:")
        self.audioDriverCB = wx.ComboBox(self, -1, audioDriverDefault,
                                         wx.DefaultPosition, wx.DefaultSize,
                                         AUDIO_DRIVERS,
                                         wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.audioDriverCB.Bind(wx.EVT_COMBOBOX, self.setAudioDriver,
                                self.audioDriverCB)

        # Portaudio: Audio Input devices
        self.inputDeviceLabel = wx.StaticText(self, -1,
                                              "Audio Input (portaudio):")

        availableAudioIns = []
        for d in QLiveLib.getVar("availableAudioInputs"):
            availableAudioIns.append(QLiveLib.ensureNFD(d))
        initInput = QLiveLib.ensureNFD(QLiveLib.getVar("audioInput"))
        self.inputDeviceCB = wx.ComboBox(self, -1, initInput,
                                         wx.DefaultPosition, wx.DefaultSize,
                                         availableAudioIns,
                                         wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.inputDeviceCB.Bind(wx.EVT_COMBOBOX, self.setInputDevice,
                                self.inputDeviceCB)

        # Portaudio: Audio Output devices
        self.outputDeviceLabel = wx.StaticText(self, -1,
                                               "Audio Output (portaudio):")
        availableAudioOuts = []
        for d in QLiveLib.getVar("availableAudioOutputs"):
            availableAudioOuts.append(QLiveLib.ensureNFD(d))
        initOutput = QLiveLib.ensureNFD(QLiveLib.getVar("audioOutput"))
        self.outputDeviceCB = wx.ComboBox(self, -1, initOutput,
                                          wx.DefaultPosition, wx.DefaultSize,
                                          availableAudioOuts,
                                          wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.outputDeviceCB.Bind(wx.EVT_COMBOBOX, self.setOutputDevice,
                                 self.outputDeviceCB)

        # Number of input channels
        self.numInputChannelsLabel = wx.StaticText(self, -1,
                                                     "Number of Input Channels:")

        initInputChannels = str(QLiveLib.getVar("inchnls"))
        self.numInputChannelsCB = wx.ComboBox(self, -1, initInputChannels,
                                              wx.DefaultPosition,
                                              wx.DefaultSize,
                                              [str(x) for x in range(9)],
                                              wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.numInputChannelsCB.Bind(wx.EVT_COMBOBOX,
                                     self.setnumInputChannels,
                                     self.numInputChannelsCB)

        # Number of output channels
        self.numOutputChannelsLabel = wx.StaticText(self, -1,
                                                    "Number of Output Channels:")

        initOutputChannels = str(QLiveLib.getVar("nchnls"))
        self.numOutputChannelsCB = wx.ComboBox(self, -1, initOutputChannels,
                                               wx.DefaultPosition,
                                               wx.DefaultSize,
                                               [str(x) for x in range(9)],
                                               wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.numOutputChannelsCB.Bind(wx.EVT_COMBOBOX,
                                      self.setnumOutputChannels,
                                      self.numOutputChannelsCB)

        # First physical input device
        self.firstPhysicalInputLabel = wx.StaticText(self, -1,
                                                     "First Physical Input:")

        initPysicalInput = str(QLiveLib.getVar("defaultFirstInput"))
        self.firstPhysicalInputCB = wx.ComboBox(self, -1, initPysicalInput,
                                            wx.DefaultPosition,
                                            wx.DefaultSize,
                                            [str(x) for x in range(36)],
                                            wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.firstPhysicalInputCB.Bind(wx.EVT_COMBOBOX,
                                       self.setFirstPhysicalInput,
                                       self.firstPhysicalInputCB)

        # First physical output device
        self.firstPhysicalOutputLabel = wx.StaticText(self, -1,
                                                      "First Physical Output:")

        initPysicalOutput = str(QLiveLib.getVar("defaultFirstOutput"))
        self.firstPhysicalOutputCB = wx.ComboBox(self, -1, initPysicalOutput,
                                             wx.DefaultPosition,
                                             wx.DefaultSize,
                                             [str(x) for x in range(36)],
                                             wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.firstPhysicalOutputCB.Bind(wx.EVT_COMBOBOX,
                                        self.setFirstPhysicalOutput,
                                        self.firstPhysicalOutputCB)

        # Setting buffer size
        bufferSizeDefault = QLiveLib.getVar("bufferSize")
        bufferSizeLabel = wx.StaticText(self, -1, "Buffer size:")
        self.bufferSizeCB = wx.ComboBox(self, -1, bufferSizeDefault,
                                        wx.DefaultPosition, wx.DefaultSize,
                                        BUFFER_SIZES,
                                        wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.bufferSizeCB.Bind(wx.EVT_COMBOBOX, self.setBufferSize,
                               self.bufferSizeCB)

        # Setting sampling rate
        samplingRateDefault = QLiveLib.getVar("sr")
        samplingRateLabel = wx.StaticText(self, -1, "Sampling rate:")
        self.samplingRateCB = wx.ComboBox(self, -1, samplingRateDefault,
                                          wx.DefaultPosition, wx.DefaultSize,
                                          SAMPLE_RATES,
                                          wx.CB_READONLY|wx.TE_PROCESS_ENTER)
        self.samplingRateCB.Bind(wx.EVT_COMBOBOX, self.setSamplingRate,
                                 self.samplingRateCB)

        # Setting duplex True/False
        duplexDefault = QLiveLib.getVar("duplex")
        duplexLabel = wx.StaticText(self, -1, "Duplex:")
        self.duplexCB = wx.CheckBox(self, -1, "", style=wx.ALIGN_LEFT)
        self.duplexCB.SetValue(bool(int(QLiveLib.getVar("duplex"))))
        self.duplexCB.Bind(wx.EVT_CHECKBOX, self.setDuplex, self.duplexCB)

        # Main box
        box = wx.StaticBox(self, -1, "Audio settings")

        # Sizers
        vsizer = wx.StaticBoxSizer(box, wx.VERTICAL)
        hsizerAudioDriver = wx.BoxSizer(wx.HORIZONTAL)
        hsizerInputDevice = wx.BoxSizer(wx.HORIZONTAL)
        hsizerOutputDevice = wx.BoxSizer(wx.HORIZONTAL)
        hsizerNumInputChannels = wx.BoxSizer(wx.HORIZONTAL)
        hsizerNumOutputChannels = wx.BoxSizer(wx.HORIZONTAL)
        hsizerFirstPhysicalInput = wx.BoxSizer(wx.HORIZONTAL)
        hsizerFirstPhysicalOutput = wx.BoxSizer(wx.HORIZONTAL)
        hsizerBufferSize  = wx.BoxSizer(wx.HORIZONTAL)
        hsizerSamplingRate  = wx.BoxSizer(wx.HORIZONTAL)
        hsizerDuplex  = wx.BoxSizer(wx.HORIZONTAL)

        hsizerAudioDriver.Add(audioDriverLabel, -1, wx.ALL|wx.ALIGN_CENTER, 3)
        hsizerAudioDriver.Add(self.audioDriverCB, -1, wx.ALL, 3)

        hsizerInputDevice.Add(self.inputDeviceLabel, -1,
                              wx.ALL|wx.ALIGN_CENTER, 3)
        hsizerInputDevice.Add(self.inputDeviceCB, -1, wx.ALL, 3)

        hsizerOutputDevice.Add(self.outputDeviceLabel, -1,
                               wx.ALL|wx.ALIGN_CENTER, 3)
        hsizerOutputDevice.Add(self.outputDeviceCB, -1, wx.ALL, 3)

        hsizerNumInputChannels.Add(self.numInputChannelsLabel, -1,
                                   wx.ALL|wx.ALIGN_CENTER, 3)
        hsizerNumInputChannels.Add(self.numInputChannelsCB, -1, wx.ALL, 3)

        hsizerNumOutputChannels.Add(self.numOutputChannelsLabel, -1,
                                    wx.ALL|wx.ALIGN_CENTER, 3)
        hsizerNumOutputChannels.Add(self.numOutputChannelsCB, -1, wx.ALL, 3)

        hsizerFirstPhysicalInput.Add(self.firstPhysicalInputLabel, -1,
                                     wx.ALL|wx.ALIGN_CENTER, 3)
        hsizerFirstPhysicalInput.Add(self.firstPhysicalInputCB, -1, wx.ALL, 3)

        hsizerFirstPhysicalOutput.Add(self.firstPhysicalOutputLabel, -1,
                                      wx.ALL|wx.ALIGN_CENTER, 3)
        hsizerFirstPhysicalOutput.Add(self.firstPhysicalOutputCB, -1, wx.ALL, 3)

        hsizerBufferSize.Add(bufferSizeLabel, -1, wx.ALL|wx.ALIGN_CENTER , 3)
        hsizerBufferSize.Add(self.bufferSizeCB, -1, wx.ALL, 3)

        hsizerSamplingRate.Add(samplingRateLabel, -1,
                               wx.ALL|wx.ALIGN_CENTER , 3)
        hsizerSamplingRate.Add(self.samplingRateCB, -1, wx.ALL, 3)

        hsizerDuplex.Add(duplexLabel, -1, wx.ALL|wx.ALIGN_CENTER , 3)
        hsizerDuplex.Add(self.duplexCB, -1, wx.ALL, 3)

        vsizer.AddSpacer(5)

        m = "The changes will be effective when the preferences will be closed."
        vsizer.Add(wx.StaticText(self, -1, m), 0, wx.ALIGN_CENTER_HORIZONTAL)

        vsizer.AddSpacer(5)
        vsizer.Add(hsizerAudioDriver, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerInputDevice, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerOutputDevice, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerNumInputChannels, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerNumOutputChannels, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerFirstPhysicalInput, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerFirstPhysicalOutput, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerBufferSize, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerSamplingRate, 0, wx.ALL|wx.EXPAND, 0)
        vsizer.Add(hsizerDuplex, 0, wx.ALL|wx.EXPAND, 0)

        border = wx.BoxSizer()
        border.Add(vsizer, -1, wx.EXPAND|wx.ALL, 5)
        self.SetSizerAndFit(border)

        self.EnableDisablePortaudioOpts()
Пример #55
0
 def setEnableState(self, x):
     self.enable.SetValue(x)
     if x != self.last_enable:
         self.last_enable = x
         QLiveLib.getVar("FxTracks").drawAndRefresh()
Пример #56
0
 def onAudioButton(self, evt):
     server = QLiveLib.getVar("AudioServer")
     server.start(evt.GetInt())
     QLiveLib.getVar("CuesPanel").loadCurrentCue()
     self.audioButton.SetLabel(["Start Audio", "Stop Audio"][evt.GetInt()])
Пример #57
0
 def onNewCue(self, evt):
     QLiveLib.getVar("CuesPanel").onNewCue()
Пример #58
0
 def onMoveCueDown(self, evt):
     if QLiveLib.getVar("MidiLearnMode"):
         self.midiLearn(evt)
         return
     QLiveLib.getVar("CuesPanel").onMoveCueDown()
Пример #59
0
 def onSave(self, evt):
     self.saveFile(QLiveLib.getVar("currentProject"))
Пример #60
0
 def onLinkSliders(self, evt):
     QLiveLib.getVar("MixerPanel").linkInputs(evt.GetInt())
     QLiveLib.getVar("MixerPanel").linkOutputs(evt.GetInt())