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()
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), )
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)
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)