CN104464702B - 基于遗传算法的和弦伴奏生成方法 - Google Patents
基于遗传算法的和弦伴奏生成方法 Download PDFInfo
- Publication number
- CN104464702B CN104464702B CN201410582178.1A CN201410582178A CN104464702B CN 104464702 B CN104464702 B CN 104464702B CN 201410582178 A CN201410582178 A CN 201410582178A CN 104464702 B CN104464702 B CN 104464702B
- Authority
- CN
- China
- Prior art keywords
- chord
- tone
- consonance
- degree
- current
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Electrophonic Musical Instruments (AREA)
Abstract
本发明提供一种和弦伴奏生成方法,包括输入一段旋律,将旋律分解为若干单音序列;对每一单音序列采用遗传算法生成相应的和弦;所有单音序列相应的和弦依次组成旋律的和弦;同时输出旋律与旋律的和弦。针对单音序列采用遗传算法生成和弦,避免了针对单音生成和弦缺乏全局性问题,利用音程协和度原理和音阶来构建评分系统,找到与输入旋律协和的和弦;当现有的和弦不能满足要求时,采用遗传算法进行和弦变换,进化出新的和弦,找到与输入旋律协和的和弦,跳出了“可预测的固定组合”的限制,令生成的伴奏和弦丰富多彩;采用音阶模板提高音乐风格的适应性;通过协和度阈值改变生成的和弦协和度与复杂度。本发明还提供一种和弦生成方法。
Description
技术领域
本发明属于计算机智能技术领域,涉及一种和弦伴奏生成方法,尤其涉及一种基于遗传算法的和弦伴奏自动生成方法。
背景技术
和弦(chord)源自希腊文,原意是指弦线。在音乐理论里,是指组合在一起的两个或更多不同音高的音。在欧洲古典音乐及受其影响的音乐风格里,更多时候是指三个或以上的音高组合,而两个音高的组合则以音程来描述。和弦的组成音,可分开演奏,亦可同时演奏。分开演奏的,称为分解和弦〔或分散和弦〕。
和弦有三度叠置与非三度叠置之分,在西方传统和声中的和弦,均按照三度叠置的原则构成。
因此和弦表示为若干组成音的集合。
按照现代和声协和理论,当两个不同音高的音同时奏响时,两音之间的音程差决定了这个和声的协和度,并且这个协和度是可以根据音程差进行分类的。
一种常见的协和度分类方式如下表所示:
序号 | 音程差 | 协和度 |
1 | 纯一度(本音)、纯八度 | 绝对的协和 |
2 | 纯五度、纯四度 | 开放的协和 |
3 | 大、小三度 | 中性 |
4 | 大、小六度 | 柔和的协和 |
5 | 大二度、小七度 | 轻度的不协和 |
6 | 小二度、大七度 | 尖锐的不协和 |
7 | 增四度、减五度 | 性质游离不稳定 |
现有的自动伴奏技术需要由用户给出和弦,由琶音生成器(Arpeggiator)生成最终的伴奏。
琶音生成器的原理即借由有限状态机(DFA)对给出的和弦里的音进行排列组合,生成一个由和弦音组成的单音序列。
与之相比,和弦的自动生成一直是一个没有解决的问题。直到近年出现了一个自动生成和声的软件ZplaneVielklang Instant Harmony,该软件的实现方法为:在音阶中,按一定规则找与旋律音相应级数的音;生成的结果为:输入旋律中的每个音都有一个对应的和声。
但该方法有两个缺点:
一、该方法只关注于每一个单音的和声,缺乏全局性,无法对一个小节、一句乐句的和声进行分析和生成,对编曲帮助不大。
二、该方法依赖于有限状态机,生成的和声有明显的模式化倾向,即输入一个音多次会得到相同的和弦,结果的多样性得不到保障。
以往的机器作曲算法往往采用统计学方法模拟大师的作曲风格;即使是采用人工智能算法的,也往往在尝试模仿具有某种特定模式的旋律,该模式即所谓的“音乐风格”。在已知旋律的基础上生成的伴奏和弦,陷入“可预测的固定组合”,失去了伴奏和弦丰富色彩,更谈不上帮助专业音乐人获取全新的音乐灵感。
因此本领域技术人员致力于提供一种和弦伴奏生成方法,该和弦伴奏生成方法更具全局性,且在保障了和弦协和度的情况下生成结果更具多样性。
发明内容
针对现有技术中存在的问题,本发明的一个目的是提供一种和弦伴奏生成方法,能够根据一段主旋律生成其伴奏和弦序列,生成的伴奏和弦要求与原旋律相协和,并且要求多次生成的结果重复性极低,能够起到计算机辅助编曲的作用。
本发明的另一个目的是提供一种和弦伴奏生成方法,使生成的伴奏和弦具有良好的音乐风格适应性,进一步保证生成的伴奏和弦要求与原旋律相协和。本发明通过音阶模板,来保证生成的伴奏和弦要求与原旋律相协和。
遗传算法是模仿自然界生物进化机制发展起来的随机全局搜索和优化方法,它借鉴了达尔文的进化论和孟德尔的遗传学说。其本质是一种高效、并行、全局搜索的方法,它能在搜索过程中自动获取和积累有关搜索空间的知识,并自适应的控制搜索过程以求得最优解。遗传算法操作使用适者生存的原则,在潜在的解决方案种群中逐次产生一个近似最优解的方案,在遗传算法的每一代中,根据个体在问题域中的适应度值和从自然遗传学中借鉴来的再造方法进行个体选择,产生一个新的近似解。这个过程导致种群中个体的进化,得到的新个体比原来个体更能适应环境,就像自然界中的改造一样。
遗传算法是一种通过模拟自然进化过程搜索最优解或近似最优解的人工智能方法,在处理全局较优问题和多解问题时具有显著优势。
现实中,与一段旋律相谐和的和弦不止一个,和弦与旋律的协和度也不要求全局最优解;相反,协和度的高低起伏会造成音乐时而舒缓,时而紧张,正符合人的听音习惯。所以遗传算法是解决这个问题的最佳方法。
本发明提供一种和弦生成方法,和弦的生成是基于对单音序列的分析进行的,因此与现有技术中的和弦自动生成方法相比更具全局性,生成的伴奏和弦与原单音序列相协和;采用了遗传算法,利用最基本的、普适的音程协和度原理和音阶来构建评分系统,在已知单音序列的基础上生成较协和的和弦,使得计算机作曲跳出了“可预测的固定组合”的限制,令生成的伴奏和弦更丰富多彩,在保障了和弦协和度的情况下生成结果更具多样性,多次生成的结果重复性极低。
本发明还提供一种和弦伴奏生成方法,将输入旋律分解为若干单音序列;对每一单音序列,按照本发明提供的和弦生成方法,生成相应的和弦;将生成的所有单音序列相应的和弦依次组成输入旋律的和弦。
本发明提供一种和弦生成方法,包括以下步骤:
(1)输入单音序列;
(2)采用遗传算法生成单音序列的和弦。
本发明提供的和和弦生成方法,针对单音序列生成相应的和弦,避免了针对单音生成和弦造成的缺乏全局性问题,使得生成的和弦更具全局性,与原单音序列相协和;采用了遗传算法,在保障了和弦协和度的情况下生成结果更具多样性,多次生成的结果重复性极低。
进一步地,步骤(2)采用遗传算法生成单音序列的和弦包括以下步骤:
(21)计算单音序列与当前和弦群中的每一个和弦的协和度评分;
(22)根据协和度评分,对当前和弦群中的和弦进行排序;
(23)计算当前的标准分;
(24)排在第一位的和弦的协和度评分是否大于标准分,如果大于或等于标准分,排在第一位的和弦为单音序列的和弦;如果小于标准分,采用遗传算法进行和弦变换,变换后的和弦构成当前和弦群。
本发明提供的和和弦生成方法,并不关心如何生成旋律、如何模仿音乐风格,而专注于利用最基本的、普适的音程协和度原理和音阶来构建评分标准,,在已知单音序列的基础上找到协和的和弦。
当现有的和弦不能满足要求时,利用遗传算法进行和弦变换,进化出新的和弦,找到与输入旋律协和的和弦,使得计算机作曲跳出了“可预测的固定组合”的限制,令生成的伴奏和弦更丰富多彩。
进一步地,步骤(21)中计算单音序列与当前和弦群中的每一个和弦的协和度评分的方法为:
其中,score为单音序列与当前和弦群中的一个和弦的协和度评分,Vn[j]为单音序列,m为单音序列的单音个数;setC[i]为当前和弦的单音集合,n为当前和弦内的单音个数;Q[j]为权值序列,根据单音序列中每个单音的时值设定;getHarmonicLevel()是计算两个单音之间的协和度评分的函数,两个单音中一个为单音序列中的单音,另一个为当前和弦中的单音。
进一步地,计算两个单音之间的协和度评分时,包括以下步骤:
(211)根据所述单音序列,获得音阶模板;
(212)如果当前和弦中的单音不属于音阶模板,减小协和度评分。
本发明提供的和弦伴奏生成方法,通过音阶模板,进一步保证生成的伴奏和弦要求与原旋律相协和,使生成的伴奏和弦具有良好的音乐风格适应性。
进一步地,步骤(23)中计算当前的标准分的方法为:
其中,T为当前的标准分,Q[j]为权值序列,根据单音序列中每个单音的时值设定,Hmax为两个单音的最大和协度值;TA为标准分调整值,p为设定的协和度阈值,以百分比表示,p值越高,生成的和弦协和度越高,复杂度越低;p值越低,生成的和弦协和度越低,复杂度越高。
本发明提供的和弦生成方法,计算当前的标准分时通过协和度阈值改变生成的和弦协和度与复杂度,使得生成的伴奏和弦更加丰富多彩,帮助专业音乐人获取全新的音乐灵感;也可用于娱乐,使没有音乐知识的普通大众也能体会到音乐创作带来的快乐。用户也可以根据自己的喜好和用途设置合适的协和度阈值。
本发明提供的和弦生成方法,计算当前的标准分时采用标准分调整值TA,TA是与遗传算法中的进化代数相关的一个值,目的在于当交叉变异后仍未找到符合协和度要求的和弦时,进一步减小当前标准分,即增大当前标准分减小的幅度,以便尽快找到符合协和度要求的和弦。
进一步地,步骤(24)中采用遗传算法进行和弦变换的方法包括以下步骤:
(241)在当前和弦群中选择用于交叉的和弦;
(242)对用于交叉的和弦,进行两两交叉;
(243)对两两交叉后的和弦按变异百分比进行变异。
本发明提供的和弦生成方法,利用遗传算法,在当前和弦群中选择部分和弦,进行交叉和变异,产生进化的和弦并更新当前和弦群,在更新后的当前和弦群中寻找与单音序列协和的和弦。
进一步地,步骤(241)中在当前和弦群中选择和弦的方法为:在当前和弦群中,按交叉百分比选择和弦。
进一步地,交叉百分比大于或等于20%且小于或等于95%。
进一步地,步骤(241)在当前和弦群中每个和弦被选择的概率为:和弦的协和度评分与当前和弦群体中所有和弦的协和度评分的总和的比值。
进一步地,步骤(243)对两两交叉后的和弦按变异百分比进行变异的方法包括以下步骤:
(2431)在进化的和弦中按变异百分比选择的和弦;
(2432)将步骤(2431)中选中的每一个和弦中的随机选择一个单音,并将单音的音高值改变为一个随机值。
进一步地,变异百分比小于或等于50%。
本发明还提供一种和弦伴奏生成方法,包括以下步骤:
(1)输入一段旋律,将旋律分解为若干单音序列;
(2)对每一单音序列,按照本发明提供的和弦生成方法,生成相应的和弦;
(3)所有单音序列相应的和弦依次组成旋律的和弦;
(4)同时输出旋律与旋律的和弦。
进一步地,步骤(1)输入一段旋律采用音频输入、midi输入或者编码数据流输入。
本发明提供的和弦伴奏生成方法,采用多种方式输入,适合不同的应用场合。
进一步地,当采用数据流输入时直接输入若干单音序列。
进一步地,单音序列为小节。
进一步地,当采用音频输入时步骤(1)将旋律分解为若干单音序列包括以下步骤:
(11)利用MIR技术,将输入的音频划分为若干小节。
进一步地,当采用midi输入时步骤(1)将旋律分解为若干单音序列包括以下步骤:
(12)利用pymidi库或midi库,解码输入的midi文件或实时midi流,划分为若干小节。
进一步地,步骤(3)同时输出旋律与旋律相应的和弦采用音频输出或midi输出。
进一步地,当采用midi输出时,midi文件或实时midi流包含两条音轨,一条输出旋律;另一条输出旋律相应的和弦。
与现有技术相比,本发明提供的和弦生成方法与和弦伴奏生成方法具有以下有益效果:
(1)针对单音序列采用遗传算法生成相应的和弦,避免了针对单音生成和弦造成的缺乏全局性问题,利用最基本的、普适的音程协和度原理和音阶来构建评分系统,找到与输入旋律协和的和弦,使得生成的和弦更具全局性,与原旋律相协和;
(2)当现有的和弦不能满足要求时,利用遗传算法进行和弦变换,进化出新的和弦,找到与输入旋律协和的和弦,使得计算机作曲跳出了“可预测的固定组合”的限制,令生成的伴奏和弦更丰富多彩;
(3)通过音阶模板,进一步保证生成的伴奏和弦要求与原旋律相协和,使生成的伴奏和弦具有良好的音乐风格适应性;
(4)通过协和度阈值改变生成的和弦协和度与复杂度,使得生成的伴奏和弦更加丰富多彩,帮助专业音乐人获取全新的音乐灵感;也可用于娱乐,使没有音乐知识的普通大众也能体会到音乐创作带来的快乐。用户也可以根据自己的喜好和用途设置合适的协和度阈值。
附图说明
图1是本发明的一个实施例的和弦生成方法的流程图;
图2是本发明的一个实施例的和弦伴奏生成方法的流程图。
具体实施方式
以下是本发明的具体实施例并结合附图,对本发明的技术方案作进一步的描述,但本发明并不限于以下实施例。
如图1所示,本发明的一个实施例的和弦生成方法,包括以下步骤:
(1)输入单音序列;
(2)计算单音序列与当前和弦群中的每一个和弦的协和度评分;
(3)根据协和度评分,对当前和弦群中的和弦进行排序;
(4)计算当前的标准分;
(5)判断排在第一位的和弦的协和度评分是否大于标准分,如果大于等于标准分,则排在第一位的和弦为单音序列的和弦;如果小于标准分,则执行步骤(6);
(6)在当前和弦群中的选择和弦,进行和弦交叉与和弦变异;
(7)进行和弦交叉与和弦变异后的和弦构成当前和弦群,执行步骤(2)。
本实施例的和和弦生成方法,利用遗传算法,针对单音序列生成相应的和弦,避免了针对单音生成和弦造成的缺乏全局性问题,使得生成的和弦更具全局性,与原单音序列相协和;采用了遗传算法,在保障了和弦协和度的情况下生成结果更具多样性,多次生成的结果重复性极低。经测试,将四小节旋律重复输入30编,生成的和弦序列均与原旋律协和,并且没有一次重复。
遗传算法中需要根据个体的优劣判定个体是否进行交叉变异,因此需要一个判定标准。对于生成和弦,利用最基本的、普适的音程协和度原理和音阶来构建判定标准,才能找到与输入旋律协和的和弦。
按照现代和声协和理论,当两个不同音高的音同时奏响时,两音之间的音程差决定了这个和声的协和度,并且这个协和度是可以根据音程差进行分类,本实施例中采用如下表所示的协和度评分:
序号 | 音程差 | 协和度 | 协和度评分 |
1 | 纯一度(本音)、纯八度 | 绝对的协和 | 7 |
2 | 纯五度、纯四度 | 开放的协和 | 6 |
3 | 大、小三度 | 中性 | 6 |
4 | 大、小六度 | 柔和的协和 | 5 |
5 | 大二度、小七度 | 轻度的不协和 | 3 |
6 | 小二度、大七度 | 尖锐的不协和 | 2 |
7 | 增四度、减五度 | 性质游离不稳定 | 1 |
协和度评分也可以采用其他的协和度评分。
本实施例中两个单音之间最大协和度评分Hmax为7。
本实施例的和弦生成方法,并不关心如何生成旋律、如何模仿音乐风格,而专注于利用最基本的、普适的音程协和度原理和音阶来构建评分标准,,在已知单音序列的基础上找到协和的和弦。
当现有的和弦不能满足要求时,利用遗传算法进行和弦变换,进化出新的和弦,找到与输入旋律协和的和弦,使得计算机作曲跳出了“可预测的固定组合”的限制,令生成的伴奏和弦更丰富多彩。
步骤(2)中计算单音序列与当前和弦群中的每一个和弦的协和度评分的方法为:
其中,score为单音序列与当前和弦群中的一个和弦的协和度评分,Vn[j]为单音序列,m为单音序列的单音个数;setC[i]为当前和弦的单音集合,n为当前和弦内的单音个数;Q[j]为权值序列,根据单音序列中每个单音的时值设定;getHarmonicLevel()是计算两个单音之间的协和度评分的函数。两个单音中一个为单音序列中的单音,另一个为当前和弦中的单音。
getHarmonicLevel()函数的输入为两个单音note1与note2,输出为整数型的协和度评分,实现代码如下:
其中getPitchDifference()用于获得两个单音之间的音程差,实现代码如下:
单音以音符(Note)对象表示,包括以下属性:
1)音高:由整型数0~36表示,其中0代表休止符,1~12,13~24,25~36分别表示递增的三个八度中的12个半音(C,#C,D,D#,E,F,F#,G,G#,A,A#,B);
2)时值:由整数1~64表示,单位是一个64分音符的持续时长。例如一个四分音符为16,一个带附点八分音符为12。
音符(Note)对象包括以下方法:
计算两个单音之间的协和度评分时,包括以下步骤:
(211)根据所述单音序列,获得音阶模板;
(212)如果当前和弦中的单音不属于音阶模板,减小协和度评分。
从协和度评分表中可以看出:相同的协和度评分对应于不同的音程差,例如协和度评分为6对应于的音程差为大、小三度,大、小三度在音乐风格上是完全不同的。如果一个小节为小三度,获得的音阶模板为小三度音阶模板,也就是由小三度所有可能的单音组成的单音集合。
判断当前和弦中的单音是否属于小三度音阶模板,如果不属于,减小协和度评分,那么不属于小三度音阶模板的单音的协和度评分会减小,这个单音所属的和弦的协和度评分也会减小,从而与原单音序列音乐风格不一致的和弦被选择的可能性也会降低,进一步保证生成的伴奏和弦要求与原旋律相协和,使生成的伴奏和弦具有良好的音乐风格适应性。
音阶模板(Scale)包含如下属性:
音符向量为一个整型数向量,表示某一个音阶中,从音阶的1级音到音阶的最高级音的每个音的音高值,且所有音高值没有重复。例如A和声小调的音阶模板为(A,B,C,D,E,F,#G),E大调布鲁斯音阶的音阶模板为(E,#F,G,#G,B,#C)。所有元素的取值范围为整型数1~12,代表12个音名(C,#C,D,D#,E,F,F#,G,G#,A,A#,B)。
根据基本乐理,任意音阶中,相邻两级音之间的音程差决定了音阶的调式;而调式与音阶一级音一起决定了音阶的调性,即能把音阶中所有级数的音确定化。例如:一级音为C的大调式音阶,其调性为C大调,存在的音从一级到七级分别为“C,D,E,F,G,A,B”;而一级音为C#的大调式音阶,其调性为C#大调,存在的音从一级到七级分别为“C#,D#,F,F#,G#,A#,C”。从绝对音高来看,上述两个音阶只有2/7的音是相同的,但是使用这两个音阶的歌曲在听感上几乎是相同的,因为他们都是大调式音阶。这两个音阶中相邻两级音之间的音程差,以半音个数作为单位,都是“2,2,1,2,2,2”,这个差值数列的相同决定了音阶调式的相同,我们把这个决定性的差值数列称为调式特征值。事实上,相比一级音的音高,一个音阶的调式特征才是决定音乐风格的关键因素。在本实施例中,音阶模板文件中保存的均为调式特征值。
本实施例中,若则返回getHarmonicLevel(a,b)/bb;bb为一个正浮点数,经实验验证认为bb=2较为合适。
本实施例中,包括音阶模板加载模块,根据当前小节的音乐风格代码,从ModeModel.mmd文件中加载调式特征值数据,结合当前小节的调式一级音音高,加载音阶模板
调式数据存放在ModeModel.mmd文件中。一行表示一种调式的特征值数据,每行数据由若干一位十进制数表示,每个数之间以空格或Tab分开。数字的含义为:音阶中第n+1级音与第n级音之间的音程差为多少半音,n大于等于2。
下表为本实施例的ModeModel.mmd文件的内容,包括常用的六种调式的调式特征值,一行数据对应一种调式,从上到下依次为:自然大调调式,自然小调调式,旋律小调调式,弗利吉亚属音调式(西班牙音阶),大调蓝调调式,小调蓝调调式。用户如需新的调式,则只需在该文件末尾再加一行调式特征值数据。
音乐风格 | 音阶模板数据 |
自然大调音阶 | 2 2 1 2 2 2 |
自然小调音阶 | 2 1 2 2 1 2 |
旋律小调音阶 | 2 1 2 2 1 3 |
弗利吉亚属音音阶(西班牙音阶) | 1 3 1 2 1 2 |
大调蓝调音阶 | 2 1 1 3 2 |
小调蓝调音阶 | 3 2 1 1 3 |
程序加载音阶模板数据的实现代码如下:
步骤(4)中计算当前的标准分的方法为:
其中,T为当前的标准分,Q[j]为权值序列,根据单音序列中每个单音的时值设定,Hmax为两个单音的最大和协度值,TA为标准分调整值,p为设定的协和度阈值,以百分比表示,p值越高,生成的和弦协和度越高,复杂度越低;p值越低,生成的和弦协和度越低,复杂度越高。
标准分计算的实现代码如下:
本实施例中两个单音之间最大协和度评分Hmax为7。
本实施例的和弦生成方法,计算当前的标准分时采用标准分调整值TA,目的在于当交叉变异后仍未找到符合协和度要求的和弦时,再次交叉变异时进一步减小当前标准分,即增大当前标准分减小的幅度,以便尽快找到符合协和度要求的和弦。
本实施例中,TA为与遗传算法中的进化代数G相关的一个值,标准分调整值TA随进化代数G的增大而增大:
其中,TA为标准分调整值,G为遗传算法中的进化代数。
本实施例的和弦生成方法,计算当前的标准分时通过协和度阈值p改变生成的和弦协和度与复杂度,使得生成的伴奏和弦更加丰富多彩,帮助专业音乐人获取全新的音乐灵感;也可用于娱乐,使没有音乐知识的普通大众也能体会到音乐创作带来的快乐。用户也可以根据自己的喜好和用途设置合适的协和度阈值。
步骤(6)中采用遗传算法进行和弦变换的方法包括以下步骤:
(6.1)在当前和弦群中选择用于交叉的和弦;
(6.2)对用于交叉的和弦,进行两两交叉;
(6.3)对两两交叉后的和弦按变异百分比进行变异。
本实施例的和弦生成方法,利用遗传算法,在当前和弦群中选择部分和弦,进行交叉,将部分交叉生成的和弦进行变异,交叉与变异产生的和弦构成当前和弦群,在更新后的当前和弦群中寻找与单音序列协和的和弦。如果找到符合协和度要求的和弦,则该和弦即为单音序列相应的和弦;如果仍未找到,则进行下一代进化,即重新在当前和弦群中选择部分和弦进行交叉、变异。
步骤(6.1)中在当前和弦群中选择和弦的方法为:在当前和弦群中,按交叉百分比选择和弦。
从当前和弦群体中选择一定百分比的和弦进行交叉,该百分比称为为交叉百分比。
选择进行交叉的和弦的实现代码如下:
其中,CrossoverRate为交叉百分比,交叉百分比大于或等于20%且小于或等于95%。
本实施例中,交叉百分比为50%。
本实施例中,单音序列以小节(Phrase)对象表示,包含如下属性:
1)音符向量:由音符对象组成的向量,用于存储一个小节中的音符;
2)节拍:由两个整数G1、G2表示,表示该小节是一个G1/G2拍小节;
3)调性音高:由整型数1~12表示,为当前小节所用调式的一级音的音高,取值范围为12个音高值(C,C#,D,D#,E,F,F#,G,G#,A,A#,B)中的一个;
4)音符时值统计表:一个整型数对整型数映射表map<int1,int2>,其中int1由整型数1~12表示,代表一个小节中的12个半音(C,#C,D,D#,E,F,F#,G,G#,A,A#,B),int2则为int1音时值的累加和。
小节(Phrase)对象包括以下方法:
步骤(6.1)在当前和弦群中每个和弦被选择的概率为:和弦的协和度评分与当前和弦群体中所有和弦的协和度评分的总和的比值。
步骤(6.2)对用于交叉的和弦,进行两两交叉;单次两两交叉由选择出的和弦中的两个参与,生成一个新的和弦。为方便表述,把参与单次两两交叉中的两个和弦称为父和弦和母和弦,本实施例中,和弦交叉包括:
(6.2.1)创建1个随机数R,R∈[0,1]且符合均匀分布;
(6.2.2)生成子代和弦:
若R<=0.5,则生成的子代和弦的n个单音构成为:
若R〉0.5,则生成的子代和弦的n个单音构成为:
父[0] |
母[1] |
母[2] |
… |
母[n-1] |
母[n] |
其中父[i]和母[i]表示父和弦或者母和弦中的第i个单音,i为正整数也可以采用其他方式,生成子代和弦。
用于两个被选中的和弦之间交叉生成一个新的和弦,实现代码如下:
其中,CNDuration为当前小节的总时值,FULL_LENGTH为一个全音的时值,groove1为当前小节的拍数,groove2为当前小节一拍为几分音符,比如4/4拍的小节中groove1=4,groove2=4;而在一个9/8拍的小节中,groove1=9,groove2=8。bon为和弦的中单音的个数。
步骤(6.3)对两两交叉后的和弦按变异百分比进行变异的方法包括以下步骤:
(6.3.1)在两两交叉后的和弦中按变异百分比选择的和弦;
(6.3.2)将选中的每一个和弦中的随机选择一个单音,并将单音的音高值改变为一个随机值。
步骤(6.3.1)在两两交叉后的和弦中按变异百分比选择的和弦进行变异的代码实现如下:
其中,CrossoverRate为交叉百分比,MutateRate为变异百分比,变异百分比小于或等于50%。
变异是对交叉产生的子代和弦进行修改,即交叉后的和弦按一定百分比进行变异,该百分比称为变异百分比,变异百分比可以为0%-50%之间的任意值。
步骤(6.3.2)将选中的每一个和弦中的随机选择一个单音,并将该单音的音高值改变为一个随机值,实现代码如下:
MutateRate=0.05;
int isMutate=random(0,1000);
if(isMutate<1000*MutateRate)
{
ChordMutate(ChordGroup[j]);
}
其中,MutateRate为变异百分比,本实施例中为5%。
void ChordMutate(Phrase&Chord)
{
//随机选择一个修改点
size_t i=random(0,Chord.size()-1);
//修改某个单音
Chord.notes[i].tune=randomTune();
}
如图2所示,本发明的一个实施例的和弦伴奏生成方法,包括以下步骤:
(1)输入一段旋律,将旋律分解为若干单音序列;
(2)对每一单音序列,按照图1所示的和弦生成方法,生成相应的和弦;
(3)所有单音序列相应的和弦依次组成旋律的和弦;
(4)同时输出旋律与旋律的和弦。
本实施例中,输入一段旋律采用音频输入、midi输入或者编码数据流输入。
本发明提供的和弦伴奏生成方法,采用多种方式输入,适合不同的应用场合。
当采用数据流输入时直接输入若干单音序列。
本实施例中,单音序列为小节。
当采用音频输入时,获取一段人声哼唱的音频,将人声哼唱的音频转化为标准midi文件,而后读取该midi文件,利用MIR技术,将人声哼唱的音频划分为若干小节。
当采用midi输入时,将旋律分解为若干单音序列,本实施例中分解为若干小节;读取一个单轨midi文件,利用pymidi库或midi库,将文件中的midi信息划分为若干小节;或截取正在输入的midi信息流,解码输入的midi文件或实时midi流,划分为若干小节。
步骤(3)同时输出旋律与旋律相应的和弦采用音频输出或midi输出。
本实施例的和弦伴奏自动生成方法,同时输出旋律与旋律相应的和弦,可以采用音频输出或midi输出。
采用多种方式输出,能够适合不同的应用场合。当采用midi输出时,midi文件或实时midi流包含两条音轨,一条输出旋律;另一条输出旋律相应的和弦。
本发明提供的和弦生成方法与和弦伴奏生成方法,针对单音序列采用遗传算法生成相应的和弦,避免了针对单音生成和弦造成的缺乏全局性问题,利用最基本的、普适的音程协和度原理和音阶来构建评分系统,找到与输入旋律协和的和弦,使得生成的和弦更具全局性,与原旋律相协和;当现有的和弦不能满足要求时,利用遗传算法进行和弦变换,进化出新的和弦,找到与输入旋律协和的和弦,使得计算机作曲跳出了“可预测的固定组合”的限制,令生成的伴奏和弦更丰富多彩;通过音阶模板,进一步保证生成的伴奏和弦要求与原旋律相协和,使生成的伴奏和弦具有良好的音乐风格适应性。通过协和度阈值改变生成的和弦协和度与复杂度,使得生成的伴奏和弦更加丰富多彩,帮助专业音乐人获取全新的音乐灵感;也可用于娱乐,使没有音乐知识的普通大众也能体会到音乐创作带来的快乐。用户也可以根据自己的喜好和用途设置合适的协和度阈值。
以上详细描述了本发明的较佳具体实施例。应当理解,本领域的普通技术人员无需创造性劳动就可以根据本发明的构思做出诸多修改和变化。因此,凡本技术领域中技术人员依本发明的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (8)
1.一种和弦生成方法,其特征在于,所述方法包括以下步骤:
(1)输入单音序列;
(2)采用遗传算法生成所述单音序列的和弦,包括以下步骤:
(21)计算所述单音序列与当前和弦群中的每一个和弦的协和度评分;
(22)根据所述协和度评分,对当前和弦群中的和弦进行排序;
(23)计算当前的标准分,方法为:
其中,T为当前的标准分,Q[j]为权值序列,根据所述单音序列中每个单音的时值设定,Hmax为两个单音的最大和协度值;TA为标准分调整值,p为设定的协和度阈值,以百分比表示,p值越高,生成的和弦协和度越高,复杂度越低;p值越低,生成的和弦协和度越低,复杂度越高;
(24)排在第一位的和弦的协和度评分是否大于标准分,如果大于或等于标准分,排在第一位的和弦为所述单音序列的和弦;如果小于标准分,采用遗传算法进行和弦变换,变换后的和弦构成当前和弦群。
2.如权利要求1所述的和弦生成方法,其特征在于,步骤(21)中计算所述单音序列与当前和弦群中的每一个和弦的协和度评分的方法为:
其中,score为所述单音序列与当前和弦群中的一个和弦的协和度评分,Vn[j]为所述单音序列,m为所述单音序列的单音个数;setC[i]为当前和弦的单音集合,n为当前和弦中的单音个数;Q[j]为权值序列,根据所述单音序列中每个单音的时值设定;getHarmonicLevel()是计算两个单音之间的协和度评分的函数,所述两个单音中一个为所述单音序列中的单音,另一个为当前和弦中的单音。
3.如权利要求2所述的和弦生成方法,其特征在于,计算两个单音之间的协和度评分时,包括以下步骤:
(211)根据所述单音序列,获得音阶模板;
(212)如果当前和弦中的单音不属于所述音阶模板,减小协和度评分。
4.如权利要求1所述的和弦生成方法,其特征在于,步骤(24)中采用遗传算法进行和弦变换的方法包括以下步骤:
(241)在当前和弦群中选择用于交叉的和弦;
(242)对所述用于交叉的和弦,进行两两交叉;
(243)对两两交叉后的和弦按变异百分比进行变异。
5.如权利要求4所述的和弦生成方法,其特征在于,步骤(241)中在当前和弦群中选择和弦的方法为:在当前和弦群中,按交叉百分比选择和弦。
6.如权利要求5所述的和弦生成方法,其特征在于,所述交叉百分比大于或等于20%且小于或等于95%。
7.如权利要求4所述的和弦生成方法,其特征在于,步骤(241)在所述当前和弦群中每个和弦被选择的概率为:所述和弦的协和度评分与当前和弦群体中所有和弦的协和度评分的总和的比值。
8.如权利要求4所述的和弦生成方法,其特征在于,所述变异百分比小于或等于50%。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410582178.1A CN104464702B (zh) | 2014-10-27 | 2014-10-27 | 基于遗传算法的和弦伴奏生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410582178.1A CN104464702B (zh) | 2014-10-27 | 2014-10-27 | 基于遗传算法的和弦伴奏生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104464702A CN104464702A (zh) | 2015-03-25 |
CN104464702B true CN104464702B (zh) | 2017-07-21 |
Family
ID=52910658
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410582178.1A Active CN104464702B (zh) | 2014-10-27 | 2014-10-27 | 基于遗传算法的和弦伴奏生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104464702B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111223471A (zh) * | 2018-11-26 | 2020-06-02 | 珠海格力电器股份有限公司 | 铃声生成方法、装置、存储介质和处理器 |
CN109903744B (zh) * | 2019-01-28 | 2022-03-11 | 平安科技(深圳)有限公司 | 旋律生成方法、装置、计算机可读存储介质和计算机设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101165779A (zh) * | 2006-10-20 | 2008-04-23 | 索尼株式会社 | 信息处理装置和方法、程序及记录介质 |
JP4665123B2 (ja) * | 2004-10-07 | 2011-04-06 | 独立行政法人産業技術総合研究所 | 音階作成方法、音階作成プログラム、該プログラムを記録したコンピュータ読取可能な記録媒体及び音階作成装置、並びに演奏装置及び照明装置 |
CN102063292A (zh) * | 2009-11-18 | 2011-05-18 | 华为技术有限公司 | 一种和声编制方法及装置 |
-
2014
- 2014-10-27 CN CN201410582178.1A patent/CN104464702B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4665123B2 (ja) * | 2004-10-07 | 2011-04-06 | 独立行政法人産業技術総合研究所 | 音階作成方法、音階作成プログラム、該プログラムを記録したコンピュータ読取可能な記録媒体及び音階作成装置、並びに演奏装置及び照明装置 |
CN101165779A (zh) * | 2006-10-20 | 2008-04-23 | 索尼株式会社 | 信息处理装置和方法、程序及记录介质 |
CN102063292A (zh) * | 2009-11-18 | 2011-05-18 | 华为技术有限公司 | 一种和声编制方法及装置 |
Non-Patent Citations (3)
Title |
---|
A Genetic Algorithm for Generating Improvised Music;Ender Ozcan etc;《Artificial Evolution,8th International Conference,EA2007》;20071031;第266-277页 * |
一种基于遗传算法的自动生成创意曲动机的方法;杜鹏 等;《计算机技术与发展》;20070430;第17卷(第4期);第150-153页 * |
遗传算法在计算机辅助乐曲创作中的研究与应用;崔嘉;《中国优秀硕士学位论文全文数据库 信息科技辑》;20071115(第05期);第4-52页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104464702A (zh) | 2015-03-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Liu et al. | Computational intelligence in music composition: A survey | |
CN101800046B (zh) | 一种根据音符生成midi音乐的方法和装置 | |
Chen et al. | Creating melodies with evolving recurrent neural networks | |
US7834260B2 (en) | Computer analysis and manipulation of musical structure, methods of production and uses thereof | |
Biles | GenJam: Evolution of a jazz improviser | |
Eigenfeldt et al. | Considering Vertical and Horizontal Context in Corpus-based Generative Electronic Dance Music. | |
Liu et al. | Polyphonic accompaniment using genetic algorithm with music theory | |
Alfonseca et al. | A simple genetic algorithm for music generation by means of algorithmic information theory | |
CN104464702B (zh) | 基于遗传算法的和弦伴奏生成方法 | |
Biles | Improvizing with genetic algorithms: GenJam | |
Lo | Evolving cellular automata for music composition with trainable fitness functions | |
Wu et al. | A novel genetic algorithm considering measures and phrases for generating melody | |
Kunimatsu et al. | A music composition model with genetic programming-a case study of chord progression and bassline | |
CN102063292B (zh) | 一种和声编制方法及装置 | |
Oliwa | Genetic algorithms and the abc music notation language for rock music composition | |
Vargas et al. | Artificial musical pattern generation with genetic algorithms | |
Scirea et al. | Evolving four part harmony using a multiple worlds model | |
Davis | Teaching Rhythm and Meter with the Moto Perpetuo Movements from Bach's Unaccompanied Instrumental Works | |
Bäckman et al. | A generative representation for the evolution of jazz solos | |
Book | Generating retro video game music using deep learning techniques | |
Gentili et al. | Music: numbers in motion | |
Murray et al. | Algorithmically flexible style composition through multi-objective fitness functions | |
Nichols | Lyric-based rhythm suggestion | |
Shvets et al. | Modelling Arvo Part’s Music with OpenMusic | |
Boren | Modeled Individuality: The Influence of Elliot Carter’s Piano Sonata (1946) in Carl Vine’s Piano Sonata (1990) |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant |