本发明涉及一种基于复杂网络的作曲方法,特别涉及一种基于音符复杂网络的低相似度新曲生成方法。
背景技术:
人类的生活和生产活动依赖于大量自然界及人造的复杂系统,对于一个给定系统,其各组件之间的联系和交互模式可以用网络表示,系统的各个组件可以抽象成网络中的节点,组件间的联系抽象成边。在过去的二十年中,复杂网络的研究激发了大量应用领域的兴趣,在艺术领域也取得了一定的理论和应用成果。目前的基础理论研究主要对不同类型的音乐进行复杂网络建模和网络特征分析比较,例如2004年silva、soares等人发表在《physicaa》上的论文,以及2017年ferretti发表在《multimediatools&applications》上的论文。
进一步地,应用研究也有了初步的尝试,研究主要集中在人工作曲,例如2010年liu、chi等人发表在《physicaa》上的论文,以及2014年gomez、lorimer等人发表在国际会议internationalconferenceonnonlineardynamicsofelectronicsystems上的论文。
结合现有应用研究来看,基于复杂网络的人工作曲基本采用网络中的随机游走实现,差异主要体现于建模和随机游走的方式不同。无论采用怎样的建模和随机游走方式,最终关注的焦点在于两个方面。首要的是产生的新曲应当悦耳动听,其次是新曲与原曲应当有所区别和变化,重复度不能过高。
目前的部分技术技术,在建模或随机游走中,通过忽略边的方向以遍历到网络中更多的节点,但产生的新曲片段可能违背音乐旋律的规则而不够悦耳。另一些技术则给边赋予权重,并基于边权重随机游走,以遵循原曲集合的旋律规则。虽然这样产生的旋律更加动听,但其游走容易困在小范围节点之中,与原曲集合局部片段的相似程度高。因此,目前的技术在保留音韵和降低相似度两个方面难以协调。
技术实现要素:
为了解决复杂网络作曲中音韵保持和相似度降低之间的协调问题,本发明首先考虑的是保证新曲遵循原曲集合的作曲规则,因此在复杂网络构建时保留了边的方向性,且在网络随机游走中按边的方向游走。本发明在此基础上考虑降低相似度,选用不同作曲家的经典单曲来构建音乐网络,使得节点的数目和可供选择的游走路径更加丰富;更进一步地,对待游走节点实行等概率地沿其所有邻接边游走,以此避免游走困在原曲中反复的部分。
为了实现上述技术目的,本发明的技术方案是,一种基于音符复杂网络的低相似度新曲生成方法,包括以下步骤,
步骤一:构建原曲曲谱集;
步骤二:定义音符的复杂网络抽象方法,并根据步骤一中的各曲谱构建音符复杂网络;将此网络中的多重边合并为单一的有向边,由此产生一个简化的网络;
步骤三:根据步骤二所得的简化网络,设定网络中随机游走的初始条件;
步骤四:根据步骤三中的设定以及当前实际游走的状态,判断当前是否执行游走;
步骤五:根据步骤四中判断结果,选择无限制地随机游走至一个邻居节点,或将游走完的全部节点序列还原为音符序列,即新曲旋律。其中,无限制的随机游走属于公知技术。
进一步的,所述的方法,所述的步骤一中构建原曲曲谱集的步骤为:
m={s(i)}|card(m)=n;i=1,2,...,n
其中,m为原曲曲谱集,s(i)表示第i个经典曲谱(不含和弦),n表示曲谱集中曲谱的总数,|card(m)=n表示同时满足曲谱集合m中不同曲谱的数目为n,即不构建相同曲谱。具体的经典曲谱可以由作曲者从不同国家,不同作曲家的经典曲谱中选取,以此丰富后续构建的音符网络中节点的数目和可供选择的游走路径。另外,曲谱具有多样化的存在形式,可由作曲者自行选择印刷或图片或midi格式的曲谱。
进一步的,所述的方法,所述的步骤二中构建并简化音符复杂网络的步骤为:
步骤1:定义音符的复杂网络抽象方法;
音符复杂网络的抽象包括对节点和边的抽象。其中,节点的抽象方法为:将一个包含特定音高和时值的音符或包含特定时值的休止符抽象为节点n(i);边的抽象方法为:若n中的两个节点n(i)和n(j)所对应的音符或休止符在曲谱s(i)中相继出现,且之间不存在其他音符或休止符,则将节点n(i)和n(j)的时间关联抽象为有向边,边的方向为n(i)→n(j)。
由此,节点的集合n定义为n={ni},有向边的集合a定义为a={n(i)→n(j)},音符的复杂网络g定义为节点与边的集合,即g=(n,a)。
步骤2:构建音符复杂网络;
根据步骤二的步骤1中的抽象方法,构建音符复杂网络节点和边,方法为:
首先,根据步骤二的步骤1中节点的抽象方法,采用特定音高和时值或休止符和特定时值组合,构建网络节点n(i)。此处,特定的音高限定为常用音高,即:高音、中音、低音中的1-7(do/rui/mi/fa/suo/la/xi);特定的时值限定为常用时值,即:四拍、三拍、二拍、一拍半、一拍、3/4拍、1/2拍、3/8拍、1/4拍(以四分音符为一拍,各时值在简谱中的名称分别对应了全音符、二分音符加附点、二分音符、四分音符加附点、四分音符、八分音符加附点、八分音符、十六分音符加附点、十六分音符)。由此,常用音符由3个音阶,每个音阶7个基本音,加上休止符,与9种常用时值组合而成,对应到音符复杂网络中的节点集合,集合中节点个数为(3×7+1)×9=198个。
然后,根据步骤二的步骤1中有向边的抽象方法,利用步骤一中的经典曲谱s(i)构建节点间的有向边。从第一个经典曲谱s(1)开始,在第1个和第2个音符所对应的节点n1(1)和n1(2)之间构建一条有向边n1(1)→n1(2);然后在第2个和第3个音符所对应的节点n1(2)和n1(3)之间构建一条有向边n1(2)→n1(3);依此类推,直至第1个经典曲谱的最后两个音符对应的节点之间的有向边构建完。同理,从s(2)至s(n)依次构建完剩余经典曲谱对应的有向边,由此完成整个音符复杂网络的构建。
步骤3:简化音符复杂网络;
依据步骤二的步骤2中所得的音符复杂网络,将其简化,方法为:
若节点n(i)存在多条指向n(j)的有向边,则将其合并为1条有向边,方向不变。此处,合并后的有向边不赋予权值,因为基于边权重的随机游走,容易反复地游走于权重较大的路径,将导致生成的旋律容易“困在”一段旋律中。
简化所有节点间的多重有向边后,将生成一个新的网络,定义为g′=(n,a′)。
进一步的,所述的方法,所述的步骤三中设定随机游走初始条件的步骤为:
步骤①:设定游走节点;
游走起始节点定义为s,可以由用户设定,选择范围为原曲曲谱集m中的任一音符。当前待游走节点定义为v,v的初始节点为s。
步骤②:设定游走步长;
游走最大步长定义为tmax,具体值可以由用户设定,取值范围为大于0的整数。实际游走的步长定义为tv,初始值为0;
进一步的,所述的方法,所述的步骤四中判断当前是否执行游走的步骤为:
根据步骤三的步骤②中设定的游走最大步长,并依据当前实际游走的步长和当前待游走节点的邻接节点个数来判断是否执行下一步游走,步骤为:
其中,(tv≤tmax且num(vout)>0)表示对“实际游走的步长tv小于等于最大游走步长tmax”且“当前待游走节点v指向的节点个数num(vout)大于0”这个命题进行真假判断;t表示命题判断结果为真,即进入下一步的游走;f表示命题判断结果为假,即结束游走。
进一步的,所述的方法,所述的步骤五中执行游走并判断是否继续游走,或生成新曲旋律的步骤为:
根据步骤四中需要执行游走的情形,首先从当前待游走节点无限制地随机游走至一个邻居节点。其中,“无限制”指的是允许当前待游走节点游走到所有指向的节点,无论指向的节点是否已经游走过。无限制的随机游走属于公知技术,步骤为:
在当前待游走节点指向的节点中随机选择一个节点作为游走到的节点,定义为vnext;定义游走的节点序列为tv,初始序列设为[s],且每次游走后添加游走的节点vnext到节点序列tv中,即tv=[tv,vnext];将当前游走的源节点v更新为vnext,即v=vnext;将实际游走步长tv更新为tv+1,即tv=tv+1。
当前游走执行完后,再返回步骤四,判断是否执行新的游走。依此循环,执行游走并判断是否继续游走。
根据步骤四中结束游走的情形,依据步骤二的步骤2中节点与音符的对应关系,将游走的全部节点序列tv还原为音符序列tv′,即新曲旋律,由此生成新曲。最终,音符序列的长度为tmax+1或tv+1,视结束条件而定。若tv的最终值等于tmax,则音符序列的长度为tmax+1(加上起始节点);若tv的最终值小于tmax,则音符序列的长度为tv+1(加上起始节点)。
与现有技术相比,本发明主要特点在于,吸收并融合了不同作曲家的作曲风格,增大了音乐网络中的节点的使用范围,也使得可供选择的游走路径更加丰富,降低了生成新曲与原曲之间的相似度;不仅如此,我们对待游走节点实行等概率地沿其所有邻接边游走,避免了执行游走时容易困在原曲中反复部分的现象。
本发明在音符复杂网络建模时未纳入和弦等复杂音乐形式,而是采用常用的简谱中音符的表现形式,使得网络的节点规模控制在较小范围且节点集固定,易于网络中边的构建。不仅如此,我们在简化网络中仍然保留了网络中孤立的节点,这样的措施对后期原曲曲谱集增加带来了较好的适应性。游走时考虑的边的方向且忽略边的权重,相比任意方向游走、基于节点度游走、基于节点强度游走而言,所生成的新曲更贴近原曲曲谱集中旋律的构成规律。
在实际操作中,由于最终将忽略边的权重,因此可以直接忽略重复性旋律的边的构建,减轻网络构建的工作量。此外,起始节点的选择有较强的包容性,用户可以任选在原曲曲谱集中出现的音符所对应的节点。
下面结合附图对本发明作进一步说明。
附图说明
图1为本发明的流程图;
图2为本发明中构建并简化音符复杂网络后的示意图;
图3为本发明中随机进行一次新曲生成得到的曲谱;
具体实施方式
参见图1,图1为本发明的流程图。以下举例说明本发明的具体实施过程。
实施例1:利用7个简谱来构建音符复杂网络并随机游走生成新曲
1)构建原曲曲谱集
本实施例中选用7首大众熟知的经典歌曲的简谱作为曲谱集,包括《生日歌》、《欢乐颂》、《小燕子》、《友谊天长地久》、《平安夜》、《剪羊毛》、《小星星》。各简谱均选自许三求编著的《轻松学简谱》一书(上海音乐学院出版社,2014),并且容易从网络资源中获取。
2)构建并简化音符复杂网络
本实施例中节点集n中节点的数目为198个,包含节点为{节点1,节点2,…,节点198}。其中,节点1~7分别代表高音1的常用时值,即四拍、三拍、二拍、一拍半、一拍、3/4拍、1/2拍、3/8拍、1/4拍;节点8~14分别代表高音2的常用时值;依此类推,节点1~63分别代表高音1~7的常用时值;依此类推,节点64~126分别代表中音1~7的常用时值,节点127~189分别代表低音1~7的常用时值;此外,节点190~198分别代表休止符0的常用时值。
依据曲谱《生日歌》中音符的顺序,构建对应节点之间的有向边,包括169→169,169→176,176→167,157→68,68→183,183→169,169→169,169→176,176→167,167→77,77→66,66→169,169→169,169→86,86→68,68→185,185→169,169→97,97→97,97→167,167→68,68→77,77→66。依此类推,使用剩余曲谱构建完有向边后,完成初步的音符复杂网络的构建。
将得到的网络进行简化,同一对节点间同方向的多条边合并为不带权值的单边,方向维持不变。图2为本发明的实施例1中,构建并简化音符复杂网络后的示意图。示意图中,节点的标号置于节点内,若节点含有指向自身的边,则在节点下方标注了“withloop”,即带环。
3)设定随机游走初始条件
从原曲曲谱集中随机选择节点,选择到的节点为节点88,将其设定为游走起始节点,亦为初始的当前待游走节点。此处,参考《生日歌》的曲谱中音符的个数,游走最大步长设定为24(也可以设定为其他正整数)。此时,实际游走的步长的值为初始值0。
4)判断当前是否执行游走
根据判断条件,实际游走的步长为0,小于最大游走步长24;并且当前待游走节点88指向的节点有39,79,86,88,97,102,104,105,106,节点个数大于0。因此进入下一步的游走。
5)执行游走并重新判断
在节点88指向的节点中随机选择,选择到的节点为39。游走的初始序列为[88],此时添加节点39到节点序列中,即[88,39]。将当前游走的源节点88更新为39,将实际游走步长0更新为1。执行完本次游走后,回归步骤四,判断是否执行新的游走。依此,执行新一轮游走并判断,直至判断结果为假,结束游走。
6)生成新曲
最终,随机游走结束时,游走完的全部节点序列为[88,39,4,25,14,5,6,108,88,104,104,5,23,5,6,126,115,7,106,111,85,7,113,113,113]。将其还原为音符序列,即新曲旋律,由此生成新曲。
图3为本发明的实施例1中随机进行一次新曲生成得到的曲谱。
以上是对基于音符复杂网络的低相似度新曲生成的一个例子分析。