Music21:挑选旋律曲目



我正在处理大量使用Music21为现有流行歌曲制作的MIDI文件。

虽然通道10保留用于打击乐器,但旋律轨道遍布不同的频道,所以我想知道是否有一种有效的方法可以挑选主旋律(人声)轨道。

我猜想这样做的一种方法是选择一个由单个音符组成而不是重叠的谐波(和弦),以及在整首歌中播放的曲目,但是还有其他有效的方法吗?

取决于您的特定文件的编码方式,您可以根据每个零件的名称尝试过滤。看起来像这样:

import music21
from music21 import *
piece = converter.parse("full_path_to_piece.midi")
for part in piece.parts:
  print(part[0].bestName()) # replace this print statement with a relevant if statement

SMF格式对事件的组织方式没有限制。通常,每个频道具有一个轨道,但是也可以在一个轨道中具有多个频道,或者有多个带有同一频道的事件的轨道。

轨道的组织完全由人类决定。您不太可能编写可以正确确定某些随机大脑工作原理的代码。

您必须继续进行的所有是惯例(例如,旋律可能处于第一条轨道或具有一定的结构),但是您必须知道这些约定是在您的文件中实际上实际使用的。重新处理。

而不是使用.bestName(),我发现.partName对于查找正确的旋律非常有用。可以在此处找到该文档:http://web.mit.edu/music21/doc/modulereference/modulestream.html#part

这就是我的使用方式:

midi_data = converter.parse(data_fn) #data_fn is the path to the .mid file I use
for part in midi_data.parts:
    print(part.partName)

最新更新