Example #1
0
 def keyDown(self, event):
     if QLiveLib.getVar("MidiLearnMode"):
         if event.GetKeyCode() in [wx.WXK_BACK, wx.WXK_DELETE,
                                     wx.WXK_NUMPAD_DELETE]:
             self.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]
                 self.labelChanged()
         elif event.GetKeyCode() < 256:
             char = chr(event.GetKeyCode())
         if char in ['0','1','2','3','4','5','6','7','8','9','.','-']:
             self.new += char
             self.labelChanged()
         elif event.GetKeyCode() in [wx.WXK_RETURN, wx.WXK_NUMPAD_ENTER]:
             self.SetValue(eval(self.new))
             self.new = ''
             self.selected = False
             QLiveLib.setVar("CanProcessCueKeys", True)
         wx.CallAfter(self.Refresh)
     event.Skip()
Example #2
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])
Example #3
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)
Example #4
0
 def onClose(self, evt):
     if self.tabAudio.reinit_server:
         try:
             QLiveLib.getVar("AudioServer").reinitServer()
         except:
             pass
     self.Destroy()
Example #5
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)
Example #6
0
 def reinitServer(self):
     mixer = QLiveLib.getVar("AudioMixer")
     mixerPanel = QLiveLib.getVar("MixerPanel")
     restart = False
     reboot = False
     if self.isStarted():
         restart = True
         self.start(False)
         time.sleep(.1)
     mixer.deleteMixer()
     if self.isBooted():
         reboot = True
         self.shutdown()
         time.sleep(.1)
     sr, bufferSize, audio, jackname, nchnls, inchnls, duplex, outdev, indev, firstin, firstout = self.getPrefs(
     )
     self.server.reinit(audio=audio, jackname=jackname)
     self.server.setSamplingRate(sr)
     self.server.setBufferSize(bufferSize)
     self.server.setNchnls(nchnls)
     self.server.setDuplex(duplex)
     if inchnls != None:
         self.server.setIchnls(inchnls)
     self.server.deactivateMidi()
     self.server.setOutputDevice(outdev)
     self.server.setInputOffset(firstin)
     self.server.setOutputOffset(firstout)
     if duplex:
         self.server.setInputDevice(indev)
     if reboot:
         self.server.boot()
     mixer.createMixer()
     mixerPanel.connectSliders()
     if restart:
         self.start(True)
Example #7
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)
Example #8
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)
Example #9
0
    def __init__(self, init=0, inter=None):
        # Globals
        self.server = QLiveLib.getVar("AudioServer")
        self.mixer = QLiveLib.getVar("AudioMixer")
        interpTime = QLiveLib.getVar("globalInterpTime")
        self.mixmethod = -1
        # Main value
        if inter == None:
            self.param = SigTo(init, interpTime, init)
        else:
            self.param = SigTo(init, inter, init)
        # Envelope follower signal chain
        self.envInputs = [0] * NUM_INPUTS
        self.envActive = 0
        self.envThreshold = SigTo(-90, time=interpTime, init=-90)
        self.envCutoff = SigTo(20, time=interpTime, init=20)
        self.envMin = SigTo(0, time=interpTime, init=0)
        self.envMax = SigTo(1, time=interpTime, init=1)
        self.envInput = Gate(Sig(0), thresh=self.envThreshold)
        self.envFol = Follower(self.envInput, freq=self.envCutoff)
        self.env = Scale(self.envFol, 0, 1, self.envMin, self.envMax)
        self.envStop()

        self.auto = Sig(0)
        self.output = Interp(self.param, self.auto, 0)
Example #10
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])
Example #11
0
 def output(self, evt):
     if self.previous in ["", ".", "-"]:
         self.previous = "0"
         self.value = 0
         self.ChangeValue(self.previous)
     if self.callback is not None:
         self.callback(self.value, self.interp)
     QLiveLib.setVar("CanProcessCueKeys", True)
Example #12
0
 def deleteButton(self, but):
     if but.isInput:
         self.buttonsInputs.remove(but)
     else:
         self.buttonsFxs.remove(but)
     but.delete()
     self.checkTrackSize()
     QLiveLib.getVar("FxTracks").drawAndRefresh()
Example #13
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)
Example #14
0
 def output(self, evt):
     if self.previous in ["", ".", "-"]:
         self.previous = "0"
         self.value = 0
         self.ChangeValue(self.previous)
     if self.callback is not None:
         self.callback(self.value, self.interp)
     QLiveLib.setVar("CanProcessCueKeys", True)
Example #15
0
 def drawAndRefresh(self, restart=True):
     self.draw()
     wx.CallAfter(self.Refresh)
     server = QLiveLib.getVar("AudioServer")
     if restart and server.isStarted():
         server.start(False)
         server.start(True)
         QLiveLib.getVar("CuesPanel").loadCurrentCue()
Example #16
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)
Example #17
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)
Example #18
0
 def onCueCut(self, evt):
     cues = QLiveLib.getVar("CuesPanel")
     current = cues.getCurrentCue()
     if current == 0:
         QLiveLib.PRINT("Can't cut cue number 0.")
         return
     cues.onCopyCue()
     cues.onDelCue()
Example #19
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)
Example #20
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)
Example #21
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()
Example #22
0
 def deleteButton(self, but):
     # TODO: 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()
Example #23
0
 def setMidiLearn(self, state):
     self.midiLearn = state
     if self.midiLearn:
         QLiveLib.setVar("CanProcessCueKeys", False)
         self.backColour = MIDILEARN_COLOUR
     else:
         QLiveLib.setVar("CanProcessCueKeys", True)
         self.backColour = CONTROLSLIDER_BACK_COLOUR
     wx.CallAfter(self.Refresh)
Example #24
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)
Example #25
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()
Example #26
0
 def setMidiLearn(self, state):
     self.midiLearn = state
     if self.midiLearn:
         QLiveLib.setVar("CanProcessCueKeys", False)
         self.backColour = MIDILEARN_COLOUR
     else:
         QLiveLib.setVar("CanProcessCueKeys", True)
         self.backColour = CONTROLSLIDER_BACK_COLOUR
     wx.CallAfter(self.Refresh)
Example #27
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()
Example #28
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()
Example #29
0
 def createBoxObjects(self):
     tracks = QLiveLib.getVar("FxTracks").getTracks()
     for track in tracks:
         trackchnls = 1
         for but in track.getButtonInputs():
             chnls = 1
             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
             elif name == "Soundfile":
                 id = but.getSoundfileId()
                 if id is not None:
                     chnls = self.soundfiles[id].getChnls()
                 else:
                     chnls = 1
             elif name.startswith("MS-"):
                 chnls = 2
             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)
                 if name == "AudioIn":
                     obj.setGains(inchnls)
                 if name.startswith("MS-"):
                     QLiveLib.getVar("MidiServer").registerMidiSynth(
                         obj, (0, 127))
             trackchnls = max(trackchnls, chnls)
         for but in track.getButtonFxs():
             name = but.name
             category = but.category
             if not name:
                 name = "None"
             if name != "None":
                 ctrls = FX_DICT[category][name]["ctrls"]
                 values = but.getCurrentValues()
                 if values is not None:
                     obj = AUDIO_OBJECTS[name](trackchnls, ctrls, values,
                                               but.getCurrentInterps())
                     but.setAudioRef(obj)
                     self.audioObjects.append(obj)
                     if name == "AudioOut":
                         obj.setGains(but.getOutChannels())
                     # TODO: we will need a better algorithm for spatialization.
                     if name in ["Panning", "StereoVerb"]:
                         trackchnls *= 2
Example #30
0
 def DoubleClick(self, event):
     if QLiveLib.getVar("MidiLearnMode"):
         return
     w, h = self.GetSize()
     pos = event.GetPosition()
     if self.textrect.Contains(pos):
         QLiveLib.setVar("CanProcessCueKeys", False)
         self.selected = True
     wx.CallAfter(self.Refresh)
     event.Skip()
Example #31
0
 def onApply(self, evt):
     cue = self.cueButton.GetSelection() # 0 = current, 1 = all
     track = self.trackButton.GetSelection() # 0 = current, 1 = all, 2 = none
     snd = self.sndButton.GetSelection() # 0 = current, 1 = all = 2 = none
     value = self.knob.GetValue() # interpolation time in secs
     meth = self.method.GetSelection() # 0 = overwrite, 1 = add, 2 = sub
     if meth == 0:
         QLiveLib.setVar("globalInterpTime", value)
     if self.callback is not None:
         self.callback(cue, track, snd, value, meth)
Example #32
0
 def DoubleClick(self, event):
     if QLiveLib.getVar("MidiLearnMode"):
         return
     w, h = self.GetSize()
     pos = event.GetPosition()
     if self.textrect.Contains(pos):
         QLiveLib.setVar("CanProcessCueKeys", False)
         self.selected = True
     wx.CallAfter(self.Refresh)
     event.Skip()
