一种midi序列和弦进行识别方法和装置

文档序号:1186279 发布日期:2020-09-22 浏览:9次 >En<

阅读说明:本技术 一种midi序列和弦进行识别方法和装置 (Method and device for identifying MIDI sequence chord ) 是由 计紫豪 李晨啸 于 2020-06-17 设计创作,主要内容包括:本发明公开了一种MIDI序列和弦进行识别方法和装置,属于智能作曲领域,具体包括步骤:获取MIDI文件和目标轨道;根据MIDI文件识别目标轨道上的音乐调性;确定和弦识别的多个细粒度,根据MIDI文件和音乐调性确定每个细粒度下和弦进行;融合多个细粒度下的和弦进行,获得MIDI序列的最终和弦进行。该MIDI序列和弦进行识别方法和装置能够根据不同细粒度进行和弦进行识别以提高和弦进行识别的准确性,且方法简单,可以工业应用。(The invention discloses a method and a device for identifying MIDI sequence chord, belonging to the field of intelligent music composition, and specifically comprising the following steps: acquiring MIDI files and target tracks; identifying the music tonality on the target track according to the MIDI file; determining a plurality of fine granularities of chord identification, and determining chord progression under each fine granularity according to the MIDI file and the music tonality; and fusing the chord progression under a plurality of fine granularities to obtain the final chord progression of the MIDI sequence. The method and the device for identifying the MIDI sequence chord can identify the chord according to different fine granularities so as to improve the accuracy of identifying the chord, and the method is simple and can be applied to industry.)

一种MIDI序列和弦进行识别方法和装置

技术领域

本发明涉及人工智能作曲领域,具体涉及一种MIDI序列和弦进行识别方法和装置。

背景技术

MIDI是一种工业标准的电子通信协议,它描述了通信协议、数字接口以及将各种电子乐器,计算机和相关音频设备连接起来以进行播放、编辑和录制音乐的规范。是音乐符号化表示的一种方式,同时也是在计算机作曲中最常用的音乐表示方式。

和弦是指组合在一起的两个或者多个音高的音,而和弦进行是一系列和弦在时间上的有序集合。从古典音乐的普遍实践时代到当今,和弦进行一直是西方流行音乐风格和古典音乐的基础。在音乐风格中,和弦进行是建立旋律和节奏的决定性特征。不同的和弦进行会给人带去音乐的不同听感。一般的,和弦被分为三大功能,一级和弦为主功能,三级、五级、七级和弦为属功能,二级、四级、六级和弦为下属功能。主功能的和弦在三者中听起来最为稳定,一般音乐的和弦进行设计也是从稳定到不稳定再解决到稳定和弦。了解一首音乐的和弦进行则可以了解这首音乐的结构骨架,同时了解整首音乐的情感流动。

随着计算机作曲的日益蓬勃发展,人们希望计算机能够更加深入的了解音乐的曲式,结构,情感,风格,而和弦进行是音乐拥有不同可能性的基础。现有的大部分工作都是在波形音乐的基础上做和弦识别。

目前比较主流的和弦进行识别方法通常是两类:一种是在波形层面对波形进行频谱分析,如获取波形文件的节奏起始点、梅尔倒谱系数等等,再把这些频谱特征经过神经网络的训练,预测未知频谱的和弦进行。这一类方法的问题在于:要获得具有精细标注和弦进行的波形文件是一件困难的事情,并且由于神经网络的黑盒特性,通常要提升准确率,只能通过增加数据量才能显著提升。因此,这种方法停留在实验室级别,没办法直接落地应用。

另一种是在MIDI层面进行和弦进行推理,最经典的一个案例是Google Magenta中和弦识别的方法,它构建了一条隐马尔科夫链,并利用维特比算法获取一段时间内概率最大的和弦,迭代这个过程最终获得和弦进行。这一类方法的问题在于:和弦进行的细粒度是不可控的,在很多速度有变化或者调性有变化的MIDI序列当中没办法准确识别和弦进行。

