微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

music21:创建一个带有相同偏移量的军鼓和低音鼓的 MIDI 文件

如何解决music21:创建一个带有相同偏移量的军鼓和低音鼓的 MIDI 文件

我正在尝试使用 music21(v6.5.0 和 Python 3.8.6)为鼓音轨创建一个 MIDI 文件。我无法创建具有相同偏移的两个声音的流(比如低音和军鼓)。

snareNote = Note('C')
bassFirstNote = Note('C',quarterLength=2)
bassSecondNote = Note('C',quarterLength=2)
hiHatNote = Note('C')

musicStream = stream.Stream()
streamMeasure = stream.Measure()
streamMeasure.timeSignature = meter.TimeSignature('4/4')
musicStream.append(streamMeasure)

snarePart = stream.Part()
# snarePart.insert(createInstrumentWithChannel(instrument.SnareDrum(),1))
snareDrum = instrument.SnareDrum()
snareDrum.midiChannel = 1
snarePart.insert(snareDrum)

basspart = stream.Part()
# basspart.insert(createInstrumentWithChannel(instrument.BassDrum(),2))
bassDrum = instrument.BassDrum()
bassDrum.midiChannel = 2
basspart.insert(bassDrum)
basspart.append(bassFirstNote)
basspart.append(bassSecondNote)
musicStream.insert(0,basspart)

hiHatPart = stream.Part()
# hiHatPart.insert(createInstrumentWithChannel(instrument.HiHatCymbal(),3))
hiHat = instrument.HiHatCymbal()
hiHat.midiChannel = 3
hiHatPart.insert(hiHat)
hiHatPart.repeatAppend(hiHatNote,4)
musicStream.insert(0,hiHatPart)

musicStream.show('text')
musicStream.write('midi',fp='drums.mid')

我的文本输出在正确的偏移处显示低音和踩镲音符 - 但是 MIDI 输出仅包含我插入到流中的最后一部分(在这种情况下是踩镲)。

{0.0} <music21.stream.Measure 0 offset=0.0>
    {0.0} <music21.meter.TimeSignature 4/4>
{0.0} <music21.stream.Part 0x1a993ca5d00>
    {0.0} <music21.instrument.BassDrum 'Bass Drum'>
    {0.0} <music21.note.Note C>
    {2.0} <music21.note.Note C>
{0.0} <music21.stream.Part 0x1a993cbe100>
    {0.0} <music21.instrument.HiHatCymbal 'Hi-Hat Cymbal'>
    {0.0} <music21.note.Note C>
    {1.0} <music21.note.Note C>
    {2.0} <music21.note.Note C>
    {3.0} <music21.note.Note C>

任何关于我做错了什么的提示都会有很大帮助。

谢谢。

解决方法

更改代码以使用正确的注释似乎已经解决了问题。不是对所有鼓音符使用“C”音符,而是使用正确的鼓 midi 音符解决了这个问题。

不正确:

snareNote = Note('C')
bassFirstNote = Note('C',quarterLength=2)
bassSecondNote = Note('C',quarterLength=2)
hiHatNote = Note('C')

正确:

snareNote = Note(38)
bassFirstNote = Note(35,quarterLength=2)
bassSecondNote = Note(35,quarterLength=2)
hiHatNote = Note(42)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。