1
0
Fork 0

Alustava MIDI luenta ja kirjoitus

This commit is contained in:
Vili Sinervä 2022-09-30 12:58:07 +03:00
parent 81586d7af8
commit b26fc42561
4 changed files with 78 additions and 0 deletions

3
.coveragerc Normal file
View file

@ -0,0 +1,3 @@
[run]
source = src
omit = src/main.py,src/**/__init__.py,src/tests/**,src/ui/**

3
.gitignore vendored
View file

@ -127,3 +127,6 @@ dmypy.json
# Pyre type checker
.pyre/
# Ignore midi file folder
*.mid

58
src/midi_kasittelija.py Normal file
View file

@ -0,0 +1,58 @@
import mido
savellaji_arvot = {
"C":0,
"C#":-1,
"Db":-1,
"D":-2,
"Eb":-3,
"E":-4,
"F":-5,
"F#":-6,
"Gb":-6,
"G":5,
"Ab":4,
"A":3,
"Bb":2,
"B":1,
"Cb":1,
}
def LueMidi(tiedostopolku):
midi = mido.MidiFile(tiedostopolku)
tulos = []
for raita in midi.tracks:
raidan_nuotit = []
vaara_savellaji = False
transponointi = 0
for viesti in raita:
if viesti.type == "key_signature":
if viesti.key[-1] == "m":
vaara_savellaji = True
vaara_savellaji = False
transponointi = savellaji_arvot[viesti.key]
elif not vaara_savellaji:
if viesti.type == "note_on" and viesti.velocity > 0:
raidan_nuotit.append(viesti.note+transponointi)
if raidan_nuotit:
tulos.append(raidan_nuotit)
return tulos
def KirjoitaMidi(tiedostopolku, nuotit):
midi = mido.MidiFile()
track = mido.MidiTrack()
track.append(mido.MetaMessage("set_tempo", tempo=mido.bpm2tempo(120), time=0))
track.append(mido.MetaMessage("time_signature"))
for nuotti in nuotit:
if nuotti:
track.append(mido.Message("note_on", note=nuotti, velocity=64, time=0))
track.append(mido.Message("note_on", note=nuotti, velocity=0, time=480))
midi.tracks.append(track)
midi.save(tiedostopolku)

View file

@ -0,0 +1,14 @@
import os
import unittest
from midi_kasittelija import LueMidi, KirjoitaMidi
class TestMidiKasittelija(unittest.TestCase):
def test_molemmat(self):
testi_polku = "src/tests/testiMidi.mid"
if os.path.exists(testi_polku):
os.remove(testi_polku)
nuotit = [60, 62, 64]
KirjoitaMidi(testi_polku, nuotit)
luetut_nuotit = LueMidi(testi_polku)[0]
self.assertEqual(nuotit, luetut_nuotit)