2024-06-07 15:48:53 发布
网友
我正在处理大量的midi文件,这些文件是为使用music21制作的现有流行歌曲制作的。在
虽然第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格式对如何将事件组织成轨迹没有限制。通常每个通道有一个磁道,但也有可能在一个磁道中有多个磁道,或者同一个磁道有多个磁道的事件。在
轨道的组织完全由人类决定。你不太可能写出代码来正确判断随机大脑是如何工作的。在
你所要做的就是惯例(例如,melody很可能在第一首曲目中,或者具有某种结构),但是你必须知道这些约定是否真的在你处理的文件中使用过。在
我发现.bestName()对找到正确的旋律非常有用,而不是使用.bestName()。文档可以在这里找到:http://web.mit.edu/music21/doc/moduleReference/moduleStream.html#part
.bestName()
下面是我如何使用它:
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)
根据特定文件的编码方式,可以尝试根据每个部分的名称进行过滤。看起来像这样:
SMF格式对如何将事件组织成轨迹没有限制。通常每个通道有一个磁道,但也有可能在一个磁道中有多个磁道,或者同一个磁道有多个磁道的事件。在
轨道的组织完全由人类决定。你不太可能写出代码来正确判断随机大脑是如何工作的。在
你所要做的就是惯例(例如,melody很可能在第一首曲目中,或者具有某种结构),但是你必须知道这些约定是否真的在你处理的文件中使用过。在
我发现
.bestName()
对找到正确的旋律非常有用,而不是使用.bestName()
。文档可以在这里找到:http://web.mit.edu/music21/doc/moduleReference/moduleStream.html#part下面是我如何使用它:
相关问题 更多 >
编程相关推荐