Spaces:
Build error
Build error
import unittest | |
from typing import List | |
from tempfile import NamedTemporaryFile | |
from assert_fns import assert_notes_almost_equal | |
from utils.note_event_dataclasses import Note | |
from utils.midi import note_event2midi | |
from utils.midi import midi2note | |
from utils.note2event import note2note_event | |
# yapf: disable | |
class TestNoteMidiConversion(unittest.TestCase): | |
def test_note2midi2note_z(self): | |
original_notes = [ | |
Note(is_drum=False, program=3, onset=0., offset=1., pitch=60, velocity=1), | |
Note(is_drum=False, program=3, onset=1., offset=2., pitch=64, velocity=1), | |
] | |
with NamedTemporaryFile(suffix=".mid", delete=True) as temp_file: | |
# Convert original_notes to MIDI and save it to the temporary file | |
note_events = note2note_event(notes=original_notes, sort=True) | |
note_event2midi(note_events, temp_file.name, velocity=100) | |
# Convert the MIDI back to notes | |
converted_notes, _ = midi2note(temp_file.name) | |
# Compare original notes and converted notes | |
assert_notes_almost_equal(original_notes, converted_notes) | |
def test_midi2note2midi2note_piano_z(self): | |
file = 'extras/examples/piano.mid' | |
# This MIDI file is missing the program change event, so we force it to be 0 | |
notes, _ = midi2note(file, quantize=False, force_all_program_to=0)[:1000] | |
note_events = note2note_event(notes=notes, sort=True) | |
note_event2midi(note_events, 'extras/examples/piano_converted.mid', velocity=100) | |
reconverted_notes, _ = midi2note('extras/examples/piano_converted.mid', quantize=False) | |
assert_notes_almost_equal(notes, reconverted_notes, delta=0.01) | |
def test_midi2note2midi2note_force_drum_z(self): | |
file = 'extras/examples/drum.mid' | |
conv_file = 'extras/examples/drum_converted.mid' | |
# This MIDI file is missing the program change event, so we force it to be 0 | |
notes, _ = midi2note(file, quantize=True, force_all_drum=True)[:100] | |
note_events = note2note_event(notes=notes, sort=True) | |
note_event2midi(note_events, conv_file, velocity=100, ticks_per_beat=960) | |
reconverted_notes, _ = midi2note(conv_file, quantize=True, force_all_drum=True) | |
assert_notes_almost_equal(notes, reconverted_notes, delta=0.005) | |
# In drum, this is very inaccurate. We should fix this in the future. | |
# Even for the first 100 notes, the timing is off by 170 ms. | |
def test_midi2note_ignore_pedal_true_z(self): | |
file = 'extras/examples/piano.mid' | |
notes, _ = midi2note(file, quantize=False, ignore_pedal=True, force_all_program_to=0) | |
note_events = note2note_event(notes=notes, sort=True) | |
note_event2midi(note_events, 'extras/examples/piano_converted.mid', velocity=100) | |
reconverted_notes, _ = midi2note('extras/examples/piano_converted.mid', quantize=False) | |
assert_notes_almost_equal(notes, reconverted_notes, delta=0.01) | |
# yapf: enable | |
if __name__ == '__main__': | |
unittest.main() | |