综上所述,现如今存在的和弦进行识别方法都没有达到工业可用的级别。并且现有的MIDI序列和弦进行识别方法有极其有限。因此,迫切地需要一种能够在工业上可落地应用的识别MIDI序列和弦进行的技术方案。

发明内容

本发明的目的是提供了一种MIDI序列和弦进行识别方法和装置,能够解决现有和弦进行识别不准确且不能工业应用的问题。

为实现上述发明目的,本发明提供的技术方案为:

一种MIDI序列和弦进行识别方法,包括以下步骤:

获取MIDI文件和目标轨道;

根据MIDI文件识别目标轨道上的音乐调性;

确定和弦识别的多个细粒度,根据MIDI文件和音乐调性确定每个细粒度下和弦进行;

融合多个细粒度下的和弦进行,获得MIDI序列的最终和弦进行。

一种MIDI序列和弦进行识别装置,计算机存储器、计算机处理器以及存储在所述计算机存储器中并可在所述计算机处理器上执行的计算机程序,其特征在于,所述计算机存储器中存有关系大小调音高集合,所述计算机处理器执行所述计算机程序时实现如上述的MIDI序列和弦进行识别方法。

与现有技术相比,本发明具有的有益效果至少包括:

本发明提供的MIDI序列和弦进行识别方法和装置能够根据不同细粒度进行和弦进行识别以提高和弦进行识别的准确性,且方法简单,可以工业应用。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图做简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动前提下,还可以根据这些附图获得其他附图。

图1是本发明实施例提供的MIDI序列和弦进行识别方法的流程框图;

图2是本发明实施例提供的音乐调性识别的流程图;

图3是本发明实施例提供的大调音高集合分布折线图;

图4是本发明实施例提供的小调音高集合分布折线图;

图5是本发明实施例提供的和弦进行识别的流程图;

图6是本发明实施例提供的多细粒度下的和弦进行融合示意图。

具体实施方式

为使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例对本发明进行进一步的详细说明。应当理解,此处所描述的具体实施方式仅仅用以解释本发明,并不限定本发明的保护范围。

为了解决现有的MIDI序列和弦进行识别方法采用深度学习因为数据样本少不能直接工业应用的问题,同时也为了解决现有MIDI序列和弦进行识别方法由于细粒度不可控导致的识别结果不准确的问题。本发明实施例提供了一种MIDI序列和弦进行识别方法和装置,下面针对方法和装置一一说明。

图1是本发明实施例提供的MIDI序列和弦进行识别方法的流程框图。如图1所示,该MIDI序列和弦进行识别方法包括以下步骤:

步骤1,获取MIDI文件和目标轨道。

MIDI文件是指以'.mid'或者'.midi'为后缀的文件。每个MIDI文件都包含多个音乐轨道,本发明提供的和弦进行识别是针对MIDI中的单轨道数据进行识别,被处理的轨道的认为是目标轨道,读数据时根据目标轨道直接读取MIDI文件中目标轨道的数据。

步骤2,根据MIDI文件识别目标轨道上的音乐调性。

音乐调性是调的主音和调式类别的总称。例如,以C为主音的大调式,其调性即是“C大调”,以a为主音的小调式,其调性就是“a小调”等。一般音乐中主要有24个调性。

步骤2中主要用于调性识别,即对目标轨道的整体调性进行识别,默认该目标轨道中间没有改变调性。若有,则识别结果为持续小节数多的调性。

图2是本发明实施例提供的音乐调性识别的流程图。如图2所示,在一个实施方式中,根据MIDI文件识别目标轨道上的音乐调性包括:

(a)针对MIDI文件在目标轨道上的所有音符,构建以横坐标为音高类别,纵坐标为音高个数的音高分布直方图。