Example #33
0
 def onApply(self, evt):
     cue = self.cueButton.GetSelection()  # 0 = current, 1 = all
     track = self.trackButton.GetSelection(
     )  # 0 = current, 1 = all, 2 = none
     snd = self.sndButton.GetSelection()  # 0 = current, 1 = all = 2 = none
     value = self.knob.GetValue()  # interpolation time in secs
     meth = self.method.GetSelection()  # 0 = overwrite, 1 = add, 2 = sub
     if meth == 0:
         QLiveLib.setVar("globalInterpTime", value)
     if self.callback is not None:
         self.callback(cue, track, snd, value, meth)
Example #34
0
 def SetValue(self, value, propagate=True):
     self.propagate = propagate
     if self.HasCapture():
         self.ReleaseMouse()
     value = clamp(value, self.minvalue, self.maxvalue)
     t = tFromValue(value, self.minvalue, self.maxvalue)
     self.value = interpFloat(t, self.minvalue, self.maxvalue)
     self.clampPos()
     self.selected = False
     QLiveLib.setVar("CanProcessCueKeys", True)
     self.valueChanged()
     wx.CallAfter(self.Refresh)
Example #35
0
 def SetValue(self, value, propagate=True):
     self.propagate = propagate
     if self.HasCapture():
         self.ReleaseMouse()
     value = clamp(value, self.minvalue, self.maxvalue)
     t = tFromValue(value, self.minvalue, self.maxvalue)
     self.value = interpFloat(t, self.minvalue, self.maxvalue)
     self.clampPos()
     self.selected = False
     QLiveLib.setVar("CanProcessCueKeys", True)
     self.valueChanged()
     wx.CallAfter(self.Refresh)
Example #36
0
 def MouseMotion(self, evt):
     if QLiveLib.getVar("MidiLearnMode"):
         return
     posY = evt.GetPosition()[1]
     h = self.GetSize()[1] - self.meterOffset
     if evt.LeftIsDown() and evt.Dragging():
         self.pos = clamp(posY, self.knobHalfSize, h-self.knobHalfSize)
         self.value = self.scale()
         self.selected = False
         QLiveLib.setVar("CanProcessCueKeys", True)
         self.valueChanged()
         wx.CallAfter(self.Refresh)
Example #37
0
 def MouseMotion(self, evt):
     if QLiveLib.getVar("MidiLearnMode"):
         return
     posY = evt.GetPosition()[1]
     h = self.GetSize()[1] - self.meterOffset
     if evt.LeftIsDown() and evt.Dragging():
         self.pos = clamp(posY, self.knobHalfSize, h-self.knobHalfSize)
         self.value = self.scale()
         self.selected = False
         QLiveLib.setVar("CanProcessCueKeys", True)
         self.valueChanged()
         wx.CallAfter(self.Refresh)
Example #38
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()
Example #39
0
 def OnClose(self, evt):
     self.timer.Stop()
     if not self.askForSaving():
         return
     if self.audioServer.isStarted():
         self.audioServer.stop()
         time.sleep(0.25)
     if self.audioServer.isBooted():
         self.audioServer.shutdown()
         time.sleep(0.25)
     QLiveLib.saveVars()
     self.tracks.close()
     self.Destroy()
Example #40
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)
Example #41
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()
Example #42
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()
Example #43
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()
Example #44
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())
Example #45
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()
Example #46
0
    def __init__(self,
                 id,
                 filename,
                 loopmode=0,
                 transpo=1,
                 gain=0,
                 playing=0,
                 directout=True,
                 startpoint=0,
                 endpoint=-1,
                 crossfade=5,
                 channel=0):
        interpTime = QLiveLib.getVar("globalInterpTime")
        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
            self.sndchnls = -1
        else:
            self.valid = True
            self.duration = info[1]
            self.sndchnls = info[3]
        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.transpox = interpTime
        self.gainx = interpTime
        self.transpoDict = None
        self.gainDict = None

        self.showInterp = 0

        self.playerRef = None
        self.transpoAutoWindow = None
        self.gainAutoWindow = None

        self.cues = {}
        self.copied = {}
        currentCue = QLiveLib.getVar("CuesPanel").getCurrentCue()
        self.addCue(0)
        self.addCue(currentCue)
