Files
midi-micro-bit_sound-converter/backend/midi_management.py
2022-03-01 17:55:47 +01:00

82 lines
2.8 KiB
Python

from mido import MidiFile
import pyperclip as pc
class MidiManagement:
def __init__(self):
pass
def addToClipboard(self, text):
pc.copy(text)
def analyse_track(self, path, trackname):
self.midi_imp = MidiFile(path, clip=True)
self.tracks = []
for self.track in self.midi_imp.tracks:
self.tracks.append(str(self.track))
if len(self.tracks) > 1:
self.tracks.pop(0)
else:
pass
self.track_ext = self.tracks.pop(0)
self.trackn = 0
while self.track_ext != trackname:
self.track_ext = self.tracks.pop(0)
self.trackn += 1
self.extracted_track = self.track_ext
self.__output_list = []
for self.msg in self.midi_imp.tracks[self.trackn]:
self.ext = str(self.msg)
self.note = self.ext[23:25]
try:
self.note_height = int(self.note)
self.note_decod_oct = self.note_height // 12
self.note_decode_tone = self.note_height % 12
if self.note_decode_tone == 1:
self.note_ext = "C"
elif self.note_decode_tone == 2:
self.note_ext = "C#"
elif self.note_decode_tone == 3:
self.note_ext = "D"
elif self.note_decode_tone == 4:
self.note_ext = "D#"
elif self.note_decode_tone == 5:
self.note_ext = "E"
elif self.note_decode_tone == 6:
self.note_ext = "F"
elif self.note_decode_tone == 7:
self.note_ext = "F#"
elif self.note_decode_tone == 8:
self.note_ext = "G"
elif self.note_decode_tone == 9:
self.note_ext = "G#"
elif self.note_decode_tone == 10:
self.note_ext = "A"
elif self.note_decode_tone == 11:
self.note_ext = "A#"
elif self.note_decode_tone == 12:
self.note_ext = "H"
self.ext_shortened = self.ext[40:]
self.pos = 0
for buchstabe in self.ext_shortened:
if buchstabe == "=":
self.pos += 1
break
else:
self.pos += 1
self.timing_exp = self.ext_shortened[self.pos:]
self.__output = self.note_ext
self.__output += str(self.note_decod_oct)
self.__output += f":{self.timing_exp}"
self.__output_list.append(str(self.__output))
except:
pass
self.addToClipboard(str(self.__output_list))