音乐21:挑选旋律

2024-06-07 15:48:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在处理大量的midi文件,这些文件是为使用music21制作的现有流行歌曲制作的。在

虽然第10频道是为打击乐器保留的,但旋律曲目遍布不同的频道,所以我想知道是否有一种有效的方法来挑选主旋律(人声)曲目。在

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


Tags: 文件方法频道曲目music21midi音符人声
3条回答

根据特定文件的编码方式,可以尝试根据每个部分的名称进行过滤。看起来像这样:

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格式对如何将事件组织成轨迹没有限制。通常每个通道有一个磁道,但也有可能在一个磁道中有多个磁道,或者同一个磁道有多个磁道的事件。在

轨道的组织完全由人类决定。你不太可能写出代码来正确判断随机大脑是如何工作的。在

你所要做的就是惯例(例如,melody很可能在第一首曲目中,或者具有某种结构),但是你必须知道这些约定是否真的在你处理的文件中使用过。在

我发现.bestName()对找到正确的旋律非常有用,而不是使用.bestName()。文档可以在这里找到: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)

相关问题 更多 >

    热门问题