Example #47
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)
Example #48
0
 def loadFile(self, path):
     with open(path, "r") as f:
         magicline = f.readline()
     if magicline != QLIVE_MAGIC_LINE:
         print "The file loaded is not a valid QLive file."
         return
     self.tracks.close()
     execfile(path, globals())
     if path == NEW_FILE_PATH:
         QLiveLib.setVar("currentProject", "")
         QLiveLib.setVar("projectFolder", "")
     else:
         QLiveLib.setVar("currentProject", path)
         QLiveLib.setVar("projectFolder", os.path.dirname(path))
         self.newRecent(path)
     self.saveState = copy.deepcopy(dictSave)
     if "soundfiles" in self.saveState:
         self.soundfiles.setSaveState(self.saveState["soundfiles"])
     self.tracks.setSaveState(self.saveState["tracks"])
     self.cues.setSaveDict(self.saveState["cues"])
     self.mixer.setSaveDict(self.saveState["mixer"])
     self.controlPanel.setSaveState(self.saveState.get("control", {}))
     #self.audioServer.setSaveState(self.saveState.get("server", {}))
     linkMenuItem = self.GetMenuBar().FindItemById(LINK_STEREO_ID)
     linkMenuItem.Check(dictSave["mixer"].get("inputLinked", False))
Example #49
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()
Example #50
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())
Example #51
0
 def DoubleClick(self, event):
     if self._enable:
         w, h = self.GetSize()
         pos = event.GetPosition()
         reclab = wx.Rect(3, 60, w-3, 10)
         recpt = wx.Rect(self.knobPointPos[0]-3,
                         self.knobPointPos[1]-3, 9, 9)
         if reclab.Contains(pos):
             self.selected = True
             QLiveLib.setVar("CanProcessCueKeys", False)
         elif recpt.Contains(pos):
             self.mode = (self.mode+1) % 3
         wx.CallAfter(self.Refresh)
     event.Skip()
Example #52
0
 def OnClose(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.saveVars()
     self.tracks.close()
     self.Destroy()
Example #53
0
 def onExportMEI(self, evt):
     if QLiveLib.getVar("currentProject"):
         filepath = os.path.split(QLiveLib.getVar("currentProject"))
     else:
         filepath = os.path.join(os.path.expanduser("~"),
                                 "qlive_project.mei")
         filepath = os.path.split(filepath)
     dlg = wx.FileDialog(self, "Export Qlive Projet in MEI format",
                         filepath[0], os.path.splitext(filepath[1])[0]+".mei",
                         "MEI files (*.mei)|*.mei",
                         style=wx.SAVE|wx.FD_OVERWRITE_PROMPT)
     if dlg.ShowModal() == wx.ID_OK:
         path = dlg.GetPath()
         self.saveMEI(path)
     dlg.Destroy()
Example #54
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()
Example #55
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()
Example #56
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()
Example #57
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()
Example #58
0
    def reinitServer(self):
        mixer = QLiveLib.getVar("AudioMixer")
        mixerPanel = QLiveLib.getVar("MixerPanel")
        restart = False
        reboot = False
        if self.isStarted():
            restart = True
            self.start(False)
            time.sleep(.1)
        mixer.deleteMixer()
        if self.isBooted():
            reboot = True
            self.shutdown()
            time.sleep(.1)

        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]
        midi = prefs[11]

        self.server.reinit(audio=audio, midi=midi, jackname=jackname)
        self.server.setSamplingRate(sr)
        self.server.setBufferSize(bufferSize)
        self.server.setNchnls(nchnls)
        self.server.setDuplex(duplex)
        if inchnls != None:
            self.server.setIchnls(inchnls)
        self.server.deactivateMidi()
        self.server.setOutputDevice(outdev)
        self.server.setInputOffset(firstin)
        self.server.setOutputOffset(firstout)
        if duplex:
            self.server.setInputDevice(indev)
        if reboot:
            self.server.boot()
        mixer.createMixer()
        mixerPanel.connectSliders()
        if restart:
            self.start(True)
Example #59
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()
Example #60
0
    def OnLabelRightClick(self, evt):
        row = evt.GetRow()
        if row != -1 and row < len(self.objects):
            actions = [("Duplicate Row", wx.ITEM_NORMAL),
                       ("Delete Row", wx.ITEM_NORMAL),
                       ("Show Parameter Values", wx.ITEM_RADIO),
                       ("Show Interpolation Times", wx.ITEM_RADIO),
                       ("Show Automations for Transpo Parameter",
                        wx.ITEM_NORMAL),
                       ("Show Automations for Gain Parameter", wx.ITEM_NORMAL)]
            self.selRow = row
            menu = wx.Menu()
            for i, act in enumerate(actions):
                menu.Append(i + 1, act[0], kind=act[1])
                if i in [1, 3]:
                    menu.AppendSeparator()
            menu.Check(self.objects[self.selRow].getShowInterp() + 3, True)
            if QLiveLib.getVar("locked"):
                menu.Enable(1, False)
                menu.Enable(2, False)

            menu.Bind(wx.EVT_MENU, self.doLabelAction, id=1, id2=i + 1)
            self.PopupMenu(menu, evt.GetPosition())
            menu.Destroy()
        evt.Skip()