在标准MIDI音乐体系中,其规定了从0到127,总计128个值的音高范围。其中,每个音高根据其色度特征,又可以被叫做音高类别特征,可以被分成12个音高类别,每个音高类别对应相同色度特征的音高。

将MIDI文件在目标轨道上的所有音符按照每个音符的音高类别分类,并统计每个音高类别的个数,形成以横坐标为12个音高类别,纵坐标为每个音高类别个数的音高分布直方图。

(b)从音高分布直方图中筛选出个数为非0的音高类别,构成原始音高集合。

某个音高类别对应的所有音高都没有在当MIDI文件在目标轨道上出现,即统计轨道中没有用到这个音高类别,此时音高分布直方图中该音高类别的个数为0,这样的音高类别对调性识别和和弦识别是无效的,因此将该音高类别排除,取非0的音高类别组成原始音高集合,该原始音高集合中包含音高类别以及音高类别对应的个数,可以构建以横坐标为音高类别,纵坐标为音高类别对应个数的直方图或者折线图表示原始音高集合。

(c)在原始音高集合的长度等于7时,进行调性硬匹配,即从音高集合库中匹配相同的匹配音高集合以确定调性主音,再根据关系大小调音高集合确定调性调式,结合调性主音和调性调式确定调性。

一个基本调性由7个音高类别组成,因此,在识别原始音高集合的调性时,首先判断原始音高集合的长度,也就是原始音高集合中音高类别的个数是否等于7,当等于7的时候,采用硬匹配,也即是直接将原始音高集合与从音高集合库中的匹配音高集合进行调性匹配,匹配成功,则调性识别是100%正确。

从音高集合库是建立调性与匹配音高集合一一映射关系的数据库,针对该音高集合库中的每个匹配音高集合,均由7个音高类别组成,且均有唯一的包含主音和调式的调性。该音高集合库总共包括大调12种和小调12种共计24种调性,并且该音高集合库扩展性强,当检测一些更复杂的MIDI时,可以直接在音高集合库中加入更复杂的调式,如利地亚调式,多里安调式等等。

关系大小调也叫平行大小调,是指调号相同的一对大小调,它们互相为对方的关系大调或关系小调。关系大小调是指调号相同、音列关系相同、主音高度不同的一个大调式和一个小调式。例如音高集合库中的匹配音高集合I,组成音高类别为{“C”,“D”,“E”,“F”,“G”,“A”,“B”},调性为C大调;匹配音高集合II,组成音高类别为{“A”,“B”,“C”,“D”,“E”,“F”,“G”},调性为A小调。因此,匹配音高集合I和匹配音高集合II对应的C大调和A小调互为关系大小调。

在一个实施方式中,调性硬匹配时,从音高集合库中匹配与原始音高集合相同的匹配音高集合,将匹配音高集合的调性主音作为原始音高集合的调性主音;

计算原始音高集合分别与关系大小调音高集合的互相关系数,以大互相关系数对应的大调或小调作为原始音高集合的调性调式;

结合调性主音和调性调式确定原始音高集合的调性。

图3是本发明实施例提供的大调音高集合分布折线图。图4是本发明实施例提供的小调音高集合分布折线。在计算互相关系数时,计算原始音高集合的直方图或折线图与大调音高集合分布折线图的互相关性,得到一个互相关系数,同时计算原始音高集合的直方图或折线图与小调音高集合分布折线图的互相关性,得到另一个互相关系数,然后从两个互相关系数中选择较大的互相关系数对应的大调或者小调为原始音高集合的调性调式。举例,假设原始音高集合的直方图或折线图与小调音高集合分布折线图的互相关系数为0.9,原始音高集合的直方图或折线图与小调音高集合分布折线图的互相关系数为0.8,则0.8对应的小调为原始音高集合的调性调式,该调性调式与调性主音组成调性。

由于目标轨道的原始音高集合的直方图与关系大小调的音高分布集合折线图均为维度为12的数组,调用numpy库的correlate函数分别计算大调音高集合分布折线图与原始音高集合的直方图、小调音高集合分布折线图与原始音高集合的直方图的互相关系数。

