Music21 在保存到 MIDI 文件时一次播放所有音符
Music21 plays all notes at once when saving to midi file
我在 music21
工具包中尝试 assemble 顺序和平行和弦时注意到并发出了问题。
ch = stream.Part([
stream.Measure([note.Rest(duration=duration.Duration(type='eighth'))]),
stream.Measure([note.Note('C4'), note.Note('F4')]),
stream.Measure([note.Rest(duration=duration.Duration(type='half'))]),
stream.Measure([chord.Chord([note.Note('C4'), note.Note('F4')], duration=duration.Duration(type='half'))])
])
上面的代码在 ch.write('musicxml.png)
时给出了正确的分数
但是当保存为 MIDI 时:ch.write('midi')
所有的音符都会同时播放。 (我不能附加 MIDI,所以 hexdump)
00000000 4d 54 68 64 00 00 00 06 00 01 00 01 04 00 4d 54 |MThd..........MT|
00000010 72 6b 00 00 00 3f 00 ff 03 00 00 e0 00 40 00 90 |rk...?.......@..|
00000020 45 5a 00 90 42 5a 00 90 46 5a 00 90 45 5a 00 90 |EZ..BZ..FZ..EZ..|
00000030 42 5a 00 90 46 5a 88 00 80 45 00 00 80 42 00 00 |BZ..FZ...E...B..|
00000040 80 46 00 88 00 80 45 00 00 80 42 00 00 80 46 00 |.F....E...B...F.|
00000050 88 00 ff 2f 00 |.../.|
00000055
这是 music21
中的错误吗?还是我搞砸了什么?
您创建的每个度量都位于偏移量 0 处,因此当您将它们传递给 Part() 时,它们都会被插入到偏移量 0 处,即同时插入。碰巧 xml 作者试图修复符号(调用 makeNotation
等),但 midi 作者更直白。
尝试将每个 Measure 附加到 stream.Part() 而不是将它们传递给构造函数。或者尝试在您的部分上调用 .makeNotation()
,然后再将其写入 midi。
我在 music21
工具包中尝试 assemble 顺序和平行和弦时注意到并发出了问题。
ch = stream.Part([
stream.Measure([note.Rest(duration=duration.Duration(type='eighth'))]),
stream.Measure([note.Note('C4'), note.Note('F4')]),
stream.Measure([note.Rest(duration=duration.Duration(type='half'))]),
stream.Measure([chord.Chord([note.Note('C4'), note.Note('F4')], duration=duration.Duration(type='half'))])
])
上面的代码在 ch.write('musicxml.png)
时给出了正确的分数
但是当保存为 MIDI 时:ch.write('midi')
所有的音符都会同时播放。 (我不能附加 MIDI,所以 hexdump)
00000000 4d 54 68 64 00 00 00 06 00 01 00 01 04 00 4d 54 |MThd..........MT|
00000010 72 6b 00 00 00 3f 00 ff 03 00 00 e0 00 40 00 90 |rk...?.......@..|
00000020 45 5a 00 90 42 5a 00 90 46 5a 00 90 45 5a 00 90 |EZ..BZ..FZ..EZ..|
00000030 42 5a 00 90 46 5a 88 00 80 45 00 00 80 42 00 00 |BZ..FZ...E...B..|
00000040 80 46 00 88 00 80 45 00 00 80 42 00 00 80 46 00 |.F....E...B...F.|
00000050 88 00 ff 2f 00 |.../.|
00000055
这是 music21
中的错误吗?还是我搞砸了什么?
您创建的每个度量都位于偏移量 0 处,因此当您将它们传递给 Part() 时,它们都会被插入到偏移量 0 处,即同时插入。碰巧 xml 作者试图修复符号(调用 makeNotation
等),但 midi 作者更直白。
尝试将每个 Measure 附加到 stream.Part() 而不是将它们传递给构造函数。或者尝试在您的部分上调用 .makeNotation()
,然后再将其写入 midi。