Files
midi-micro-bit_sound-converter/midi_converter.py

81 lines
3.2 KiB
Python

from kivy.uix.screenmanager import ScreenManager
from kivymd.uix.screen import MDScreen
from kivy.uix.popup import Popup
from kivy.properties import ObjectProperty
from kivy.lang import Builder
from kivy.uix.label import Label
from kivymd.app import MDApp
from mido import MidiFile
import os
import backend.midi_management
import backend.csv_parsers
import time
class HomeScreen(MDScreen):
pass
class FileChooserScreen(MDScreen):
loadfile = ObjectProperty(None)
def load(self, path, filename):
try:
self.path = os.path.join(path, filename[0])
try:
self.mid = MidiFile(self.path, clip=True)
backend.csv_parsers.CsvWrite().write_str("./backend/temp.csv", [self.path])
self.tracks = []
for self.track in self.mid.tracks:
self.tracks.append(str(self.track))
self.tracks.pop(0)
if len(self.tracks) > 1:
screen_manager.get_screen("Track").ids.track_spinner.values = self.tracks
screen_manager.current = "Track"
screen_manager.transition.direction = "up"
else:
screen_manager.current = "Home"
screen_manager.transition.direction = "right"
except:
self.popup_fe = Popup(title="FileError", content=Label(text="Please select a MIDI-File!"),
size_hint=(0.4, 0.4), auto_dismiss=True)
self.popup_fe.open()
except:
self.popup_foldererror = Popup(title="FileError", content=Label(text="Only MIDI-Files allowed, not folder"),
size_hint=(0.4, 0.4), auto_dismiss=True)
self.popup_foldererror.open()
class TrackChooseScreen(MDScreen):
def extract(self):
self.chosen_track = self.ids.track_spinner.text
if self.chosen_track == "Select a track":
self.popup_ns = Popup(title="NoSelectionError", content=Label(text="Please select a Track!"),
size_hint=(0.4, 0.4), auto_dismiss=True)
self.popup_ns.open()
else:
self.path = backend.csv_parsers.CsvRead().importing("./backend/temp.csv").pop(0)
self.path_transmit = self.path.pop(0)
backend.midi_management.MidiManagement().analyse_track(str(self.path_transmit), self.chosen_track)
print("go")
screen_manager.get_screen("Home").ids.infobox.text = "The command has been copied to the clipboard"
screen_manager.current = "Home"
screen_manager.transition.direction = "right"
class MidiConverter(MDApp):
global screen_manager
screen_manager = ScreenManager()
def build(self):
self.title = "Midi-Microbit-Converter"
self.theme_cls.primary_palette = "Blue"
self.theme_cls.accent_palette = "BlueGray"
screen_manager.add_widget(Builder.load_file("./gui/gui.kv"))
screen_manager.add_widget(Builder.load_file("./gui/filechooser.kv"))
screen_manager.add_widget(Builder.load_file("./gui/loading_screen.kv"))
return screen_manager
MidiConverter().run()