mirror of
https://github.com/janishutz/midi-micro-bit_sound-converter.git
synced 2025-11-25 05:44:24 +00:00
80 lines
3.1 KiB
Python
80 lines
3.1 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)
|
|
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() |