发明内容
有鉴于此,本申请提出了一种基于神经网络的旋律生成方法及装置,提高生成旋律的真实性。
根据本申请实施例的第一方面,提供一种基于神经网络的旋律生成方法,包括:
获取初始音符序列、预设时长和所述预设时长的初始特征,所述初始音符序列中时长最小的音符的时长小于所述预设时长;
根据所述预设时长、所述初始特征和时长神经网络模型,计算各预设时长的时长特征;
根据计算出的各预设时长的时长特征、所述初始音符序列和音符神经网络模型,计算音符,并根据计算出的音符获取旋律。
在一种可能的实现方式中,根据所述预设时长、所述初始特征和时长神经网络模型,计算各预设时长的时长特征,包括:
根据所述预设时长、所述初始特征、时长神经网络模型中的初始时长网络状态,计算第一个预设时长的时长特征,所述初始时长网络状态包括时长网络状态的初始值,所述时长网络状态包括时长神经网络模型中的运算的网络状态;
按照时间的先后顺序,根据计算出的前一个预设时长的时长特征、时长神经网络模型中的前一个预设时长的时长网络状态,依次计算当前预设时长的时长特征,并根据计算出的当前预设时长的时长特征,更新时长神经网络模型中当前预设时长的时长网络状态。
在一种可能的实现方式中,根据计算出的各预设时长的时长特征、所述初始音符序列和音符神经网络模型,计算音符,包括:
根据计算出的第一个预设时长的时长特征、初始音符序列、所述音符神经网络模型中的初始音符网络状态,计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态;
根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的预设时长的时长特征,计算当前音符,并根据计算出的当前音符,更新音符神经网络模型中当前音符的音符网络状态。
在一种可能的实现方式中,所述预设时长,包括:
第一预设时长和第二预设时长,所述第一预设时长大于所述第二预设时长;
所述预设时长的初始特征,包括:
所述第一预设时长的第一初始特征,以及所述第二预设时长的第二初始特征;
根据所述预设时长、所述初始特征和时长神经网络模型,计算各预设时长的时长特征,包括:
根据所述第一初始特征和第一时长神经网络模型,计算各第一预设时长的第一时长特征;
根据所述第二初始特征、各所述第二预设时长所在的第一预设时长的第一时长特征和第二时长神经网络模型,计算各第二预设时长的第二时长特征;
根据计算出的各预设时长的时长特征、所述初始音符序列和音符神经网络模型,计算音符,包括:
根据计算出的各第一时长特征,计算出的各第二时长特征、所述初始音符序列和音符神经网络模型,计算音符。
在一种可能的实现方式中,根据所述第一初始特征和第一时长神经网络模型,计算各第一预设时长的第一时长特征,包括:
根据所述第一初始特征,所述第一时长神经网络模型中的第一初始时长网络状态,计算第一个第一预设时长的第一时长特征,所述第一初始时长网络状态包括第一时长网络状态的初始值,所述第一时长网络状态包括第一时长神经网络模型中的运算的网络状态;
按照时间的先后顺序,根据计算出的前一个第一预设时长的第一时长特征、第一时长神经网络模型中的前一个第一预设时长的第一时长网络状态,依次计算当前第一预设时长的第一时长特征,并根据计算出的当前第一预设时长的第一时长特征,更新第一时长神经网络模型中当前第一预设时长的第一时长网络状态。
在一种可能的实现方式中,根据所述第二初始特征、各所述第二预设时长所在的第一预设时长的第一时长特征和第二时长神经网络模型,计算各第二预设时长的第二时长特征,包括:
根据所述第二初始特征、第二时长神经网络模型中的初始第二时长网络状态、第一个第一预设时长的第一时长特征、计算第一个第二预设时长的第二时长特征,所述初始第二时长网络状态包括第二时长网络状态的初始值,所述第二时长网络状态包括第二时长神经网络模型中的运算的网络状态;
按照时间的先后顺序,根据计算出的前一个第二预设时长的第二时长特征、第二时长神经网络模型中的前一个第二预设时长的第二时长网络状态,当前第二预设时长所在的第一预设时长的第一时长特征,计算各第二预设时长的第二时长特征。
在一种可能的实现方式中,根据计算出的各第一时长特征,计算出的各第二时长特征、所述初始音符序列和音符神经网络模型,计算音符,包括:
根据初始音符序列、音符神经网络模型中的初始音符网络状态、计算出的第一个第一预设时长的第一时长特征、计算出的第一个第二预设时长的第二时长特征、计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态;
根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的第一预设时长的第一时长特征、当前音符所在的第二预设时长的第二时长特征,计算当前音符。
在一种可能的实现方式中,所述时长神经网络模型,包括:
按照所述预设时长划分数字化的样本旋律,得到各预设时长的分段旋律;
将所述各预设时长的分段旋律按照预设的节奏特征进行聚类分析,并将聚类分析结果中的类中心作为各预设时长的时长特征;
根据各所述预设时长的时长特征获取各所述样本旋律的时长特征序列;
按照时间的先后顺序,利用初始时长特征神经网络模型,依次根据样本旋律的时长特征序列中当前时长特征之前的时长特征,计算当前时长特征,得到当前时长特征的预测结果;
计算所述当前时长特征的预测结果和所述样本旋律中的当前时长特征之间的差值,并根据所述差值更新所述初始时长特征神经网络模型中的参数;
当所述初始时长特征神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到时长神经网络模型。
在一种可能的实现方式中,所述数字化的样本旋律,包括:
延续前音序列、停止前音序列、音高序列;
所述预设的节奏特征,包括:
各所述预设时长的分段旋律中的延续前音序列。
在一种可能的实现方式中,所述音符神经网络模型,包括:
获取数字化的样本旋律中的音高序列;
按照时间的先后顺序,利用初始音符序列神经网络模型,依次根据所述音高序列中当前音符之前的音符计算当前音符,得到当前音符的预测结果;
计算所述当前音符的预测结果和所述音高序列中的当前音符之间的差值,并根据所述差值调整所述初始音符序列神经网络模型中的参数;
当所述初始音符序列神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到音符神经网络模型。
根据本申请实施例的第二方面,提供一种基于神经网络的旋律生成装置,包括:
初始值获取模块,用于获取初始音符序列、预设时长和所述预设时长的初始特征,所述初始音符序列中时长最小的音符的时长小于所述预设时长;
时长特征运算模块,用于根据所述预设时长、所述初始特征和时长神经网络模型,计算各预设时长的时长特征;
音符运算模块,用于根据计算出的各预设时长的时长特征、所述初始音符序列和音符神经网络模型,计算音符,并根据计算出的音符获取旋律。
在一种可能的实现方式中,所述时长特征运算模块,包括:
初始时长运算单元,用于根据所述初始特征、时长神经网络模型中的初始时长网络状态,计算第一个预设时长的时长特征,所述初始时长网络状态包括时长网络状态的初始值,所述时长网络状态包括时长神经网络模型中的运算的网络状态;
时长特征运算单元,用于按照时间的先后顺序,根据计算出的前一个预设时长的时长特征、时长神经网络模型中的前一个预设时长的时长网络状态,依次计算当前预设时长的时长特征,并根据计算出的当前预设时长的时长特征,更新时长神经网络模型中当前预设时长的时长网络状态。
在一种可能的实现方式中,所述音符运算模块,包括:
第一初始音符序列运算单元,用于根据计算出的第一个预设时长的时长特征、初始音符序列、所述音符神经网络模型中的初始音符网络状态,计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态;
第一音符运算单元,用于根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的预设时长的时长特征,计算当前音符,并根据计算出的当前音符,更新音符神经网络模型中当前音符的音符网络状态。
在一种可能的实现方式中,所述预设时长,包括:
第一预设时长和第二预设时长,所述第一预设时长大于所述第二预设时长;
所述预设时长的初始特征,包括:
所述第一预设时长的第一初始特征,以及所述第二预设时长的第二初始特征;
所述时长特征运算模块,包括:
第一时长特征运算单元,用于根据所述第一初始特征和第一时长神经网络模型,计算各第一预设时长的第一时长特征;
第二时长特征运算单元,用于根据所述第二初始特征、各所述第二预设时长所在的第一预设时长的第一时长特征和第二时长神经网络模型,计算各第二预设时长的第二时长特征;
所述音符运算模块,还用于:
根据计算出的各第一时长特征,计算出的各第二时长特征、所述初始音符序列和音符神经网络模型,计算音符。
在一种可能的实现方式中,所述第一时长特征运算单元,包括:
第一初始特征运算子单元,用于根据所述第一初始特征,所述第一时长神经网络模型中的第一初始时长网络状态,计算第一个第一预设时长的第一时长特征,所述第一初始时长网络状态包括第一时长网络状态的初始值,所述第一时长网络状态包括第一时长神经网络模型中的运算的网络状态;
第一特征运算子单元,用于按照时间的先后顺序,根据计算出的前一个第一预设时长的第一时长特征、第一时长神经网络模型中的前一个第一预设时长的第一时长网络状态,依次计算当前第一预设时长的第一时长特征,并根据计算出的当前第一预设时长的第一时长特征,更新第一时长神经网络模型中当前第一预设时长的第一时长网络状态。
在一种可能的实现方式中,所述第二时长特征运算单元,包括:
第二初始特征运算子单元,用于根据所述第二初始特征、第二时长神经网络模型中的初始第二时长网络状态、第一个第一预设时长的第一时长特征、计算第一个第二预设时长的第二时长特征,所述初始第二时长网络状态包括第二时长网络状态的初始值,所述第二时长网络状态包括第二时长神经网络模型中的运算的网络状态;
第二特征运算子单元,用于按照时间的先后顺序,根据计算出的前一个第二预设时长的第二时长特征、第二时长神经网络模型中的前一个第二预设时长的第二时长网络状态,当前第二预设时长所在的第一预设时长的第一时长特征,计算各第二预设时长的第二时长特征。
在一种可能的实现方式中,所述音符运算模块,包括:
第二初始音符序列运算单元,用于根据初始音符序列、音符神经网络模型中的初始音符网络状态、计算出的第一个第一预设时长的第一时长特征、计算出的第一个第二预设时长的第二时长特征、计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态;
第二音符运算单元,用于根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的第一预设时长的第一时长特征、当前音符所在的第二预设时长的第二时长特征,计算当前音符。
在一种可能的实现方式中,所述时长神经网络模型,包括:
分段模块,用于按照所述预设时长划分数字化的样本旋律,得到各预设时长的分段旋律;
聚类模块,用于将所述各预设时长的分段旋律按照预设的节奏特征进行聚类分析,并将聚类分析结果中的类中心作为各预设时长的时长特征;
时长特征序列获取模块,用于根据各所述预设时长的时长特征获取各所述样本旋律的时长特征序列;
预测结果获取模块,用于按照时间的先后顺序,利用初始时长特征神经网络模型,依次根据样本旋律的时长特征序列中当前时长特征之前的时长特征,计算当前时长特征,得到当前时长特征的预测结果;
参数更新模块,用于计算所述当前时长特征的预测结果和所述样本旋律中的当前时长特征之间的差值,并根据所述差值更新所述初始时长特征神经网络模型中的参数;
时长神经网络模型获取模块,用于当所述初始时长特征神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到时长神经网络模型。
在一种可能的实现方式中,所述数字化的样本旋律,包括:
延续前音序列、停止前音序列、音高序列;
所述预设的节奏特征,包括:
各所述预设时长的分段旋律中的延续前音序列。
在一种可能的实现方式中,所述音符神经网络模型,包括:
音高序列获取模块,用于获取数字化的样本旋律中的音高序列;
当前音符预测模块,用于按照时间的先后顺序,利用初始音符序列神经网络模型,依次根据所述音高序列中当前音符之前的音符计算当前音符,得到当前音符的预测结果;
网络参数调整模块,用于计算所述当前音符的预测结果和所述音高序列中的当前音符之间的差值,并根据所述差值调整所述初始音符序列神经网络模型中的参数;
音符神经网络确定模块,用于当所述初始音符序列神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到音符神经网络模型。
根据本申请实施例的第三方面,提供一种基于神经网络的旋律生成装置,包括:
处理器;
用于存储处理器可执行指令的存储器;
其中,所述处理器被配置为:执行本申请权利要求中任意一项所述方法的步骤。
根据本申请实施例的第四方面,提供一种非易失性计算机可读存储介质,其上存储有计算机程序指令,所述计算机程序指令被处理器执行时实现本申请权利要求中任一项所述的方法。
本申请中,通过提取旋律的不同时间尺度的特征,考虑了旋律在不同的时长的结构特征,即考虑了旋律的长程结构,在生成旋律时,通过利用训练完成的各类神经网络模型的协作,生成具有良好长程结构的旋律片段,提高了生成旋律的真实性,能够保证听觉上的效果。
根据下面参考附图对示例性实施例的详细说明,本申请的其它特征及方面将变得清楚。
具体实施方式
以下将参考附图详细说明本申请的各种示例性实施例、特征和方面。附图中相同的附图标记表示功能相同或相似的元件。尽管在附图中示出了实施例的各种方面,但是除非特别指出,不必按比例绘制附图。
在这里专用的词“示例性”意为“用作例子、实施例或说明性”。这里作为“示例性”所说明的任何实施例不必解释为优于或好于其它实施例。
另外,为了更好的说明本申请,在下文的具体实施方式中给出了众多的具体细节。本领域技术人员应当理解,没有某些具体细节,本申请同样可以实施。在一些实例中,对于本领域技术人员熟知的方法、手段、元件和电路未作详细描述,以便于凸显本申请的主旨。
首先对一段旋律是如何数字化表示的进行介绍。附图1展示了一些音乐的基本概念和定义,图1给出一段旋律,以最常见的4/4拍旋律为例,一个小节包含4拍,每拍长度是一个四分音符的长度。对组成旋律的一个个音符而言,需要同时表示它的音高和时长。由于绝大多数(大于99%)的音符的音高位于48~84的区间中,如果仅截取此区间范围内的音高表示,可以使用一个长度为36的零一向量来表示在某一时刻弹奏的音符的音高:将音高对应的向量位置置为1,其它位置置为0。对于时长,首先对于时长进行量化处理,具体的,将一拍的时间量化为4个时间片,在每一时间片,可以上述一个长度为36的向量来表示当前时间片所弹奏的音符的音高。然后,为了模拟音符的停止和延续,可以将表示音高的长度为36的向量增加2位,1位为延续前音,另1位为停止前音,延续前音为0时代表结束前一时间片的音符,延续前音为1时代表此时间片将会延续前一时间片所弹奏的音符。利用这种对时间切片量化,用长度为38的向量来表示每个时间片弹奏音符的方法,可以以数字方式表示出一段旋律,也就是说,旋律可以通过数字化表达矩阵来表示。如附图2所示,对一段一小节的旋律,可以使用一个38×16的矩阵来表示它。
以上仅为示例,本公开对旋律的数字化表达方式不做限制。
从音符到乐句,一段旋律通常拥有多个时间尺度上的特征,通常,旋律是一系列音符沿时间分布的集合。每个音符均包涵音高和时长两个要素。音高决定了这个音符的频率高低,时长则决定了这个音符将被弹奏多久。拍是旋律的一个基本时间单元,通常包涵一个或几个音符。小节则是更高等级(更长时间尺度)的一个时间单元,往往在一个旋律片段中一小节包含固定数量的拍。一个乐句通常包括两个或者四个小节,一般被认为是具有完整乐感的最小音乐单元。几个乐句组成一个乐段(或乐句组),通常组成一个乐段的乐句之间往往有相互呼应的关系,如附图1中前后两个乐句之间就存在着显著的相似性,特别是在旋律的节奏上。这种高层次(更长时间尺度上)的前后关系可以认为是旋律的一种长程结构。在传统的旋律生成方法中,仅在音符的尺度上产生旋律,没有考虑旋律在更加长程上的特点,导致生成的旋律真实性低。
图3是根据一示例性实施例示出的一种基于神经网络的旋律生成方法的流程图,如图3所示,该方法包括:
步骤S100,获取初始音符序列、预设时长和所述预设时长的初始特征,所述初始音符序列中时长最小的音符的时长小于所述预设时长。
在一种可能的实现方式中,所述初始音符序列可以是一个小节、一个乐句等不同长程的初始音符序列,也可以只包括一个初始音符;所述初始音符序列可以是随机给出的音符序列,可以是包含了调号、拍号等各种基础信息的音符序列,也可以是已经具有一定的节奏特征的音符序列。
所述初始音符序列中时长最小的音符的时长小于所述预设时长,如所述初始音符序列中时长最小的音符为四分音符,四分音符的时长为全音符的四分之一,则所述预设时长大于全音符的四分之一即可,例如将所述预设时长设置为一个全音符,N个小节或一个完整的乐句。可以理解的是,为使生成的旋律更具有真实性,所述预设时长可以预设为初始音符序列中时长最小的音符的时长的倍数。
所述初始特征根据所述预设时长的不同而不同,如预设时长为一小节,则所述预设时长的初始特征为初始小节特征。所述初始特征可以是随机给出的、也可以是根据经验值给出的。
步骤S200,根据所述预设时长、所述初始特征和时长神经网络模型,计算各预设时长的时长特征。
在一种可能的实现方式中,所述时长神经网络模型包括训练好的神经网络,包括层次化的RNN模型、LSTM模型等。在所述时长神经网络模型的训练过程中,利用大量的旋律样本基于预设时长进行聚类分析后,给出各预设时长的时长特征,所述时长特征包括预设时长内的每个音符之间的延续关系,包括预设时长内的当前音符是否延续了前音、当前音符是否会持续到下一个音符、每个音符的持续时长、预设时长内的各音符的音高聚类特征等不同的特征。所述时长特征可以是一个序列,也可以是一个值。例如预设时长为一小节,将一万首旋律样本输入初始的时长神经网络模型进行训练后,训练好的时长神经网络模型可以给出第一个小节的时长特征序列1,第二个小节的时长特征序列2,以此类推直至给出最后一个小节的时长特征序列N。
可以理解的是,所述时长神经网络模型在训练过程中输入样本的不同,训练好的时长神经网络模型计算出的各预设时长的时长特征也不同,如训练过程中输入的旋律为爵士乐,则训练好的时长神经网络模型给出的时长特征为爵士乐的时长特征,如训练过程中输入的旋律为京剧,则训练好的时长神经网络模型给出的时长特征为京剧的时长特征。例如以一小节作为预设时长,给出一个相同的音符序列,输入利用爵士乐样本训练的时长神经网络模型后,计算出的各小节的时长特征为爵士乐的时长特征,而输入利用京剧样本训练的时长神经网络模型后,计算出的各小节的时长特征为京剧的时长特征。所述时长神经网络模型的训练样本,直接影响到旋律生成的结果。
步骤S300,根据计算出的各预设时长的时长特征、所述初始音符序列和音符神经网络模型,计算音符,并根据计算出的音符获取旋律。
在一种可能的实现方式中,所述音符神经网络模型包括训练好的神经网络,包括层次化的RNN模型、LSTM模型等,与所述时长神经网络模型是相互独立的神经网络模型。所述音符神经网络模型的训练样本,与所述时长神经网络模型输入的样本相同,且所述时长神经网络模型输出的各预设时长的时长特征,也作为音符神经网络模型的输入信息对音符神经网络模型进行训练。根据输入的样本旋律和与之对应的各时长特征,音符神经网络模型预测各样本旋律中的音符,并根据音符的预测结果不断调整自身的参数设置,直至预测音符的成功率满足预设的条件,完成音符神经网络模型的训练。
根据所述时长神经网络模型计算出的各预设时长的时长特征,给出的初始音符序列,利用训练好的音符神经网络模型,可以依次计算出音符,并根据计算出的音符获取旋律。旋律中的音符序列即符合时长神经网络模型给出的时长特征,也符合音符神经网络中的音符预测条件,使得旋律在比音符更长的长程上具有时长神经网络模型和音符神经网络模型给定的特征。
本实施例中,通过提取旋律的不同时间尺度的特征,考虑了旋律在不同的时长的结构特征,即考虑了旋律的长程结构,在生成旋律时,通过利用训练完成的各类神经网络模型的协作,生成具有良好长程结构的旋律片段,提高了生成旋律的真实性,能够保证听觉上的效果。
图4是根据一示例性实施例示出的一种基于神经网络的旋律生成方法的流程图,在上述实施例的基础上,如图4所示,步骤S200包括:
步骤S210,根据所述预设时长、所述初始特征、时长神经网络模型中的初始时长网络状态,计算第一个预设时长的时长特征,所述初始时长网络状态包括时长网络状态的初始值,所述时长网络状态包括时长神经网络模型中的运算的网络状态。
在一种可能的实现方式中,所述时长神经网络模型使用层次化的LSTM网络结构,在所述LSTM网络结构中,对于各预设时长,都有对应的网络状态,所述网络状态,包括反馈神经网络中的由特征向量表示的中间计算结果,由于反馈神经网络的每次运算,当前时刻的中间计算结果由当前输入和上一时刻的中间计算结果共同决定,所以当前时刻的网络状态包括之前所有历史输入,且当前预设时长的网络状态,与当前预设时长之前的所有预设时长的网络状态相关。第一个预设时长的时长特征,需要根据所述预设时长、所述初始特征、和时长神经网络模型中的初始时长网络状态进行计算。
步骤S220,按照时间的先后顺序,根据计算出的前一个预设时长的时长特征、时长神经网络模型中的前一个预设时长的时长网络状态,依次计算当前预设时长的时长特征,并根据计算出的当前预设时长的时长特征,更新时长神经网络模型中当前预设时长的时长网络状态。
在一种可能的实现方式中,当第一个预设时长的时长特征计算得出后,按照时间的先后顺序,依次计算后续各预设时长的时长特征,根据时长神经网络模型中的时长网络状态的特性可知,当前预设时长的时长特征与之前的所有预设时长的时长特征均具有关联性。
在本实施例中,根据时长神经网络模型中的时长网络状态计算各预设时长的时长特征,且前一个预设时长的时长特征对应的时长网络状态会代入当前预设时长的时长特征的计算,时长特征的前后关联性,使得旋律的长程特征的提取更加的复合旋律的实际特性,从而使得最终生成的旋律更具有真实性。
图5是根据一示例性实施例示出的一种基于神经网络的旋律生成方法的流程图,在上述实施例的基础上,如图5所示,步骤S300包括:
步骤S310,根据计算出的第一个预设时长的时长特征、初始音符序列、所述音符神经网络模型中的初始音符网络状态,计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态。
在一种可能的实现方式中,所述音符神经网络模型使用层次化的LSTM网络结构,在所述LSTM网络结构中,对于各音符,都有对应的网络状态,且当前音符的网络状态,与当前音符之前的所有音符的网络状态相关。第一个音符,需要根据计算出的第一个预设时长的时长特征、初始音符序列、所述音符神经网络模型中的初始音符网络状态进行计算。
步骤S320,根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的预设时长的时长特征,计算当前音符,并根据计算出的当前音符,更新音符神经网络模型中当前音符的音符网络状态。
在一种可能的实现方式中,当第一个音符计算得出后,按照时间的先后顺序,依次计算后续各音符,根据音符神经网络模型中的音符网络状态的特性可知,当前音符与之前的所有音符均具有关联性。
在本实施例中,根据音符神经网络模型中的音符网络状态计算各音符,且前一个音符对应的音符网络状态会代入当前音符的计算,音符的前后关联性,使得旋律的生成音符更加的复合旋律的实际特性,从而使得最终生成的旋律更具有真实性。
图6是根据一示例性实施例示出的一种基于神经网络的旋律生成方法的流程图,如图6所示:
步骤S100A,获取初始音符序列、预设时长和所述预设时长的初始特征,所述初始音符序列中时长最小的音符的时长小于所述预设时长;所述预设时长,包括:第一预设时长和第二预设时长,所述第一预设时长大于所述第二预设时长;所述预设时长的初始特征,包括:所述第一预设时长的第一初始特征,以及所述第二预设时长的第二初始特征。
在一种可能的实现方式中,为更好的体现旋律在不同时长层次上的长程特征,本实施例提供两个预设时长,其中所述第一预设时长大于所述第二预设时长,在实际的应用中,可以将第一预设时长设置为小节,第二预设时长设置为拍,也可以将第一预设时长设置为包含多个小节的乐句,第二预设时长设置为小节。可以理解的是,为使最终生成的旋律更加真实,第一预设时长可以设置为第二预设时长的整数倍,或根据旋律的不同选择经验值进行设定。
步骤S210A,根据所述第一初始特征和第一时长神经网络模型,计算各第一预设时长的第一时长特征。
在一种可能的实现方式中,所述第一时长神经网络模型,包括训练好的神经网络,包括层次化的RNN模型、LSTM模型等,与图3给出的实施例中的相同,不再赘述。
步骤S220A,根据所述第二初始特征、各所述第二预设时长所在的第一预设时长的第一时长特征和第二时长神经网络模型,计算各第二预设时长的第二时长特征。
在一种可能的实现方式中,所述第二时长神经网络模型,包括训练好的神经网络,包括层次化的RNN模型、LSTM模型等,在第二时长神经网络模型计算各第二预设时长的第二时长特征时,需要将第一时长神经网络模型计算出的各第一预设时长的第一时长特征代入,因此计算出的第二时长特征中,将携带时长更长的第一时长的第一时长特征,使得旋律在不同时长层次上的时长特征之间产生了关联。
步骤S300A,根据计算出的各第一时长特征,计算出的各第二时长特征、所述初始音符序列和音符神经网络模型,计算音符。
在一种可能的实现方式中,所述音符神经网络模型包括训练好的神经网络,包括层次化的RNN模型、LSTM模型等,与所述时长神经网络模型是相互独立的神经网络模型。由于预设时长为两个,在本实施例计算音符的过程中,将各第一时长特征和各第二时长特征共同代入计算。
在本实施例中,提供两个不同的预设时长,在不同的时长层次上对旋律的时长特征进行了提取,将两个预设时长的时长特征均计入音符的计算,并且将较长的预设时长的时长特征,也计入了较短的预设时长的时长特征计算过程中,使得最终生成的旋律在不同长程上的关联性更强,也更加具有真实性。
为更好的说明本申请的方法,以下实施例分别以图1及图2中的旋律为例,4/4拍为拍号,以一小节为第一预设时长,第一初始特征即初始小节特征为Bt-16,以一拍为第二预设时长,第二初始特征即初始的拍特征为bt-4,所述初始音符序列为yt-1,且所述初始音符序列中时长最短的音符为八分之一音符。
图7是根据一示例性实施例示出的一种基于神经网络的旋律生成方法的流程图,在如图6所示的实施例的基础上,步骤S210A包括:
步骤S211A,根据所述第一初始特征,所述第一时长神经网络模型中的第一初始时长网络状态,计算第一个第一预设时长的第一时长特征,所述第一初始时长网络状态包括第一时长网络状态的初始值,所述第一时长网络状态包括第一时长神经网络模型中的运算的网络状态。
步骤S212A,按照时间的先后顺序,根据计算出的前一个第一预设时长的第一时长特征、第一时长神经网络模型中的前一个第一预设时长的第一时长网络状态,依次计算当前第一预设时长的第一时长特征,并根据计算出的当前第一预设时长的第一时长特征,更新第一时长神经网络模型中当前第一预设时长的第一时长网络状态。
在一种可能的实现方式中,第一时长神经网络模型为小节神经网络模型Bar,其可为层次化LSTM模型,所述小节神经网络模型Bar根据初始小节特征Bt-16以及小节神经网络模型内LSTM的初始网络状态生成第一小节的小节特征Bt:
后续各小节的小节特征的计算方式依次类推,其中小节神经网络模型内LSTM的网络状态随小节特征的计算过程不断更新。
在本实施例中,以小节作为第一预设时长,根据时长神经网络模型中的时长网络状态计算各预设时长的时长特征,且前一个小节的时长特征对应的时长网络状态会代入当前小节的时长特征的计算,时长特征的前后关联性,使得旋律的长程特征的提取更加的复合旋律的实际特性,从而使得最终生成的旋律更具有真实性。
图8是根据一示例性实施例示出的一种基于神经网络的旋律生成方法的流程图,在如图6所示的实施例的基础上,步骤S220A包括:
步骤S221A,根据所述第二初始特征、第二时长神经网络模型中的初始第二时长网络状态、第一个第一预设时长的第一时长特征、计算第一个第二预设时长的第二时长特征,所述初始第二时长网络状态包括第二时长网络状态的初始值,所述第二时长网络状态包括第二时长神经网络模型中的运算的网络状态。
步骤S222A,按照时间的先后顺序,根据计算出的前一个第二预设时长的第二时长特征、第二时长神经网络模型中的前一个第二预设时长的第二时长网络状态,当前第二预设时长所在的第一预设时长的第一时长特征,计算各第二预设时长的第二时长特征。
在一种可能的实现方式中,第二时长神经网络模型即拍神经网络模型Beat生成拍特征序列bt,bt+4,bt+8,bt+12。每一个拍特征bt都由前一拍的拍特征bt-4,前一拍的Beat的网络状态和此拍所在小节的小节特征Bt通过Beat产生:
得到bt后可以反馈不断计算下一拍的拍特征。
在本实施例中,以拍为第二预设时长,根据时长神经网络模型中的时长网络状态计算各预设时长的时长特征,且前一个拍的时长特征对应的时长网络状态会代入当前拍的时长特征的计算,时长特征的前后关联性,使得旋律的长程特征的提取更加的复合旋律的实际特性,从而使得最终生成的旋律更具有真实性。
图9是根据一示例性实施例示出的一种基于神经网络的旋律生成方法的流程图,在如图6所示的实施例的基础上,步骤S300A包括:
步骤S310A,根据初始音符序列、音符神经网络模型中的初始音符网络状态、计算出的第一个第一预设时长的第一时长特征、计算出的第一个第二预设时长的第二时长特征、计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态。
步骤S320A,根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的第一预设时长的第一时长特征、当前音符所在的第二预设时长的第二时长特征,计算当前音符。
在一种可能的实现方式中,音符神经网络模型Melody生成音符并组成旋律yt…yt+16。yt由前一时刻的yt-1,前一时刻的Melody的网络状态ht-1,当前音符所在小节的小节特征Bt,当前音符所在拍的拍特征bt通过Melody生成。
yt=Melody(yt-1,ht-1,Bt,bt)
得到yt后我们可以反馈不断计算yt+1。
在本实施例中,根据小节特征和拍特征,在不同的时长层次上对旋律的时长特征进行了提取,将小节特征和拍特征均计入音符的计算,并且将小节特征也计入了拍特征计算过程中,使得最终生成的旋律在不同长程上的关联性更强,也更加具有真实性。
图10是根据一示例性实施例示出的一种时长神经网络模型训练方法的流程图,如图10所示,该方法包括:
步骤S10,按照所述预设时长划分数字化的样本旋律,得到各预设时长的分段旋律。
在一种可能的实现方式中,第一预设时长为小节,第二预设时长为拍,根据将图1中的旋律进行分段,则数字化的样本旋律图2中,每16列为一小节的分段旋律,每4列为一拍的分段旋律。
步骤S20,将所述各预设时长的分段旋律按照预设的节奏特征进行聚类分析,并将聚类分析结果中的类中心作为各预设时长的时长特征。
在一种可能的实现方式中,将每16列的数字化音符进行各小节聚类分析后,将各类的类中心作为本小节的小节特征,将每4列的数字化音符进行各拍聚类分析后,将各类的类中心作为本拍的拍特征。聚类分析包括使用K-Means方法对确定好的特征值进行聚类分析,所述特征值包括预设时长内的当前音符是否延续了前音、当前音符是否会持续到下一个音符、每个音符的持续时长、预设时长内的各音符的音高聚类特征等。例如将拍特征的聚类分析的聚类设定为8类,并使用这8类的中心作为拍特征。给定一个长为一拍的旋律片段,选择所有的拍特征中与该拍的拍特征最为接近的一个作为该拍的拍特征类别,并将该类别的中心作为拍特征。小节特征聚类的数量为16,其余计算过程与拍特征类似。
步骤S30,根据各所述预设时长的时长特征获取各所述样本旋律的时长特征序列。
在一种可能的实现方式中,将样本旋律中的各预设时长的时长特征按照先后顺序连接后,获取各样本旋律的时长特征序列。
步骤S40,按照时间的先后顺序,利用初始时长特征神经网络模型,依次根据样本旋律的时长特征序列中当前时长特征之前的时长特征,计算当前时长特征,得到当前时长特征的预测结果。
步骤S50,计算所述当前时长特征的预测结果和所述样本旋律中的当前时长特征之间的差值,并根据所述差值更新所述初始时长特征神经网络模型中的参数。
在一种可能的实现方式中,给定一段序列输入y0…yt-1,要求模型预测yt的概率,并最大化似然的方式对模型进行训练:
这里θ是指模型中所有的参数,y指所有训练序列的集合,p(yt|y0,…,yt-1)为在给定y0,…,yt-1的情况下,LSTM模型输出的yt的条件概率,n为序列y的长度,其中序列y为时长特征序列。
步骤S60,当所述初始时长特征神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到时长神经网络模型。
在一种可能的实现方式中,所述时长神经网络模型包括小节神经网络模型和拍神经网络模型,由于低时间尺度上生成的序列都是根据高时间尺度上的序列生成的,需要利用小节特征序列生成模型生成一段小节特征序列,再将这段小节特征序列输入拍特征序列生成模型生成一段拍特征序列。
在一种可能的实现方式中,所述数字化的样本旋律,包括延续前音序列、停止前音序列、音高序列;所述预设的节奏特征,包括各所述预设时长的分段旋律中的延续前音序列。
在一种可能的实现方式中,以数字化的样本旋律中的延续前音作为节奏特征,对本小节与前一小节中的各音符的时长延续关系,以及本拍与前一拍中的各音符的时长延续关系进行聚类分析。
图11是根据一示例性实施例示出的一种音符神经网络模型训练方法的流程图,如图11所示,该方法包括:
步骤S1,获取数字化的样本旋律中的音高序列。
在一种可能的实现方式中,获取图2中的每列中的音高部分的序列。
步骤S2,按照时间的先后顺序,利用初始音符序列神经网络模型,依次根据所述音高序列中当前音符之前的音符计算当前音符,得到当前音符的预测结果。
在一种可能的实现方式中,将时长神经网络模型的计算结果输入音符序列神经网络模型后,根据前一个音符预测当前音符。
步骤S3,计算所述当前音符的预测结果和所述音高序列中的当前音符之间的差值,并根据所述差值调整所述初始音符序列神经网络中的参数。
在一种可能的实现方式中,给定一段序列输入y0…yt-1,要求模型预测yt的概率,并最大化似然的方式对模型进行训练:
这里θ是指模型中所有的参数,y指所有训练序列的集合,p(yt|y0,…,yt-1)为在给定y0,…,yt-1的情况下,LSTM模型输出的yt的条件概率,n为序列y的长度,其中序列y为音符序列。
步骤S4,当所述初始音符序列神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到音符神经网络模型。
在一种可能的实现方式中,如图12所示,将小节模型计算得出的小节特征计入拍模型计算拍特征的过程,并将拍特征和小节特征均计入音符的计算。
在一种可能的实现方式中,时长神经网络模型和音符神经网络模型均使用相同的两层LSTM网络结构,每一层的隐状态向量长度均为256。在训练过程中使用的学习率均为0.001,批大小为64。
图13是根据一示例性实施例示出的基于神经网络的旋律生成装置的结构图,如图13所示:
初始值获取模块100,用于获取初始音符序列、预设时长和所述预设时长的初始特征,所述初始音符序列中时长最小的音符的时长小于所述预设时长。
时长特征运算模块200,用于根据所述预设时长、所述初始特征和时长神经网络模型,计算各预设时长的时长特征。
音符运算模块300,用于根据计算出的各预设时长的时长特征、所述初始音符序列和音符神经网络模型,计算音符,并根据计算出的音符获取旋律。
本实施例中,通过提取旋律的不同时间尺度的特征,考虑了旋律在不同的时长的结构特征,即考虑了旋律的长程结构,在生成旋律时,通过利用训练完成的各类神经网络模型的协作,生成具有良好长程结构的旋律片段,提高了生成旋律的真实性,能够保证听觉上的效果。
图14是根据一示例性实施例示出的基于神经网络的旋律生成装置的结构图,在图13所示的实施例的基础上:
所述时长特征运算模块200,包括:
初始时长运算单元210,用于根据所述初始特征、时长神经网络模型中的初始时长网络状态,计算第一个预设时长的时长特征,所述初始时长网络状态包括时长网络状态的初始值,所述时长网络状态包括时长神经网络模型中的运算的网络状态;
时长特征运算单元220,用于按照时间的先后顺序,根据计算出的前一个预设时长的时长特征、时长神经网络模型中的前一个预设时长的时长网络状态,依次计算当前预设时长的时长特征,并根据计算出的当前预设时长的时长特征,更新时长神经网络模型中当前预设时长的时长网络状态。
所述音符运算模块300,包括:
第一初始音符序列运算单元310,用于根据计算出的第一个预设时长的时长特征、初始音符序列、所述音符神经网络模型中的初始音符网络状态,计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态;
第一音符运算单元320,用于根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的预设时长的时长特征,计算当前音符,并根据计算出的当前音符,更新音符神经网络模型中当前音符的音符网络状态。
在本实施例中,根据时长神经网络模型中的时长网络状态计算各预设时长的时长特征,且前一个预设时长的时长特征对应的时长网络状态会代入当前预设时长的时长特征的计算,时长特征的前后关联性,根据音符神经网络模型中的音符网络状态计算各音符,且前一个音符对应的音符网络状态会代入当前音符的计算,音符的前后关联性,使得旋律的生成音符更加的复合旋律的实际特性,从而使得最终生成的旋律更具有真实性。
图15是根据一示例性实施例示出的基于神经网络的旋律生成装置的结构图,包括:
初始值获取模块100A,用于获取初始音符序列、预设时长和所述预设时长的初始特征,所述初始音符序列中时长最小的音符的时长小于所述预设时长。其中,所述预设时长,包括第一预设时长和第二预设时长,所述第一预设时长大于所述第二预设时长;所述预设时长的初始特征,包括所述第一预设时长的第一初始特征,以及所述第二预设时长的第二初始特征。
时长特征运算模块200A,包括:
第一时长特征运算单元210A,用于根据所述第一初始特征和第一时长神经网络模型,计算各第一预设时长的第一时长特征。
第二时长特征运算单元220A,用于根据所述第二初始特征、各所述第二预设时长所在的第一预设时长的第一时长特征和第二时长神经网络模型,计算各第二预设时长的第二时长特征。
音符运算模块300A,还用于根据计算出的各第一时长特征,计算出的各第二时长特征、所述初始音符序列和音符神经网络模型,计算音符。
所述第一时长特征运算单元210A,包括:
第一初始特征运算子单元211A,用于根据所述第一初始特征,所述第一时长神经网络模型中的第一初始时长网络状态,计算第一个第一预设时长的第一时长特征,所述第一初始时长网络状态包括第一时长网络状态的初始值,所述第一时长网络状态包括第一时长神经网络模型中的运算的网络状态;
第一特征运算子单元212A,用于按照时间的先后顺序,根据计算出的前一个第一预设时长的第一时长特征、第一时长神经网络模型中的前一个第一预设时长的第一时长网络状态,依次计算当前第一预设时长的第一时长特征,并根据计算出的当前第一预设时长的第一时长特征,更新第一时长神经网络模型中当前第一预设时长的第一时长网络状态。
所述第二时长特征运算单元220A,包括:
第二初始特征运算子单元221A,用于根据所述第二初始特征、第二时长神经网络模型中的初始第二时长网络状态、第一个第一预设时长的第一时长特征、计算第一个第二预设时长的第二时长特征,所述初始第二时长网络状态包括第二时长网络状态的初始值,所述第二时长网络状态包括第二时长神经网络模型中的运算的网络状态;
第二特征运算子单元222A,用于按照时间的先后顺序,根据计算出的前一个第二预设时长的第二时长特征、第二时长神经网络模型中的前一个第二预设时长的第二时长网络状态,当前第二预设时长所在的第一预设时长的第一时长特征,计算各第二预设时长的第二时长特征。
所述音符运算模块300A,包括:
第二初始音符序列运算单元310A,用于根据初始音符序列、音符神经网络模型中的初始音符网络状态、计算出的第一个第一预设时长的第一时长特征、计算出的第一个第二预设时长的第二时长特征、计算第一个音符,所述初始音符网络状态包括音符网络状态的初始值,所述音符网络状态包括音符神经网络模型中的运算的网络状态;
第二音符运算单元320A,用于根据时间的先后顺序,根据计算出的前一个音符、音符神经网络模型中的前一个音符的音符网络状态,当前音符所在的第一预设时长的第一时长特征、当前音符所在的第二预设时长的第二时长特征,计算当前音符。
在本实施例中,提供两个不同的预设时长,在不同的时长层次上对旋律的时长特征进行了提取,将两个预设时长的时长特征均计入音符的计算,并且将较长的预设时长的时长特征,也计入了较短的预设时长的时长特征计算过程中,使得最终生成的旋律在不同长程上的关联性更强,也更加具有真实性。
图16是根据一示例性实施例示出的时长神经网络模型的结构图,包括:
分段模块10,用于按照所述预设时长划分数字化的样本旋律,得到各预设时长的分段旋律。
聚类模块20,用于将所述各预设时长的分段旋律按照预设的节奏特征进行聚类分析,并将聚类分析结果中的类中心作为各预设时长的时长特征。
时长特征序列获取模块30,用于根据各所述预设时长的时长特征获取各所述样本旋律的时长特征序列。
预测结果获取模块40,用于按照时间的先后顺序,利用初始时长特征神经网络模型,依次根据样本旋律的时长特征序列中当前时长特征之前的时长特征,计算当前时长特征,得到当前时长特征的预测结果。
参数更新模块50,用于计算所述当前时长特征的预测结果和所述样本旋律中的当前时长特征之间的差值,并根据所述差值更新所述初始时长特征神经网络模型中的参数;
时长神经网络模型获取模块60,用于当所述初始时长特征神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到时长神经网络模型。
在一种可能的实现方式中,所述数字化的样本旋律,包括延续前音序列、停止前音序列、音高序列;所述预设的节奏特征,包括各所述预设时长的分段旋律中的延续前音序列。
图17是根据一示例性实施例示出的音符神经网络模型的结构图,包括:
音高序列获取模块1,用于获取数字化的样本旋律中的音高序列。
当前音符预测模块2,用于按照时间的先后顺序,利用初始音符序列神经网络模型,依次根据所述音高序列中当前音符之前的音符计算当前音符,得到当前音符的预测结果。
网络参数调整模块3,用于计算所述当前音符的预测结果和所述音高序列中的当前音符之间的差值,并根据所述差值调整所述初始音符序列神经网络模型中的参数。
音符神经网络确定模块4,用于当所述初始音符序列神经网络模型中的参数的更新次数达到预设的训练迭代次数时,得到音符神经网络模型。
图18是根据一示例性实施例示出的一种用于检测结果的确定装置1900的框图。例如,装置1900可以被提供为一服务器。参照图18,装置1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行上述方法中的步骤。
装置1900还可以包括一个电源组件1926被配置为执行装置1900的电源管理,一个有线或无线网络接口1950被配置为将装置1900连接到网络,和一个输入输出(I/O)接口1958。装置1900可以操作基于存储在存储器1932的操作系统,例如Windows ServerTM,MacOS XTM,UnixTM,LinuxTM,FreeBSDTM或类似。
在示例性实施例中,还提供了一种包括指令的非临时性计算机可读存储介质,例如包括指令的存储器1932,上述指令可由装置1900的处理组件1922执行以完成上述方法。例如,所述非临时性计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
以上已经描述了本申请的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。