(d)在原始音高集合的长度不等于7,或者从音高集合库中匹配不到相同的匹配音高集合时,进行调性软匹配,即根据音高集合库中匹配音高集合与原始音高集合的相关性确定调性。

调性软匹配是目标轨道的原始音高集合通过硬匹配的方法不能匹配到相应调式所采取的方法,它是通过计算目标轨道的原始音高集合的音高分布集合直方图与音高集合库中所有已知调性的匹配音高分布集合折线图的相关性来确定最终的调性。

在另外一个实施方式中,调性软匹配时,计算音高集合库中每一个匹配音高集合与原始音高集合的互相关系数,以最大互相关系数对应的匹配音高集合的调性作为原始音高集合的调性。

在调性软匹配时,同样调用numpy库的correlate函数,计算目标轨道的原始音高集合分布直方图与音高集合库中所有调性的匹配音高集合折线图的互相关系数,以以最大互相关系数对应的匹配音高集合的调性作为原始音高集合的调性。

在实际应用中,由于一个MIDI很容易被判断成属音为主音的调,故判断出最相关的调性后,为了提升调性识别的准确性,还需要增加一个上五度的调性。即在另外一个实施方式中,调性软匹配时,在根据匹配音高集合与原始音高集合的相关性确定原始音高集合的原调性之后,获得原调性的上五度调性;

比较原调性对应的原始音高集合和上五度调性对应的上五度音高集合,从原始音高集合中找到不属于上五度音高集合的第一音高类别,从上五度音高集合中找到不属于原始音高集合的第二音高类别;

以音高类别个数最多的第一音高类别或第二音高类别所属于的音高集合对应的原调性或上五度调性作为最终调性。

