1
0
Fork 0

Alustava käyttöliittymä

This commit is contained in:
Vili Sinervä 2022-10-01 18:46:55 +03:00
parent 65a8d0abfd
commit 43f8800109
3 changed files with 141 additions and 7 deletions

3
src/main.py Normal file
View file

@ -0,0 +1,3 @@
from ui import UI
ui = UI()

View file

@ -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

131
src/ui.py Normal file
View file

@ -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)