From 43f88001097246a2f3948e9953c25ee47c4c01f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vili=20Sinerv=C3=A4?= Date: Sat, 1 Oct 2022 18:46:55 +0300 Subject: [PATCH] =?UTF-8?q?Alustava=20k=C3=A4ytt=C3=B6liittym=C3=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main.py | 3 + src/musiikki_generaattori.py | 14 ++-- src/ui.py | 131 +++++++++++++++++++++++++++++++++++ 3 files changed, 141 insertions(+), 7 deletions(-) create mode 100644 src/main.py create mode 100644 src/ui.py diff --git a/src/main.py b/src/main.py new file mode 100644 index 0000000..ffaed8d --- /dev/null +++ b/src/main.py @@ -0,0 +1,3 @@ +from ui import UI + +ui = UI() diff --git a/src/musiikki_generaattori.py b/src/musiikki_generaattori.py index 9d33bbc..044630d 100644 --- a/src/musiikki_generaattori.py +++ b/src/musiikki_generaattori.py @@ -14,20 +14,20 @@ class MusiikkiGeneraattori: self._nuotti_midiksi = { "C":0, "C#":1, - "Db":1, + "DB":1, "D":2, "D#":3, - "Eb":3, + "EB":3, "E":4, "F":5, "F#":6, - "Gb":6, + "GB":6, "G":7, "G#":8, - "Ab":8, + "AB":8, "A":9, "A#":10, - "Bb":10, + "BB":10, "B":11} def lue_opetusdata(self, polku): @@ -87,11 +87,11 @@ class MusiikkiGeneraattori: kirjoita_midi(tiedostopolku, self._nuotit, tempo) def _nuotit_midiksi(self, nuotit: str): - nuotit = nuotit.split(" ") + nuotit = nuotit.split("|") midi = [] for nuotti in nuotit: arvo = (int(nuotti[-1])+1) * 12 - arvo += self._nuotti_midiksi[nuotti[:-1]] + arvo += self._nuotti_midiksi[nuotti[:-1].upper()] midi.append(arvo) return midi diff --git a/src/ui.py b/src/ui.py new file mode 100644 index 0000000..f67c3fc --- /dev/null +++ b/src/ui.py @@ -0,0 +1,131 @@ +from os import system, name +from re import search +from sys import exit as sys_exit +from musiikki_generaattori import musiikki_generaattori + +class UI: + def __init__(self): + self._opetusdata_polku = "opetusdata/*.mid" + self._tulos_polku = "savelma.mid" + self._aste = 1 + self._alku = "C4" + self._nuottien_maara = 100 + self._tempo = 120 + + self._toiminnot = { + "A": ("(A)pu", self._tulosta_apu, 0, "Tulosta apu"), + "O": ("(O)petusdata [polku]", self._aseta_opetusdata, 1, "Valitse opetusdata"), + "P": ("(P)olku [polku]", self._aseta_tulos_polku, 1, "Valitse valmiin sävelmän polku"), + "K": ("(K)etjun aste", self._aseta_aste, 1, "Aseta Markovin ketjun aste valittuun kokonaislukuun"), + "L": ("a(L)kuosa [merkkijono]", self._aseta_alkuosa, 1, "Aseta alkuosa. Esim. 'C4|D#5|Gb3'"), + "N": ("(N)uotteja [luku]", self._aseta_nuottien_maara, 1, "Aseta sävelmän nuottien määrä valittuun kokonaislukuun"), + "T": ("(T)empo [luku]", self._aseta_tempo, 1, "Aseta tempo valittuun kokonaislukuun"), + "G": ("(G)eneroi sävelmä", self._generoi_savelma, 0, "Generoi sävelmä valituilla asetuksilla"), + "S": ("(S)ulje", self._sulje, 0, "Sulje ohjelma") + } + + self._virheet = [] + + + self._tyhjenna() + self._suorita() + + def _suorita(self): + while True: + self._tulosta_virheet() + + self._tulosta_arvot() + + komento = input("\nKomento ('A' tulostaaksesi apu): ") + + self._tyhjenna() + + if komento: + if komento[0].upper() in self._toiminnot: + if komento[0].upper() == "S": + self._sulje() + + _, funktio, parametrien_maara, _ = self._toiminnot[komento[0].upper()] + komento = komento.split(" ") + + try: + parametrit = [] + for i in range(1, 1+parametrien_maara): + parametrit.append(komento[i]) + funktio(parametrit) + except: + self._virheet.append("KOMENNON MUOTO VÄÄRÄ!") + continue + + def _tyhjenna(self): + # windows + if name == "nt": + _ = system("cls") + + # mac ja linux + else: + _ = system("clear") + + def _tulosta_virheet(self): + if self._virheet: + while self._virheet: + print(self._virheet.pop()) + print() + self._virheet = [] + + def _tulosta_arvot(self): + print(f"Opetusdata: '{self._opetusdata_polku}'") + print(f"Generoidun sävelmän polku: '{self._tulos_polku}'") + print() + print(f"Markovin ketjun aste: {self._aste}") + print(f"Sävelmän pituus nuotteina: {self._nuottien_maara}") + print(f"Tempo: {self._tempo}") + print(f"Alkuosa: '{self._alku}'") + + def _tulosta_apu(self, _): + print("OHJEET") + print("----------------\n") + for _, toiminto in self._toiminnot.items(): + nimi, _, _, kuvaus = toiminto + print(f"{nimi}: {kuvaus}") + print("\n----------------") + + def _aseta_opetusdata(self, polku): + self._opetusdata_polku = polku[0] + + def _aseta_tulos_polku(self, polku): + self._tulos_polku = polku[0] + + def _aseta_aste(self, aste): + try: + self._aste = int(aste[0]) + except ValueError: + self._virheet.append("ANNETTU ASTE EI MUUTETTAVISSA KOKONAISLUVUKSI!") + + def _aseta_alkuosa(self, alkuosa): + alkuosa = alkuosa[0] + if search("^([CcDdEeFfGgAaBb][#b]?[0-8]\|)*[CcDdEeFfGgAaBb][#b]?[0-8]$", alkuosa): + self._alku = alkuosa + else: + self._virheet.append("ANNETTU ALKUOSA EI KELPAA!") + + def _aseta_nuottien_maara(self, nuotteja): + try: + self._nuottien_maara = int(nuotteja[0]) + except ValueError: + self._virheet.append("ANNETTU NUOTTIEN MÄÄRÄ EI MUUTETTAVISSA KOKONAISLUVUKSI!") + + def _aseta_tempo(self, tempo): + try: + self._tempo = int(tempo[0]) + except ValueError: + self._virheet.append("ANNETTU TEMPO EI MUUTETTAVISSA KOKONAISLUVUKSI!") + + def _generoi_savelma(self, _): + musiikki_generaattori.lue_opetusdata(self._opetusdata_polku) + musiikki_generaattori.valmistele_ketju(self._alku, self._aste) + print(f"Generoitiin {musiikki_generaattori.generoi_nuotteja(self._nuottien_maara)} nuottia!\n") + musiikki_generaattori.kirjoita_midi(self._tulos_polku, self._tempo) + + def _sulje(self): + sys_exit(0)