Alustava MIDI luenta ja kirjoitus
This commit is contained in:
parent
81586d7af8
commit
b26fc42561
4 changed files with 78 additions and 0 deletions
3
.coveragerc
Normal file
3
.coveragerc
Normal file
|
@ -0,0 +1,3 @@
|
|||
[run]
|
||||
source = src
|
||||
omit = src/main.py,src/**/__init__.py,src/tests/**,src/ui/**
|
3
.gitignore
vendored
3
.gitignore
vendored
|
@ -127,3 +127,6 @@ dmypy.json
|
|||
|
||||
# Pyre type checker
|
||||
.pyre/
|
||||
|
||||
# Ignore midi file folder
|
||||
*.mid
|
||||
|
|
58
src/midi_kasittelija.py
Normal file
58
src/midi_kasittelija.py
Normal 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)
|
14
src/tests/midi_kasittelija_test.py
Normal file
14
src/tests/midi_kasittelija_test.py
Normal 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)
|
Reference in a new issue