Пример #1
0
 def __init__(self, dialDict, buttonDict):
     '''
     Constructor
     '''
     self.dialDict = dialDict
     self.buttonDict = buttonDict
     self.midiSelectedInputDevicesDict = {}
     self.midiSelectedOutputDevice = None 
     self.midiOutputChannel = None
     self.midiInputChannel = None
     self.currentPatch = meeblipPatch()
     self.currentFile = None
     self.midiInputMutex = QtCore.QMutex()
Пример #2
0
    def midiImport(self, mainWindowInstance):
        if mainWindowInstance.ui.action_Save.isEnabled():
            reply = QtGui.QMessageBox.question(
                mainWindowInstance,
                "Import MIDI patch",
                "Current patch is not saved.  Do you wish to continue?",
                QtGui.QMessageBox.Yes,
                QtGui.QMessageBox.No,
            )
            if reply == QtGui.QMessageBox.No:
                return

        filename = QtGui.QFileDialog.getOpenFileName(filter="*.mid")
        try:
            if filename:
                with open(filename, "rb") as f:
                    try:
                        pattern = midiwrite.read_midifile(f)  # reads all events from file
                        midiImportPatch = meeblipPatch()
                        ccList = [k for k in xrange(14, 96) if k not in range(30, 48) + range(56, 58) + range(62, 65)]
                        for event in pattern[0]:
                            if isinstance(event, midiwrite.ControlChangeEvent):
                                cc = event.get_control()
                                if cc in ccList:
                                    midiImportPatch.patchCCDict[cc] = event.get_value()
                                    ccList.remove(cc)
                        if not ccList:
                            self.currentPatch = midiImportPatch
                            self.currentPatch.name = filename.split("/")[-1].split(".")[0]
                            self.restorePatchSettings(mainWindowInstance, self.currentPatch)
                        else:
                            raise Warning, "Patch data not found."

                    except IOError as (errno, strerror):
                        QtGui.QMessageBox.warning(
                            mainWindowInstance,
                            "File read error: %s" % errno,
                            "Error reading from file %s:\n %s" % (unicode(filename), (unicode(strerror))),
                        )
                    except (TypeError, Warning) as e:
                        QtGui.QMessageBox.warning(
                            mainWindowInstance,
                            "File read error",
                            "Error parsing MIDI data from file %s:\n %s" % (unicode(filename), (unicode(e))),
                        )
                    except:
                        QtGui.QMessageBox.warning(
                            mainWindowInstance,
                            "File read error",
                            "Unknown error reading from file %s." % unicode(filename),
                        )
Пример #3
0
 def new(self, mainWindowInstance):
     if mainWindowInstance.ui.action_Save.isEnabled():
         reply = QtGui.QMessageBox.question(mainWindowInstance, "Create new patch", "Current patch is not saved.  Do you wish to continue?", 
                                            QtGui.QMessageBox.Yes, QtGui.QMessageBox.No)
         if reply == QtGui.QMessageBox.No:
             return 
     for dial in self.dialDict:
         dialWidget = getattr(mainWindowInstance.ui, dial)
         dialWidget.setValue(0)
     for button, value in self.buttonDict.iteritems():
         if value[1] == mainWindowInstance.offValue:
             buttonWidget = getattr(mainWindowInstance.ui, button)
             buttonWidget.setChecked(True)                
               
     self.currentFile = None
     self.currentPatch = meeblipPatch()
     mainWindowInstance.ui.action_Save.setEnabled(False)
     mainWindowInstance.setWindowTitle("New Patch")
     mainWindowInstance.ui.action_New.setEnabled(False)
Пример #4
0
    def new(self, mainWindowInstance):
        if mainWindowInstance.ui.action_Save.isEnabled():
            reply = QtGui.QMessageBox.question(
                mainWindowInstance,
                "Create new patch",
                "Current patch is not saved.  Do you wish to continue?",
                QtGui.QMessageBox.Yes,
                QtGui.QMessageBox.No,
            )
            if reply == QtGui.QMessageBox.No:
                return

        # set all knobs and slider to zero
        for dial, cc in self.dialDict.iteritems():
            midiEnable = mainWindowInstance.midiEnable
            mainWindowInstance.midiEnable = 0
            dialWidget = getattr(mainWindowInstance.ui, dial)
            dialWidget.setValue(0)
            mainWindowInstance.midiEnable = midiEnable
            self.sendMidi(cc, 0)

        # set all switches to off
        for button, value in self.buttonDict.iteritems():
            if value[1] == mainWindowInstance.offValue:
                midiEnable = mainWindowInstance.midiEnable
                mainWindowInstance.midiEnable = 0
                buttonWidget = getattr(mainWindowInstance.ui, button)
                buttonWidget.setChecked(True)
                mainWindowInstance.midiEnable = midiEnable
                self.sendMidi(value[0], value[1])

        self.currentFile = None
        self.currentPatch = meeblipPatch()
        mainWindowInstance.ui.action_Save.setEnabled(False)
        mainWindowInstance.setWindowTitle("New Patch")
        mainWindowInstance.ui.action_New.setEnabled(False)