举例说明,假设原始音高集合为{“C”,“D”,“E”,“F”,“G”,“A”,“B”},上五度音高集合为{“E”,“F#”,“G#”,“A”,“B”,“C#”,“D#”},则从原始音高集合中找到不属于上五度音高集合的第一音高类别为{“C”,“D”,“F”,“G”},从上五度音高集合中找到不属于原始音高集合的第二音高类别为{“F#”,“G#”,“C#”,“D#”}。若在MIDI文件中,含有第一音高类别的音符个数总数为44,含有第二音高类别的音符个数总数为37;则以第一音高类别所属于的原始音高集合对应的原调性为最终调性。

步骤3,确定和弦识别的多个细粒度,根据MIDI文件和音乐调性确定每个细粒度下和弦进行,也就是分步和弦标注。

实施例中,用bar_beats参数表征了和弦识别的细粒度,即以多少拍为最小单位来识别和弦。选择的细粒度不同,识别得到的和弦结果也不同,因为通过识别多个细粒度下的和弦能够提升最终识别和弦进行的准确度,因此,首先要确定不同的细粒度。本实施例中可以以1拍、2拍和4拍作为一个细粒度。

图5是本发明实施例提供的和弦进行识别的流程图。如图5所示,在一个实施方式中,根据MIDI文件和音乐调性确定每个细粒度下和弦进行包括:

(a)解析MIDI文件,获得MIDI的播放速度、相邻两个播放速度的时间间隔、钢琴卷帘图。

播放速度用bpm表示,若MIDI非匀速播放时,还需要得到相邻两个播放速度的时间间隔interval。钢琴卷帘图用piano_roll表示,是一个二维数组,横坐标为时间步,纵坐标为音高,二维数组中的每个数值表示每个音高在每个时间步上的响度。

(b)根据细粒度对钢琴卷帘图进行统计处理获得音高统计数组。

在一个实施方式中,根据细粒度对钢琴卷帘图进行统计处理获得音高统计数组包括:

将钢琴卷帘图根据细粒度压缩成预统计数组frames;

对预统计数组做归一化处理后,提取每个音高类别的最大归一化值,每个音高类别与对应的最大归一化值组成中间统计数组framee;

提取中间统计数组中大于阈值的音高类别组成音高统计数组tones。

实施例中,压缩时方式为将每个细粒度对应的拍内的所有音高按行相加,得到每个音高在细粒度内的响度值,然后以128个音高为纵坐标,细粒度为横坐标,每个音高在细粒度内的响度值为元素值组成1×128的一维数组,作为预统计数组frames。

归一化方式为将预统计数组frames中的所有响度值除以最大响度值,得到归一化值,该归一化值是0~1之间的数值,也就是每个音高对应一个0~1之间的归一化值,然后统计每个音高类别对应的所有音高的归一化值,提取音高的最大归一化作为音高类别的最大归一化值,然后将音高类别与对应的最大归一化值组成中间统计数组framee,由于总计有12个音高类别,因此,该中间统计数组framee是一个1×12的一维数组。

在获得中间统计数组framee后,提取最大归一化值较大的音高类别组成音高统计数组,因此设置阈值进行筛选,筛选中间统计数组中大于阈值的音高类别组成音高统计数组tones。该阈值举例设为0.1,可以根据实际应用情况修改,在此不做具体限定。

(c)在音高统计数组处于长度范围内时,从和弦数据库中获得与音高统计数组唯一匹配的和弦,确定为MIDI文件在当前细粒度下的判定和弦,对应的相关度为100。

设定音高统计数组的长度范围,也就是音高统计数组中音高类别的个数范围为(a,b],a为长度范围的最小值,b为长度范围的最大值,a<b,音高统计数组处于长度范围内时,意思是音高统计数组中音高类别的个数x满足a<x≤b。举例说明,长度范围可以为(2,5]。

和弦数据库是一个音高类别与和弦一一映射的数据库,每个和弦包含a+1~b个音高类别,举例说明,和弦C的组成为{“C”,“D”,“E”}。该和弦数据库涵盖了乐理教程中提及的所有常用和弦,同时可扩展性很强,若碰到更为复杂的曲式时,可以直接在库中增加和弦。

当音高统计数组处于长度范围内时,初步认为该音高统计数组的和弦应该可以在和弦数据库中匹配的到,因此,从和弦数据库中查找与音高统计数组完全相同的和弦作为唯一匹配的和弦,并将该和弦为MIDI文件在当前细粒度下的判定和弦,因为匹配的和弦与音高统计数组的音高类别完全相同,所以对应的相关度为100。

(d)在音高统计数组大于长度范围的最大值时,根据音乐调性计算和弦数据库中所有和弦与原始音高集合的相关度,进而确定MIDI文件在当前细粒度下的判定和弦和对应的相关度。

当音高统计数组的长度大于长度范围的最大值b时,由于音高类别个数超出了和弦数据库每个和弦包含的音高类别个数,无法直接匹配确定和弦,因此采用计算相关度的方式确定最接近的和弦为判定和弦。

在另外一个实施方式中,在音高统计数组大于长度范围的最大值时,遍历和弦数据库中所有和弦,针对每个和弦获取与音高统计数组相同的音高类别组成集合;

当集合的长度小于长度范围的最小值时,直接输出MIDI文件在当前细粒度下的判定和弦为音乐调性,对应的相关度为-1;

当集合的长度大于长度范围的最小值时,计算和弦数据库中每个和弦与音乐调性的第一相关度,同时计算每个和弦与原始音高集合frame的第二相关度,第一相关度和第二相关度的和作为每个和弦的最终相关度;

当最大总相关度大于相关度阈值时,选择最大总相关度对应的和弦作为MIDI文件在当前细粒度下的判定和弦,对应的总相关度为判定和弦的最终相关度。

当得到最大总相关度max_similarity后,还需要对该最大总相关度进行相关度阈值判断,当最大总相关度大于相关度阈值时,将计算最大总相关度时用到的和弦max_chord作为MIDI文件在当前细粒度下的判定和弦,对应的总相关度为判定和弦的最终相关度。当最大总相关度小于等于相关度阈值时,则直接输出MIDI文件在当前细粒度下的判定和弦为音乐调性,对应的相关度为-1。相关度阈值举例可以为2。

实施例中,直接计算和弦数据库中每个和弦与音乐调性的点积作为相关度。

(e)在音高统计数组小于长度范围的最小值时,直接输出MIDI文件在当前细粒度下的判定和弦为音乐调性,对应的相关度为-1。

(f)将判定和弦和对应的持续时长组成和弦进行。

和弦进行是指和弦和持续时长组成,例子为:['EbM9',4,'Ab',2,'Bb7',2,'C_Minor',2],表示该轨道的和弦进行为:EbM9,Ab,Bb7,C_Minor;每个和弦持续的时长分别是4拍,2拍,2拍,2拍。特别注意的是该方法中默认MIDI文件中的数据均为4/4拍。

步骤4,融合多个细粒度下的和弦进行,获得MIDI序列的最终和弦进行。

经过步骤3,可以获得每个细粒度下的和弦进行,为了提升和弦进行识别的准确性,还需要融合每个细粒度下的和弦进行,具体地,融合多个细粒度下的和弦进行,获得MIDI序列的最终和弦进行包括:

针对每个节拍,选择相关度最大的和弦和对应的持续时间组成MIDI序列的最终和弦进行。

图6是本发明实施例提供的多细粒度下的和弦进行融合示意图。如图6所示,第一行为beat_step=1的输出,有四个和弦(“C_Minor”,“Eb”,“C_Minor”,“Bb”)分别对应四个相关度(80,100,-1,100),第二行则是两个和弦(“Eb”,“Eb”)对应两个相关度(95,100),第三行为一个和弦(“EbM9”)对应一个相关度(90)。标注融合方法先将三种输出在时间轴上对齐,并逐拍比较哪一种情况的相关度比较高,并将高者记录到最终结果,则最终的和弦进行为(“Eb”,1,“Eb”,1,“Bb”,1,“Bb”,1),其中每个和弦后所加的数字表示该和弦所持续的拍数。

实施例提供的MIDI序列和弦进行识别方法能够根据不同细粒度进行和弦进行识别以提高和弦进行识别的准确性,且方法简单,可以工业应用。

实施例还提供了一种MIDI序列和弦进行识别装置,计算机存储器、计算机处理器以及存储在所述计算机存储器中并可在所述计算机处理器上执行的计算机程序,其特征在于,所述计算机存储器中存有关系大小调音高集合,所述计算机处理器执行所述计算机程序时实现上述MIDI序列和弦进行识别方法。

需要说明的是,上述实施例提供的MIDI序列和弦进行识别装置与MIDI序列和弦进行识别方法实施例属于同一构思,其具体实现过程详见MIDI序列和弦进行识别方法实施例,这里不再赘述。

实际应用中,计算机存储器可以为在近端的易失性存储器,如RAM,还可以是失性存储器,如ROM,FLASH,软盘,机械硬盘等,还可以是远端的存储云。计算机处理器可以为中央处理器(CPU)、微处理器(MPU)、数字信号处理器(DSP)、或现场可编程门阵列(FPGA),即可以通过这些处理器实现MIDI序列和弦进行识别方法步骤。

实施例提供的MIDI序列和弦进行识别装置能够根据不同细粒度进行和弦进行识别以提高和弦进行识别的准确性,且方法简单,可以工业应用。

以上所述的具体实施方式对本发明的技术方案和有益效果进行了详细说明,应理解的是以上所述仅为本发明的最优选实施例,并不用于限制本发明,凡在本发明的原则范围内所做的任何修改、补充和等同替换等,均应包含在本发明的保护范围之内。

14页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种内置集成电路驱动芯片的有源蜂鸣器

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!