diff --git a/template/engine/ly2cbox.py b/template/engine/ly2cbox.py index 7e3ecbe..90b72da 100644 --- a/template/engine/ly2cbox.py +++ b/template/engine/ly2cbox.py @@ -26,6 +26,7 @@ This is mostly meant for development and testing. #Standard Library Modules import re +from typing import Dict #Third Party Modules from calfbox import cbox @@ -35,10 +36,10 @@ from . import pitch from .duration import DB, DL, D1, D2, D4, D8, D16, D32, D64, D128 -lyToMidi = {} #filled for all pitches on startup, below -for ly, _pitch in pitch.ly2pitch.items(): +lyToMidi:Dict[str,int] = {} #filled for all pitches on startup, below +for lyPitchString, _pitch in pitch.ly2pitch.items(): octOffset = (pitch.octave(_pitch) +1) * 12 #twelve tones per midi octave - lyToMidi[ly] = octOffset + pitch.halfToneDistanceFromC(_pitch) + lyToMidi[lyPitchString] = octOffset + pitch.halfToneDistanceFromC(_pitch) lyToTicks = { @@ -68,7 +69,7 @@ def pattern(lilypondString:str, channel, velocity:int=100): """ Return a cbox pattern a python byte data type with midi data for cbox. - + Channel is 1-16.""" #cbox.Pattern.serialize_event(position, midibyte1 (noteon), midibyte2(pitch), midibyte3(velocity)) channel -= 1 @@ -79,7 +80,7 @@ def pattern(lilypondString:str, channel, velocity:int=100): patternBlob += cbox.Pattern.serialize_event(tickCounter, 0x90+channel, midiPitch, velocity) # note on patternBlob += cbox.Pattern.serialize_event(endTick, 0x80+channel, midiPitch, velocity) # note off tickCounter = tickCounter + durationInTicks #no -1 for the next note - + pattern = cbox.Document.get_song().pattern_from_blob(patternBlob, tickCounter) #return patternBlob, startTick return pattern diff --git a/template/engine/sampler_sf2.py b/template/engine/sampler_sf2.py index 120c5bf..fe43aa6 100644 --- a/template/engine/sampler_sf2.py +++ b/template/engine/sampler_sf2.py @@ -25,6 +25,8 @@ import logging; logger = logging.getLogger(__name__); logger.info("import") #Python Standard Lib import os.path +from os import PathLike +from typing import List, Dict, Union #Third Party from calfbox import cbox @@ -48,9 +50,9 @@ class Sampler_sf2(Data): def __init__(self, parentSession, filePath, activePatches, ignoreProgramChanges, mixer:bool, defaultSoundfont=None): super().__init__(parentSession) - self._unlinkOnSave = [] + self._unlinkOnSave:List[Union[str, PathLike]] = [] #old sf2 files no longer in use. self.filePath = filePath - self.patchlist = {} #bank:{program:name} + self.patchlist:Dict[int,Dict[int, str]] = {} #bank:{program:name} self.buffer_ignoreProgramChanges = ignoreProgramChanges self.midiInput = MidiInput(session=parentSession, portName="all") @@ -166,7 +168,7 @@ class Sampler_sf2(Data): def _convertPatches(self, dictionary:dict): """Returns a dict of dicts: bank:{program:name}""" - result = {} + result:Dict[int,Dict[int, str]] = {} #same as self.patchlist for value, name in dictionary.items(): program = value & 127 bank = value >> 7 diff --git a/template/qtgui/midiinquickwidget.py b/template/qtgui/midiinquickwidget.py index f483e6e..f9d3eab 100644 --- a/template/qtgui/midiinquickwidget.py +++ b/template/qtgui/midiinquickwidget.py @@ -74,19 +74,19 @@ class QuickMidiInputComboController(QtWidgets.QWidget): #api.callbacks.auditionerVolumeChanged.append(self.callback__auditionerVolumeChanged) def callback_startLoadingAuditionerInstrument(self, idkey): - self.parentWidget.qtApp.setOverrideCursor(QtCore.Qt.WaitCursor) #reset in self.callback_auditionerInstrumentChanged + self.parentWidget.qtApp.setOverrideCursor(QtCore.Qt.WaitCursor) # type: ignore #mypy doesn't know PyQts parent Widget #reset in self.callback_auditionerInstrumentChanged self.label.setText(QtCore.QCoreApplication.translate("QuickMidiInputComboController", "…loading…")) self.parentWidget.qtApp.processEvents() #actually show the label and cursor def callback_auditionerInstrumentChanged(self, exportMetadata:dict): - self.parentWidget.qtApp.restoreOverrideCursor() #We assume the cursor was set to a loading animation + app = self.parentWidget.qtApp.restoreOverrideCursor() # type: ignore #mypy doesn't know PyQts parent Widget #We assume the cursor was set to a loading animation key = exportMetadata["id-key"] t = f"➜ [{key[0]}-{key[1]}] {exportMetadata['name']}" self.label.setText(t) def callback__auditionerVolumeChanged(self, value:float): self.volumeDial.setValue(value) - self.parentWidget.statusBar().showMessage(QtCore.QCoreApplication.translate("QuickMidiInputComboController", "Volume: {}").format(value)) + self.parentWidget.statusBar().showMessage(QtCore.QCoreApplication.translate("QuickMidiInputComboController", "Volume: {}").format(value)) # type: ignore #mypy doesn't know PyQts parent Widget def _sendVolumeChangeToEngine(self, newValue): self.volumeDial.blockSignals(True)