music21 getElementsByClass 未显示 class stream.Voice 的任何输出
music21 getElementsByClass not showing any output for class stream.Voice
我很难理解为什么下面的代码在大约一年前 运行 无缝地抛出错误。代码片段来自一个流行的 Coursera 课程。 Music21 软件包最近在 stream.Voice
附近有一些变化吗?
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
class 没有输出,而之前有相同数据(midi 文件)的输出。 melody_stream.getElementsByClass('Measure')
确实显示输出。
你能指导如何调试吗?
是的,music21 v.7 中的一项改进是,从 MIDI 导入的文件现在具有与从 MusicXML 和其他格式导入的文件类似的表示。具体来说,声部现在有小节,可能有也可能没有声部,而不是直接包含声部的声部。代码不应依赖于查找直接包含在声部中的声部,这正是本示例所做的。
相反,使用此代码查找所有测量声音:
melody_stream.recurse().getElementsByClass(stream.Voice)
或者,等效地,使用 v.7 中的快捷语法:
melody_stream[stream.Voice]
或者,如果您根本不需要这些措施,请根据您的用例调用 flatten()
或 chordify()
。
我很难理解为什么下面的代码在大约一年前 运行 无缝地抛出错误。代码片段来自一个流行的 Coursera 课程。 Music21 软件包最近在 stream.Voice
附近有一些变化吗?
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
class 没有输出,而之前有相同数据(midi 文件)的输出。 melody_stream.getElementsByClass('Measure')
确实显示输出。
你能指导如何调试吗?
是的,music21 v.7 中的一项改进是,从 MIDI 导入的文件现在具有与从 MusicXML 和其他格式导入的文件类似的表示。具体来说,声部现在有小节,可能有也可能没有声部,而不是直接包含声部的声部。代码不应依赖于查找直接包含在声部中的声部,这正是本示例所做的。
相反,使用此代码查找所有测量声音:
melody_stream.recurse().getElementsByClass(stream.Voice)
或者,等效地,使用 v.7 中的快捷语法:
melody_stream[stream.Voice]
或者,如果您根本不需要这些措施,请根据您的用例调用 flatten()
或 chordify()
。