from mido import Message, MidiFile, MidiTrack, MetaMessage
note_mapping = {
"1..": 34,
"2..": 36,
"3..": 38,
"4..": 40,
"5..": 42,
"6..": 44,
"7..": 46,
"1.": 48,
"2.": 50,
"3.": 52,
"4.": 53,
"5.": 55,
"6.": 57,
"7.": 59,
"1": 60,
"2": 62,
"3": 64,
"4": 65,
"5": 67,
"6": 69,
"7": 71,
"1'": 72,
"2'": 74,
"3'": 76,
"4'": 77,
"5'": 79,
"6'": 81,
"7'": 83,
"1''": 72,
"2''": 74,
"3''": 76,
"4''": 77,
"5''": 79,
"6''": 81,
"7''": 83,
"0": 0
}
simple_score_str1 = "00006'6'7'7'1''1''7'7'6'6'3'3'1'1'665'5'4'4'3'4'5'4'4'000004'4'5'5'6'6'7'7'5'5'2'2'4'4'3'3'2'3'4'3'000003'61'3'2'3'61'3'2'3'61'4'3'4'61'4'3'4'4'3'4'4'5'5'6'5'6'3'000003''6'1''3''2''3''6'1''3''2''3''6'1''4''3''4''6'1''4''3''4''4''3''4''4''5''5''6''5''6''3''00001''3'3'4'4'2'2'7'7'2'2'3'3'1'1'6'5'6'1'1'2'2'73'2'3'000001''01''1''2''2''1''7'6'5'5'6'5'3'0000001''1''1''1''2''2''1''7'6'5'5'6'5'6'0000000"
simple_score_str2 = "6..3.013.013.0103.00006..0300103.0103.0103.002.06.00406.0406.005..02.007.02.007.02.007.001.005.003003.006..003.0013.0103006..003.0012.06040006.0406.005..02.007.001.17.006..003.0013.0103006..003.0012.06040006.0406.005..02.007.001.17.006..003.0012.0604005..02.007.01.001.005.007..006..03.17..0006..03.17..4.02000"
simple_score1 = []
i = 0
while i < len(simple_score_str1):
if simple_score_str1[i].isdigit():
if i + 1 < len(simple_score_str1) and simple_score_str1[i + 1] in [".", "'"]:
note = simple_score_str1[i:i + 2]
i += 2
else:
note = simple_score_str1[i]
i += 1
simple_score1.append((note, 1))
else:
i += 1
simple_score2 = []
i = 0
while i < len(simple_score_str2):
if simple_score_str2[i].isdigit():
if i + 1 < len(simple_score_str2) and simple_score_str2[i + 1] in [".", "'"]:
note = simple_score_str2[i:i + 2]
i += 2
else:
note = simple_score_str2[i]
i += 1
simple_score2.append((note, 1))
else:
i += 1
mid = MidiFile()
track1 = MidiTrack()
mid.tracks.append(track1)
tempo = 200000
track1.append(MetaMessage('set_tempo', tempo=tempo, time=0))
track1.append(Message('program_change', program=0, time=0))
current_time1 = 50
for note, duration in simple_score1:
if note in note_mapping:
midi_note = note_mapping[note]
track1.append(Message('note_on', note=midi_note, velocity=64, time=current_time1))
current_time1 = 0
track1.append(Message('note_off', note=midi_note, velocity=127, time=duration * 480))
else:
print(f"不支持的音符: {note}")
track2 = MidiTrack()
mid.tracks.append(track2)
track2.append(MetaMessage('set_tempo', tempo=tempo, time=0))
track2.append(Message('program_change', program=24, time=0))
current_time2 = 50
for note, duration in simple_score2:
if note in note_mapping:
midi_note = note_mapping[note]
track2.append(Message('note_on', note=midi_note, velocity=64, time=current_time2))
current_time2 = 0
track2.append(Message('note_off', note=midi_note, velocity=127, time=duration * 480))
else:
print(f"不支持的音符: {note}")
mid.save('梦中的婚礼.mid')