gpt4 book ai didi

python - Music21 操作特定乐器

转载 作者:太空宇宙 更新时间:2023-11-03 14:27:02 25 4
gpt4 key购买 nike

我正在 Python 中使用 Music21 来读取 MIDI 文件,并且我只想处理使用特定乐器的轨道。例如,如果在我的 MIDI 文件中我有两个使用钢琴的轨道,我希望能够打印音符、更改乐器等。

现在我有一个包含多个音轨(鼓、小号等)的文件,我只是在摆弄它,试图用另一种乐器替换某种乐器。然而,当我这样做时,我收到一个错误,尽管乐器已成功更改(假设它不是被删除的轨道之一),但一些轨道被完全删除。

这是我当前的代码:

from music21 import converter, instrument
s = converter.parse('smells.mid')

s = instrument.partitionByInstrument(s)

s.parts[2].insert(0, instrument.Vocalist())


s.write('midi', 'newfilename.mid')

这是我收到的错误:

midi.base.py: WARNING: Conversion error for <MidiEvent PROGRAM_CHANGE, t=0, track=1, channel=1>: Got incorrect data for <MidiEvent PROGRAM_CHANGE, t=0, track=1, channel=1> in .data: None,cannot parse Program Change; ignored.

最佳答案

这就是我想要做的:

def printInstrument(self, strm, inst):
s2 = instrument.partitionByInstrument(strm)
if s2 is not None:
#print all the notes the instrument plays
for i in s2.recurse().parts:
if i.partName == inst:
iNotes = i.notesAndRests.stream()
for j in iNotes.elements:
if type(j) == chord.Chord:
#handle chords
elif j.name == "rest":
#handle rests
else:
#handle notes

关于python - Music21 操作特定乐器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47556847/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com