繁体   English   中英

保存到 MIDI 文件时,Music21 会同时播放所有音符

[英]Music21 plays all notes at once when saving to midi file

我在music21工具包中尝试组合顺序和并行和弦时注意到并发出问题。

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试图修复符号(调用makeNotation等),但 MIDI makeNotation器更直接。

尝试将每个 Measure 附加到 stream.Part() 而不是将它们传递给构造函数。 或者尝试在您的 Part 上调用.makeNotation() ,然后再将其写入 MIDI。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM