我很难理解为什么下面的代码在一年前无缝运行时会抛出错误。代码片段来自一个很受欢迎的Coursera课程。围绕stream.Voice
,Music21包最近有什么变化吗?
data_fn = 'data/original_metheny.mid'
midi_data = converter.parse(data_fn)
melody_stream = midi_data[5] # For Metheny piece, Melody is Part #5.
melody1, melody2 = melody_stream.getElementsByClass(stream.Voice)
抛出的错误是ValueError: not enough values to unpack (expected 2, got 0)
,这意味着没有stream.Voice
类的输出,而以前有相同数据(midi文件)的输出。melody_stream.getElementsByClass('Measure')
会显示输出。
你能指导一下如何调试吗?
发布于 2021-11-22 20:08:09
是的,music21 v.7中的一个改进是,从MIDI导入的文件现在具有与从MusicXML和其他格式导入的文件相似的表示形式。具体地说,部件现在有度量,这些度量可能有声音,也可能没有声音,而不是直接包含声音的部分。代码不应该依赖于查找直接包含在部件中的Voices,本例就是这样做的。
相反,使用以下代码来查找所有的测量声音:
melody_stream.recurse().getElementsByClass(stream.Voice)
或者,等效地使用v.7中的快捷方式语法:
melody_stream[stream.Voice]
或者,如果您根本不需要这些度量,可以根据您的用例调用flatten()
或chordify()
。
https://stackoverflow.com/questions/70040337
复制相似问题