生成音乐数据的方法

文档序号:1220370 发布日期:2020-09-04 浏览:25次 >En<

阅读说明:本技术 生成音乐数据的方法 (Method for generating music data ) 是由 加布里埃尔·梅多特 斯里坎特·杰尔拉 卡特琳娜·科斯塔 马特·麦维卡 萨默尔·阿卜杜拉 马 于 2019-02-14 设计创作,主要内容包括:公开了一种生成音乐片段的计算机实现的方法。该方法包括:确定音乐片段的初始音符序列;确定关于从候选音符集中选择至少一个后续音符的至少一个概率分布;基于初始音符序列的数据生成偏置输出;以及用根据概率分布和偏置输出从该候选音符集中选择的至少一个后续音符来扩展初始音符序列,其中,偏置输出将所述选择偏置以对所述选择产生由初始音符序列形成的音乐要素的重复的可能性造成影响。(A computer-implemented method of generating a musical selection is disclosed. The method comprises the following steps: determining an initial note sequence of a music piece; determining at least one probability distribution for selecting at least one subsequent note from the set of candidate notes; generating a biased output based on data of the initial note sequence; and extending the initial note sequence with at least one subsequent note selected from the candidate note set according to a probability distribution and a bias output, wherein the bias output biases the selection to affect the likelihood that the selection produces a repetition of the musical element formed by the initial note sequence.)

生成音乐数据的方法

技术领域

本公开内容涉及计算机实现的生成音乐片段的方法。

背景技术

以往对生成音乐软件的尝试一般分成两类:一类是其音乐输出不包括使音乐令收听者愉悦所需的结构水平,因为这类软件不对输出应用产生这种结构所必需的规则和约束;另一类是将使用硬编码的规则和约束的结构合并至输出,这导致输出可被预测并且缺少在人类创作的音乐中发现的音乐质量和变化。

需要用于生成更复杂且在听觉上令人愉悦的音乐的方法,在这些方法中,以较长范围的重复(repeat)和节奏型(pattern)为特征,但保留了避免对输出的硬编码规则和约束的系统的音乐质量和变化。

发明内容

本文公开的实施方式提供了在机器生成的音乐中引入长期结构的方式。结构(structure)是由人类创作的音乐的关键方面,其在使音乐片段具有整体连贯感和意向性方面起关键作用。结构在音乐片段中表现为音乐模式的集合、这些模式的变化、字面或动机的重复以及在同一片段中较早出现的音乐乐节的转换。

权利要求中陈述了本发明。

在第一方面,提供了一种在一个或更多个时刻提供一个或更多个相应输出的计算机实现的方法。该方法包括:生成至少一个第一数据对象,该至少一个第一数据对象能够被执行以提供输出的第一部分,该至少一个第一数据对象包括具有第一值的参数,第一值与该至少一个第一数据对象相关联;将至少一个第一数据对象放置在序列中的第一位置;生成至少一个第二数据对象,该至少一个第二数据对象能够被执行以提供输出的第二部分;生成关于所述至少一个第二数据对象的所述参数的第二值的第一概率阵列,第一概率阵列受第一值影响;生成关于参数的第二值的第二概率阵列,第二概率阵列包括第二值等于第一值的概率;组合第一阵列和第二阵列以提供经修改的概率阵列;基于经修改的概率阵列确定并设置第二值;将所述至少一个第二数据对象放置在序列中的第二位置,第二位置提供输出的第二部分;以及输出位于序列中的第一位置和第二位置处的相应的至少一个第一数据对象和至少一个第二数据对象以提供输出,其中,至少一个第一数据对象和至少一个第二数据对象表示音频数据或MIDI数据。

1可选地,输出第一数据对象和第二数据对象包括:播放音频数据或MIDI数据;或者存储音频数据以供播放;或者存储MIDI数据。

可选地,第一数据对象对应于第一音乐音符,并且第二数据对象对应于第二音乐音符。

可选地,该参数是音符音长,并且第一值和第二值是音符音长长度。

可选地,该参数是以下之一:音符音高、音符力度(dynamic)或音符运音法(articulation)。

可选地,第一数据对象还包括第一音高值,其中,第一音高值是第一音符音高。

可选地,第一概率阵列受第一值和第一音高值二者影响。

可选地,第二数据对象还包括第二音高值,其中,第二音高值是第二音符音高。

可选地,第一概率阵列由第一神经网络生成。

可选地,第一概率阵列是基于规则生成的。

可选地,第一数据对象对应于音乐片段的第一音符。

可选地,第二数据对象对应于音乐片段的第二音符。

可选地,序列中的第二位置直接跟随序列中的第一位置。

可选地,序列中的第二位置不直接跟随序列中的第一位置。

可选地,第二概率阵列由第二神经网络生成。

可选地,第二概率阵列是基于规则的。

可选地,第二神经网络是递归神经网络。

可选地,第二概率阵列包括多个向量,每个向量包括至少一个标签,该标签具有与向量相关联的概率。

可选地,第一标签限定第二值是否等于第一值。

可选地,第二标签标识第一数据对象。

可选地,第三标签标识第一值。

可选地,第四标签标识序列中的第一位置。

可选地,第五标签标识第一数据对象与先前数据对象之间的间隔。

在另一方面,提供了一种生成用于训练神经网络的输入的计算机实现的方法。该方法包括:接收音乐数据,该音乐数据对应于多个数据对象;识别音乐数据的至少一个参数,其中,多个数据对象中的第一数据对象和多个数据对象中的第二数据对象均具有针对所述至少一个参数的值;确定第一数据对象的值与第二数据对象的值相同;向第一数据对象和第二数据对象中的至少一者分配至少一个标签以指示该值;生成至少一个向量,该至少一个向量包括至少一个标签和对被分配有所述至少一个标签的数据对象的指示;以及将该至少一个向量提供为用于训练神经网络的输入。

可选地,第一数据对象和第二数据对象对应于音乐音符。

可选地,参数是位置、音长、音程或音高。

可选地,神经网络是递归神经网络。

在另一方面,提供了一种生成音乐片段的计算机实现的方法。该方法包括以下步骤:确定该音乐片段的初始音符时间序列;确定关于从候选音符集中选择至少一个后续音符的至少一个概率分布;基于初始音符序列的数据生成偏置输出;以及用根据概率分布和偏置输出从候选音符集选择的至少一个后续音符来扩展初始音符序列,其中,偏置输出将所述选择偏置以对该选择产生由初始音符序列形成的音乐结构要素的重复的可能性造成影响。

可选地,这些步骤构成迭代音乐生成过程的当前迭代。

在另一方面,提供了一种从音乐片段中提取音乐结构信息的计算机实现的方法。该方法包括:在处理级处接收音乐片段;处理该音乐片段以在该音乐片段中识别一组重复乐节,每个重复乐节是该音乐片段的较早乐节的重复;以及对于一组重复乐节中的每一个重复乐节,确定以下中的至少一者:音乐的重复乐节与音乐的较早乐节之间的音乐时长、重复的类型、以及较早乐节与重复乐节之间的移调值。

可选地,重复的类型可以是以下之一:音长重复、音程重复和音长音程重复。

在另一方面,提供了一种从音乐片段中提取音乐结构信息的计算机实现的方法。该方法包括:在处理级处接收音乐片段;以及生成针对该音乐片段的多个帧中的每个帧的向量,其中,每个帧出现在该音乐片段的小节内,并且向量包括指示在该小节内所述帧的音乐强度的强度指示符,该强度指示符是基于帧在小节内的位置而确定的。

可选地,该向量可以包括本文中所公开的任何另外的向量信息。

可选地,强度值是在音乐背景下帧在片段内所处位置的有用的指示符。

可选地,强度指示符可以指示例如节拍强度、小节强度或超节拍强度。

可选地,每个向量可以指示帧是否是重复乐节的一部分。

可选地,对于作为或形成重复乐节的一部分的帧,每个向量可以指示以下至少一者:重复的类型、移调值、以及较早乐节与重复乐节之间的音乐时长。

可选地,音乐片段可以是多个音乐片段中的一个,如上所述针对这些音乐片段确定向量,并且使用这些音乐片段来训练结构生成器。如下文说明的,可以使用这些向量来训练结构生成器。可以仅根据结构数据集而不是根据实际的音乐片段来训练结构网络,或者可选地,也可以将音乐片段用于训练。

在另一方面,提供了一种从音乐片段中提取音乐结构信息的计算机实现的方法。该方法包括:在处理级处接收音乐片段;对该音乐片段进行处理以在该音乐片段中识别多个重复乐节,每个重复乐节是该音乐片段的较早乐节的重复;对多个重复乐节进行过滤以根据一组过滤标准滤除不想要的重复乐节。

可选地,可以以下面关于步骤s304描述的方式执行过滤。

可选地,该音乐片段可以是音乐抄本的形式。

在另一方面,提供了一种计算机系统,该计算机系统包括数据处理级(呈一个或更多个处理器的形式,例如CPU、GPU等)和存储器,该存储器耦接至一个或更多个处理器并且被配置成存储可执行指令,当在一个或更多个处理器上执行该可执行指令时,使一个或更多个处理器执行本文公开的任何步骤。

在另一方面,提供了一种计算机程序产品,该计算机程序产品包括存储在计算机可读存储介质上的可执行指令,该可执行指令被配置成当在一个或更多个处理器上执行时使一个或更多个处理器执行本文公开的任何步骤。

附图说明

现在将参照附图通过示例的方式描述本发明的实施方式,在附图中:

图1示出了用于生成新音乐数据的方法的流程图;

图2示出了包括四个四分音符的音乐乐谱;

图3示出了基于音乐数据生成向量的方法的流程图;

图4示出了过滤重复的方法的流程图;

图5示出了划分成帧的音乐乐谱;以及

图6示出了音乐乐谱;

图7示出了示例概率阵列。

具体实施方式

本文公开了在一个或更多个时刻提供一个或更多个相应的输出的方法。特别地,输出可以是被播放或被存储为数据的音乐音符,每个音符具有其自己的时刻。音乐音符中的至少一些是生成的。

传统上,音乐是由从事创作音乐的人创作的。这类人基于音乐理论和经验创作音乐以创作出听觉上令人愉悦的音乐片段。这是专业且耗时的任务。本文所公开的方法允许在不需要由专门从事音乐创作的人进行输入的情况下生成与音乐音符对应的音乐数据。为了实现这一点,使用概率来选择序列中的音符,最终得出可以被视为音乐片段的完整的音符序列。

选择第一音符。这可以基于规则、概率或其他任何方法来选择。例如,第一音符可以总是相同,或者第一音符可以在每种情况下不同。接下来,选择第二音符。对第二音符的选择可以基于第一音符。在这种情况下,可以使用概率阵列基于第一音符的选择结果来提供第二音符的可能的选择结果的概率阵列。然后,可以根据所述概率阵列选择第二音符的值,其中,由于某些音符具有较高的概率,因此这些音符与其他音符相比更可能被选择。该概率阵列可以被称为由旋律生成器生成的旋律阵列。

然而,有利地,还可以结合旋律阵列使用第二概率阵列,以使第二音符选择的结果偏置。第二概率阵列可以被称为由结构生成器生成的结构阵列。与旋律阵列不同,结构阵列提供了第一音符的一些要素重复的概率阵列。换言之,结构生成器提供用以增加第一音符的一些要素重复的可能性的偏置输出。例如,结构阵列可以提供第二音符的音高与第一音符的音高相同或者第二音符的音长与第一音符的音长相同的概率。然而,第一音符的任何要素都可以重复。本申请的发明人已经意识到,重复是使音乐在听觉上令人愉悦的重要方面,因此,在一起使用两个阵列的概率时,由于结构阵列基于音符序列的大局(big-picture)结构提供重复的概率,因此创建的音符序列更有可能在听觉上令人愉悦。进一步重复实践这一构思,结构阵列例如可以提供高概率的下述情况:下一个要选择的音符的音长与在5个音符之前选择的音符的音长相同或者该音符的任何其他要素现在发生重复。该概率修改/偏置由旋律阵列提供的概率,使得现在选择到相同音长的概率更有可能。然而,由结构生成器提供的偏置不会完全覆盖旋律生成器做出的决定。相反,其使得旋律生成器的概率输出偏置从而在以下两方面之间取得平衡:一方面尊重由旋律生成器进行的以音乐为动机的音符“建议”,以及另一方面施加一定程度的有说服力的音乐结构。

如先前提及的,结构阵列可以提供先前结构的任何类型的重复的概率。例如,可以在三节(bar)后有断音,并且结构阵列可以提供使断音再次重复的高概率。任何其他重复类型都可以被提供为结构阵列中的概率。

旋律生成器和结构生成器两者都可以基于规则生成阵列。例如,旋律阵列可以总是提供要选择的音符的音高比前一音符高一个音的高概率。结构阵列可以总是提供要选择的音符的音长与两节后的音符的音长相同(重复)的高概率。可以使用任何其他规则。

替选地,可以使用概率序列模型(PSM)来生成旋律阵列和结构阵列中的一者或两者。PSM是确定项目或值序列上的概率分布的组件。该分布可以从示例序列的数据集学习得到,也可以先验固定。通过选择适当的数据集或对合适的专家知识进行编码,可以使PSM反映感兴趣领域的典型时间结构,例如,音乐中典型的和弦或音符序列。

PSM可以用于通过在给定目前被采样的项的前缀的情况下根据可能的后续项上的概率分布一次采样一项来生成符合其分布的序列。换言之,每个项是根据由PSM基于已选择的项中的一个或更多个项生成的可能项的概率分布而选择的。由于PSM的输出是概率性的,因此这引入了变化要素,即同一输入可能产生不同输出。

PSM的示例包括马尔科夫链、概率语法和具有概率最终层(SOFTMAX等)的递归神经网络。出于提供示例的目的,将讨论使用递归神经网络(RNN)的情况。然而,对本文讨论的神经网络的任何引用都可以被替代为另一种PSM,例如以上提供的那些示例。RNN是用于对序列建模的一种类型的神经网络,并且包括输入层、隐藏层和输出层。因此,RNN的输入和输出可以分别对应于输入层和输出层。隐藏层可以被称为具有状态的有状态组件。所述状态充当RNN在遍历序列时遇到的过去信息的记忆。在序列中的每个位置处,RNN利用输入和来自前一位置的有状态组件的状态两者来预测输出。特别地,长短期记忆(LSTM)网络(其是一种类型的RNN)在下述实施方式中可能特别有利,因为存在作为有状态组件的一部分的至少一个记忆单元,该至少一个记忆单元定义有状态组件的状态,从而提供比标准RNN更大的时间记忆。

这样的隐藏层/有状态组件可以被称为LSTM层,并且这样的层已经被广泛用于RNN中以对语音信号、语言令牌序列和音乐序列建模。因此,技术人员将理解如何在以下实施方式的背景下实现LSTM网络。如将理解的那样,给定处于序列位置t处的输入向量xt、来自前一位置的LSTM层ht-1的输出及其记忆单元ct-1(被统称为其状态),计算LSTM层ht的输出并且将其进一步传播到较大模型的另一层(例如,输出层)中。

在旋律生成器的情况下,神经网络可以被训练成基于在前音符的特定值来确定新音符的概率。神经网络的输出层可以包含两个softmax单元组,每个softmax单元组对一组互斥的可能事件的单个概率分布建模。这些概率分布中的第一概率分布表示音符的音乐音高,并且第二概率分布表示音符的音长。在神经网络是LSTM网络的情况下,给定处于序列中的任何给定位置t处的LSTM层ht的输出,该输出被转换为两个独立的概率分布ρt和δt,其共同构成该网络的稍后的输出。根据这两个分布,通过简单地将特定音符的对应的音高的概率和音长的概率相应地相乘就能够获得该音符(即特定音高和音长)的概率。

在结构生成器的情况下,神经网络可以被训练成确定任何在前音符的要素或者完整的在前音符再次出现的概率。再次说明,该神经网络的输出层也可以包含两个softmax单元组,但是它们将表示特别限定结构的各方面的不同的量(下文将说明)。然而,组合这两个softmax单元组的方式可以与以上针对旋律阵列描述的方式相同。神经网络的使用使得音符的生成得到进一步改进,并且在听觉上更令人愉悦,因为可以在真实的音乐上对网络进行训练以学习真实音乐中存在的节奏型和结构。

本文公开的第一方面是如图1所示的生成新音乐数据的方法。特别地,该方法在一个或更多个相应的时刻提供一个或更多个输出。输出可以是播放音乐音符或者将音乐音符存储为音乐数据。

该方法可以由处理器执行,其中使用MIDI格式对音乐数据进行数字编码,但是正如将理解的,也可以使用任何其他合适的格式。音乐数据是描述一个或更多个音乐音符的数据,音符包括和弦和休止符。

图1的步骤可以基于对应于多个音乐音符或仅对应于一个音乐音符的现有音乐数据(例如,现有的音乐片段)开始。在步骤s101处,由旋律生成器生成旋律阵列。旋律阵列包括基于音乐数据的概率阵列。概率阵列包括下一音符针对某个参数具有某个值的概率列表。例如,该阵列可以具有下一音符的音高的概率列表。

在步骤s102处,记录结构历史。结构历史是与现有音乐数据有关的值的列表。该步骤可以在步骤s101之前进行,或者其实与步骤s101同时进行。

在步骤s103处,由结构生成器生成结构概率阵列。结构概率阵列包括使得由结构历史提供的现有结构的要素重复的概率列表。

在步骤s104处,通过结构概率阵列的概率对旋律概率阵列的概率进行修改/偏置,从而提供经修改/偏置的概率阵列。

在步骤s105处,基于由经修改/偏置的概率阵列提供的概率来选择新音符的一个或更多个参数的一个或更多个值。

在步骤s106处,生成新的音乐数据,新的音乐数据对应于所选择的新音符。

在步骤s107处,更新步骤s102的结构历史。此后可以通过重复所选择的图1的步骤来重复图1的过程,下文将进行描述。

下面将更详细地描述图1的步骤。

结构概率阵列

结构概率阵列是包括结构标签和相关联的概率值的阵列(类似于数据列表或数据表)。下文将对标签进行详细说明。结构概率阵列可以仅具有一个标签,或者可以具有多于一个标签,例如标签组合。每个标签或标签组合具有相关联的概率值。

如将说明的,概率值是新音符具有相关联的标签或标签组合的概率。

可以以多种方式生成结构概率阵列。例如,结构概率阵列可以基于预定义规则。预定义规则可以规定:新音符的音长等于四分音符(音长=1)的概率是0.5,并且新音符的音长等于八分音符(音长=0.5)的概率也是0.5。在该示例中,新音符的音长是四分音符或八分音符的概率相等,然而也可以使用任何其他规则而且可以包括具有任何概率的任何音乐音符音长。

替选地,可以使用结构生成器来生成结构概率阵列,其中结构生成器是神经网络,例如已经被训练成基于向量(例如,二进制向量)生成与标签或标签组合相关联的概率值的递归神经网络,已经根据音乐数据对该神经网络进行过训练。

训练结构神经网络

在结构生成器是神经网络的情况下,必须对这样的神经网络进行训练以使其能够基于输入数据提供适当的输出。根据预先存在的数据对神经网络进行训练,并且然后,一旦经过训练,则可以使用该神经网络以基于新的数据输入提供适当的输出。这种经训练的神经网络可以用来基于在前的一系列对象确定与作为一系列对象中的下一对象的新对象相关联的概率。因此,在这种情况下,使用预先存在的一系列对象对结构神经网络进行训练,以便能够确定与要添加到系列中的新对象相关联的概率。

训练的目的是提供能够提供预期下一个新对象是系列中的在前对象的重复的一个或更多个概率的经训练的结构神经网络。在这种背景下,构成预期重复的是结构神经网络在训练时获得的知识,这些知识被封装在已经从一组音乐结构训练数据学习到的结构神经网络的一组模型参数中。也就是说,结构神经网络从该训练数据中学习到如何通过重复该训练数据所表示的这类音乐中的结构要素来创建音乐结构。也就是说,结构神经网络从其训练数据学习到由什么构成预期的(音乐上有说服力的)音乐结构、并且基于目前已经确定的音符序列将这些知识应用于音乐生成任务。可以通过提供表示所期望的音乐类型/流派的训练数据来教给音乐结构神经网络关于不同音乐类型/流派的音乐结构。

相应地,首先使用训练数据对结构神经网络进行训练。在这种情况下,训练数据是音乐数据,因为结构神经网络被用于确定与音乐音符有关的一个或更多个概率。这样的训练数据可以被视为供处理的音乐片段,因此,训练数据可以被视为由神经网络在处理级处接收。图2示出了包括四个四分音符202至205的音乐小节(measure)或节(bar)201,这是使用常规的现代音乐符号在视觉上呈现音乐数据的示例。在整个本公开内容中,将可互换地使用词语“小节”和“节”。使用下面描述的图3的步骤将训练数据转换成多个训练向量,并且然后由结构神经网络对训练向量进行处理以训练结构神经网络。

如下面在图3中阐述的,将训练数据转换成多个训练向量是重要且独特的步骤。然而,一旦已将训练数据转换成多个训练向量,则应当注意,如所理解的那样,结构神经网络可以有许多方式来处理这些训练向量,以被认为是“经训练的”结构神经网络。一个示例方式是使用随机梯度下降使随后的向量之间给定的成本函数最小化,这在本领域中是已知的。

图3示出了根据音乐数据生成一个或更多个向量的方法的流程图,所述向量是用作用于训练神经网络的输入的训练向量。图3是提供用于训练神经网络以识别音长重复(即,音符音长的重复)或音长音程重复(即,音符音长的重复和相对于前一音符的音程的重复)的向量的实施方式,下文将进行说明。然而,替选地,可以使用所述向量来训练神经网络以识别音乐数据中的任何其他类型的重复。例如,可以使用能够识别结构的重复的任何过程,例如通过将音符或音符乐节标记为前一音符或音符乐节的任何要素的重复来进行识别。如前面讨论的,要素可以是音符音长、音符音高、音符运音法(articulation)、音符力度(dynamic)或类似要素。

还应当注意,图3的步骤可以更改而且下面讨论的具体步骤并非必不可少。事实上,任何能够将现有音乐数据转换成向量列表(该向量列表提供结构信息)的过程都可以被用作用于训练神经网络的输入。

首先提供音乐数据,并且然后对音乐数据进行处理以确定该音乐数据的每个音符的至少一个参数,每个参数具有值。取决于期望的训练结果,示例参数有音符类型、音符音长、音符音高、音符音程、音符位置或任何其他参数。现在将参照这些示例参数详细地描述图3的步骤。

·确定音乐数据的参数值,s301

在步骤s301处,确定音乐数据中的每个音符的参数和关联值,并且用参数值标注每个音符。在该示例中,一个参数是音长并且确定了音长值,音长值对应于以四分音符的倍数表示的音符音长(例如,如果音符是八分音符,则其被赋予音长值0.5,而如果音符是二分音符,则其被赋予音长值2)。可以按照任何其他固定音长(例如八分音符的倍数)来衡量音长。下面讨论其他示例参数:音高、音程和位置。

可选地,还针对音乐数据中的每个音符确定音程参数的音程值。如果在被标注的音符之前紧邻着另一音符,则音程值对应于被标注的音符与这个紧邻在前的音符之间的音高差。对音符的标注包括:标注休止音符(在传统音乐术语中简称为“休止符”),如将理解的,休止音符也有音长值。但是,休止音符没有音高或音程值。如果在被标注的音符之前紧邻的是休止音符,则该音符的音程值对应于被标注的音符与紧邻在该休止音符前的音符之间的音高差。如果这个紧邻在前的音符也没有音高值(即,也是休止音符),则使用下一个紧邻在前的音符。

对音程的标注可以基于被标注的音符与紧临在前的音符之间的音阶度数。例如,以C大调为基调的西方音乐中的大调音阶包括音符C、D、E、F、G、A和B。这些音符分别具有音阶度数1、2、3、4、5、6和7。假设音乐数据是C大调的,并且被标注的音符的音高等级为A(音阶度为6),并且紧临在前的音符的音高等级为F(音阶度为4)。音程值是被标注的音符的音阶度减去紧临在前的音符的音阶度的值。因此,在该实例中,音程值是+2。如果被标注的音符的音高等级为A(音阶度为6),并且紧临在前的音符的音高等级为B(音阶度为7),则音程值将是-1。

在该实例中,未被包括在以C大调为基调的大调音阶中的任何音高都可以被近似为该大调音阶中包括的音高之一。例如,假设被标注的音符的音高等级为A(音阶度为6),并且紧临在前的音符的音高等级为F#(其不是以C大调为基调的音阶度)。音高等级F#可以被近似为音高等级F(音阶度为4),因为音高等级F是以C大调为基调的大调音阶中最接近的音高等级。因此,在该实例中音程值将是+2。

替选地,对音程的标注可以基于被标注的音符与紧临在前的音符之间的音或半音的数量。例如,音程值可以基于两个音符之间的半音的数量。因此,在上述情况中,A与F#之间的半音的数量是+3,因为这些音符相隔三个半音。当然,可以使用定义音符之间的音程的任何系统。

音乐数据的每个音符都有位置值。音符位置在本文中由从音乐数据开始直到该音符开始的音长来定义,该音长以四分音符的倍数表示。例如,音乐片段中的第一音符的位置是0(假设在第一音符之前没有其他音乐字符),并且作为包括4/4拍的四节的音乐片段中的最后一个音符的四分音符的位置是15。

假设图2中的音乐202的小节或节是以C大调为基调的音乐的第一节。下面的表1列出了图2中的每个四分音符202至205的位置值、音高、音长值和音程值。

Figure BDA0002591898680000121

表1

虽然图2的音乐仅示出有音高的音符,但本文所公开的相同方法可以应用于具有休止音符(在音乐术语中被称为“休止符”)或和弦的音乐。休止音符的音高将为“null(空值)”。如将理解的那样,和弦是被布置成在同一时刻播放或输出的多个音乐音符。可以基于和弦的仅其中一个音符(例如,音乐上最低的音符)来标注该和弦,或者可以在单个行条目中标注每个和弦的多个音高。

·识别重复,s302

接下来,识别一个或更多个重复(如果存在的话)。在该示例中,要识别的第一类重复将被称为音长复。音长重复是具有与先前音符相同的音长的(任何音高的)音符的重复,或者其实音长重复可以是休止音符(即具有空音高值的音符)的重复。音长重复也可以是具有与一系列先前音符相同的音长的一系列音符的重复,重复中的每个音符的音长与在前的一系列音符中的对应音符的音长相同。然而,如以上所提及的,可以识别任何其他类型的重复,并且在此将音长重复作为一种重复来讨论。在正讨论的示例中,一系列音符中的音符是直接相邻的音符,并且可以包括休止音符。先前的一个或多个音符可以紧临在前,或者可以处于音乐中的任何其他较早的点。音长重复的一个或多个音符将被适当地称为一个或多个重复音符。音长重复是在前的一个或多个音符的重复,该在前的音符将被称为原始音符。

作为第一选项,在识别音长重复时不考虑重复音符的音高。也就是说,在音长为1的音符被重复并且重复音符的音长也为1但具有不同的音高的情况下,该重复仍是音长重复。

替选地,作为第二选项,可以将原始音符是休止音符还是具有(任何值的)音高的音符考虑在内。例如,在第一音符是音长为1(并且没有音高值)的休止音符并且稍后的第二音符是音长为1(并且有音高值)的四分音符的情况下,即使这两个音符具有相同的音长,第二音符也不能被视为音长重复。与播放的内容(具有音高值的音符)或不播放的内容(是休止音符、没有音高值的音符)相关联的节奏的听觉解释非常不同。因此,通过考虑原始音符是否具有音高值(即该音符是否是休止符),改善了对音长重复的识别。

可选地,可以忽略单个原始音符的音长重复,并且可以要求原始音符的阈值数量。例如,可以仅识别作为含至少两个原始音符的系列的音长重复的音长重复。原始音符的阈值数量可以是任何数量并且在开始时被预定义。

在步骤s302处,识别音乐数据中的音长重复(如果存在的话)。可选地,可以识别音乐数据中的多于一个音长重复或所有音长重复。

依次考虑音乐数据中被识别的每个音符。参照图2,首先考虑表1中列出的四分音符202。在节201中,该音符的音长(单个四分音符=1)被重复三次。因此,这三次重复是四分音符202的三次单独的音长重复,每个音长重复具有不同的位置(参见下面的表2)。在该示例中,音长按照四分音符节拍来量化,四分音符节拍对于4/4节来说即为4拍。然而,可以使用量化音长的任何其他方法,例如八分音符节拍或十六分音符节拍。

音长重复通过重复位置值、回顾长度和重复时长来定义。重复位置值被定义为第一重复音符的位置值。回顾长度是第一重复音符的位置值与原始音符的位置值之间的差。一般来说,回顾长度可以被视为音乐的重复乐节与音乐的较早乐节之间的音乐时长,音乐的较早乐节是重复所基于的音乐乐节。重复时长等于原始音符的音符音长。替选地,在音长重复是一系列原始音符的重复的情况下,重复时长等于原始音符系列中的所有音符的音长之和。现在将参照图2给出音长重复的重复位置值、回顾长度和重复时长的示例。

四分音符202的第一音长重复发生在四分音符203处。该音长重复的重复位置值为1、回顾长度为1并且重复时长为1。

例如,在下面的表2中示出了图2的音乐数据的所有音长重复以及它们的音长重复位置值、回顾长度和重复时长。还指示了与每个音长重复对应的四分音符202至205,尽管该信息可根据重复位置值、回顾长度和重复时长得出并且因此不需要记录。

表2

如果音乐数据中不存在音长重复,则不识别音长重复。

所有被识别的音长重复都被添加到重复列表。

如本文使用的术语“重复”不限于图3的特定类型的重复。总的来说,根据所应用的任何匹配标准,如果任何要素彼此匹配,那些要素就会被认为是较早要素的重复。例如,除了上述一个或一系列音符的音长重复之外或代替上述一个或一系列音符的音长重复,重复可以是重复的一个或一系列音高,或者事实上是任何其他种类的音乐要素的重复。因此,在这种背景下,音乐要素的重复是指根据那些匹配标准与较早的音乐要素相匹配的音乐要素。

例如,可以使用诸如SIATEC或COSIATEC的模式检测算法。

·识别音长音程重复,s303

在可选的步骤s303处,识别音长音程重复。在第一实施方式中,音长音程重复是其中每个重复音符(不包括第一重复音符)的音程值与对应的原始音符的音程值相同且具有相同顺序的音长重复。由于音长音程重复以这种方式取决于音符之间的关系,因此音长音程重复必定包括至少两个音符。例如,一系列四分音符204至205是一系列四分音符202至203的音长重复。此外,该音长重复也是音长音程重复,因为四分音符203和205二者的音程值都为+4。即使四分音符202的音程值为空且四分音符204的音程值为-4,该结论也成立,因为在识别音长音程重复时不考虑第一重复音符(在这种情况下为四分音符204)的音程值。

替选地,在第二实施方式中,在识别音长音程重复时,可以将第一重复音符的音程值考虑在内。在这种情况下,第一重复音符的音程值可能必须等于第一原始音符的音程值,使得每个重复音符(包括第一重复音符)的音程值与对应的原始音符的音程值相同并且具有相同顺序。在图2的示例中,在这种情况下将不会识别出音长音程重复。

与音长重复类似,音长音程重复通过重复位置值、回顾长度和重复时长定义。

对于一系列原始音符的音长重复,每个重复音符(除以上第一实施方式的情况中的第一重复音符外)可能必须具有与其在原始音符系列中的对应音符相同的音程值,才能使音长重复成为音长音程重复。

作为第一实施方式的示例,如前面所讨论的,作为重复了一对四分音符202和203的重复音符的一对四分音符204和205是音长重复和音长音程重复。四分音符204(在该实例中对应于原始四分音符202)的音程值为-4,而四分音符202的音程值为空。然而,四分音符204是第一重复音符,因此在第一实施方式中忽略了音程值的失配。四分音符203和205具有相同音程值(+4)的事实足以使该音长重复成为音长音程重复。

可选地,音长音程重复还可以通过音程移调值来定义。音程移调值,像本文讨论的一些其他值一样,可以取真(true)或假(false)两个值中的一个。真值指示满足条件(在这种情况下,“真”指示音长音程重复具有音程移调),而假值指示不满足条件。如果音长音程重复的第一重复音符具有与被重复的对应音符相同的音高,则音长音程重复的音程移调值被赋值为假,因为第一重复音符相对于对应的原始音符没有向上或向下移调。必然地,如果重复是音长音程重复并且移调值为假,则音长音程重复的第二音符和所有其他重复音符也必定相对于其对应的原始音符没有向上或向下移调。否则,音长音程重复的音程移调值会被赋值为真。

此外,音程移调值也可以用数字来表示,该数字是移调的音、半音的数量或音阶度数。例如,音程移调值+5可以表示第一原始音符与音长音程第一重复音符之间有5个半音移调。按照该示例,音程移调值0可以指示没有音长音程重复的移调。

如果音乐数据中不存在音长音程重复,则不识别音长音程重复。

在进入下一阶段之前,所有音长音程重复被添加到重复列表。

下面的表3列出了图2的音乐数据中存在的仅音长音程重复的位置值、回顾长度、重复时长和音程移调值。

Figure BDA0002591898680000161

表3

在实践中,如将理解的,可以通过将标注的音乐数据转换成字符串并且识别字符串中作为音长重复和音长音程重复的子字符串来实现识别音长重复和音长音程重复。例如,可以首先将音乐数据的音符序列转换成两个字符串,一个对应于音长并且另一个对应于音程。在这些字符串的每一个中,可以使用字符串匹配算法来寻找作为重复的子字符串。可以根据偏好丢弃单音符重复,并且如已说明的那样,可以仅保留对应于特定回顾的那些重复。可选地,可以设置最大音符音长,并且可以将长于最大音符音长的任何音符分成具有同一音高的多个音符。例如,最大音符音长可以是两拍。该可选步骤用于限制将音乐数据表示为字符串所需的字符数。

s304的结果是,识别出音乐中每个音符的每个可能的音长重复和音长音程重复。可选地,代替识别每个可能的音长重复和音长音程重复,在该阶段可以仅识别具有一定回顾长度的那些重复。例如,在仅允许值为2和4的预定义回顾长度的情况下,可以丢弃回顾长度不是2或4的任何重复。然而,如将讨论的,该步骤可以在过程中的另一点处发生。如先前提及的,可以识别音乐结构中的任何其他类型的重复,并且以上方法不限于特定的重复类型。

·重复过滤,s304

在可选步骤s304处,根据一组过滤标准,从重复列表中删除某些不想要的音长重复和音长音程重复。该过程被称为重复过滤。重复过滤出于两个目的:第一,能够移除具有某些不期望的特性(例如,本申请的发明人认为在音乐上不太重要的回顾)的重复;第二,重复过滤还可以可选地用来确保音乐数据中的每个位置仅对应至多一个重复类型,这可以简化数据并且因此使神经网络更容易和更快地进行处理。因此,例如,具有较长重复时长和回顾长度的重复可以优先于具有较短重复时长和较短回顾长度的重复被保留。通过优先于具有较短重复时长和较短回顾长度的重复保持具有较长重复时长和回顾长度的重复,可以捕获更多的重复信息,因为更多的音符将被标记为是重复的一部分。通过捕获更多的重复信息,可以改善对神经网络的训练。

图4是示出重复过滤的方法的步骤的流程图。

在步骤s401处,从重复的列表中删除不具有一个或更多个预定义回顾长度的音长重复和音长音程重复。在这种情况下,过滤标准因此包括一个或更多个回顾长度。

可以使用多种方法来选择预定义的回顾长度。例如,可以由于某些预定义的回顾长度是音乐的特定流派或拍号(time signature)所共有的而选择这些预定义的回顾长度。因此,仅考虑预定义的回顾长度,从而减少了生成音乐所需的计算次数并且也提高了所生成的音乐的质量。例如,对于4/4拍的音乐片段,预定义的回顾长度可以是0.5、0.75、1、1.5、2、3、4、8和16,这将产生基于4/4拍号而具有音乐意义的重复。

作为示例,假设预定义的回顾长度仅为1和2。

因此,并且参照从图2的音乐数据识别的重复列表,从重复列表中删除在四分音符205处重复的对应于四分音符202的、回顾长度为3的音长重复,因为回顾长度3不是预定义的回顾长度之一。

在步骤s402处,将重复列表中的音长重复按照重复时长再按照回顾长度从高到低排序。

例如,对表2的音长重复应用步骤s401和s402得到下面的表4所示的重复时长和回顾长度的顺序(假设预定义的回顾长度仅为1和2)。

Figure BDA0002591898680000171

表4

在可选的步骤s403处,删除交叠的音长重复。这种交叠的音长重复可以部分交叠,并且也可以包括完全包含在另一音长重复中的音长重复。删除交叠的音长重复包括:删除列表中符合下述条件的所有音长重复:其所具有的至少一个重复音符也是作为该有序列表中排位较高的音长重复的一部分的重复音符。可以通过从列表中移除重复位置值的重复条目来删除某些交叠的音长重复,使得列表中较低的条目被删除。可以使用许多其他方式来移除重复交叠,使得不存在或存在较少的交叠。例如,将步骤s403应用于表4,除了对应于四分音符(204,205)→(202,203)和203→202的音长重复外的所有音长重复都被删除。

在步骤s404处,删除重复列表中不具有匹配的音长重复的音长音程重复。在以下情况下,给定的音长音程重复具有匹配的音长重复:重复列表包括其音长重复回顾长度等于音长音程重复回顾长度的音长重复、重复时长相等、并且所有的音长音程重复音符也是给定的音长重复的重复音符。

可选地,接下来可以进行步骤s405和s406。在步骤s405处,将重复列表中的音长音程重复按照音长音程重复时长、然后按照音长音程重复位置值、再按照音长音程重复回顾长度从高到低排序。

在步骤s406处,删除交叠的音长音程重复。这可以使用与以上在步骤s403中针对音长重复使用的技术相同的技术来实现,或者可以使用任何其他方法使得交叠的音长音程重复被删除。

虽然回顾长度被用作示例过滤标准,但可以根据所期望的结果来使用其他过滤标准。

然后,存储重复列表以在下一阶段中使用。

·将音乐数据划分成帧,s305

返回至图3,在步骤s305处,在对音乐的每个音符进行评估以确定其是音长重复的一部分还是音长音程重复的一部分还是自由音乐的一部分之后,将音乐数据划分成“帧”。

音乐数据以音乐节的形式存在,其中,如将理解的,所有节具有基于音乐数据的拍号的固定的节时长。然而,可选地,音乐数据可以包括具有不同节长度的音乐节。帧是音乐节的一段或一部分,其中所有帧具有相同的固定帧时长。具体地,在该示例中,每个帧的时长是十六分音符,但是时长可以更短或更长,例如分别为三十二分音符或八分音符。如将理解的,当帧时长是十六分音符时,4/4拍的音乐节包括16个帧。

每个帧与音乐数据的音符(可以是休止音符)交叠。交叠的音符是与该帧相关联的音符。例如,图5示出了4/4拍的一个音乐节501,其已被划分成由虚线隔开的十六个帧506。该音乐节包括四个音符:附点四分音符、接着是八分音符、接着是第一四分音符、接着是第二四分音符。该节也被划分成帧组合502至505,其中,每个帧组合中的帧与音符之一相关联。如可以看出的,六个帧的组合502对应于附点四分音符的音长,两个帧的组合503对应于八分音符的音长,四个帧的组合504对应于第一四分音符的音长,并且四个帧的组合505对应于第二四分音符的音长。

每个帧具有定义其相对于音乐数据的位置的位置标签值。位置标签值通过帧相对于音乐片段的开始的开始时间(以四分音符的倍数表示)来确定。例如,第一帧的帧位置标签值为0;第二帧(假设帧时长为十六分音符)的帧位置标签值为0.25;并且第二节的第一帧(假设为4/4拍)的帧位置标签值为4。定时可以以其他固定音符音长的倍数表示,例如八分音符的倍数。

·对帧加标签,S306

在步骤s306处,用在步骤s301至s305中累积的数据对每个帧加标签。

用以下数据对帧加标签:

1)音长重复标签和回顾标签。如果按照重复过滤之后的重复列表所确定的那样,与帧相关联的音符是音长重复的重复音符,则赋予此帧音长重复标签“真”和等于该相关联音符的回顾长度的回顾标签。否则,赋予此帧音长重复标签“假”和空值回顾标签。

2)可选地,音长音程重复标签。如果与帧相关联的音符也是音长音程重复的重复音符,则赋予此帧音长音程重复标签“真”。否则,赋予此帧音长音程重复标签“假”。

3)可选地,移调标签。如果音长音程重复标签为“真”并且相关联音符的音程移调值为“真”,则赋予此帧移调标签“真”。如果音长音程重复标签为“真”并且相关联音符的音程重复移调值为“假”,则将移调标签设置为“假”。否则,将移调标签设置为空值。

音长重复标签被设置成“假”的帧是与音乐数据中被认为不是重复的一部分的音符对应的帧。这样的音符被称为自由音乐。

如所提及的,在将会使用神经网络来提供其他结构特征的重复的概率的情况下,所分配的具体标签将是不同的。例如,如果神经网络将被用于识别某些运音法的重复,则标签可以是断音标签、连音标签、重音标签或任何其他标签,同样,这些标签的值为真或假。任何类型的重复结构都可以基于对该重复结构加标记来识别。

·生成向量,s307

在步骤s307处,生成一个或更多个向量以用向量格式表示步骤s306的标签。每个帧由单个向量表示。

每个向量可以是分成子向量的长向量。换言之,每个向量可以是多个子向量的串联。每个子向量可以是one-hot子向量。每个子向量视情况包含步骤s306的帧标签。

例如,第一子向量可以由以下给出:

[f,d,dirt,dint]

其中,第一子向量的每个位指示音乐的给定帧属于以下四个类别中的哪个类别:(1)f——自由音乐;(2)d——音长重复;(3)ditr——带有移调的音长音程重复;(4)dint——没有移调的音长音程重复。如以上所提及的,识别移调可以是可选的,并且在这种情况下,(3)将变为di——音长音程重复。此外,第一子向量可以仅指示类别(1)和(2),即,指示音乐帧是自由音乐还是音长重复。

示例第二子向量可以由以下给出:

[f,l0.5,l0.75,l1.0,l1.5,l2.0,l3.0,l4.0,l8.0,l16.0]

并且示例第二子向量包含指示回顾长度的位。在这种情况下,使用按照四分音符量化的回顾长度0.5、0.75、1.0、1.5、2.0、3.0、4.0、8.0、16.0,因为这些回顾长度适合于具有4/4拍号的音乐。然而,可以使用任何回顾长度,并且任何数量的不同回顾长度可以具有相关联的位。事实上,第二子向量可以仅包含用以指示单个回顾长度的单个位(例如,[f,l2.0])。

可选地,还可以包括与帧的“节拍强度”有关的第三子向量。因此,“节拍强度”也可以被视为“帧强度”。节拍强度用于描述该特定帧在音乐上下文中的“强度”。如将理解的,在音乐理论中,节中的不同节拍具有不同的音乐强度。例如,在被划分成十六个十六分音的帧的节中,第一节拍(帧)最强,第九节拍第二强,节拍5和13第三强,节拍3、7、11和15第四强,并且其余的偶数编号的节拍最弱。这种对于较强和较弱节拍强度的确定基于既有的音乐理论,并且根据节的长度和拍号变化。

为了进一步说明该概念,针对包含16个十六分音符的4/4节考虑两个特定示例。

示例1:基于节的固定节拍强度

在这种情况下,每个4/4节有相同的节拍强度序列,通常第一个节拍(第1帧)有一个值(例如0),第3个四分音符节拍(第9帧)有一个值(例如1),第2个四分音符节拍和第4个四分音符节拍(第5帧和第13帧)有一个值(例如2),其间的十六分音符有相同的序列(在这种情况下为4 3 4)。这将使得每个节有像这样的序列(强度等级0到4,0是“最强”节拍):

0 4 3 4 2 4 3 4 1 4 3 4 2 4 3 4

这是为了反映以下事实,对于4/4节的四个四分音符节拍,韵律强度如下:

强(0) 弱(2) 半强(1) 弱(2)

示例2:超节拍强度(超BS)

这是上述节拍强度(固定节拍强度)与每个节具有自己的整体强度值这一概念的结合。结果是,由于“节强度”的影响,每个帧的节拍强度值被调整。特别地,每个节的第一帧被改变成等于该节的节强度,并且其余帧也被调整。

例如,8节循环的节强度可以是:

使用下面的方法,所产生的第一节中每一帧的超节拍强度因此为:

现在将说明对于该超节拍强度的推理。换一种说法,除了各个节内的节拍强度之外,还引入了节强度或“小节强度”的概念,将节拍强度的概念扩展到节本身。例如,对于划分成16个十六分音符使得节中的16个帧的节拍强度将分别为0 4 3 4 2 4 3 4 1 4 3 4 24 3 4的节,可以应用同样的构思。例如,要生成时长为8节的旋律,这8个节将具有节强度03 2 3 1 3 2 3。为了将这两个特征结合成指示帧位于8个节的系列中的位置(节强度)以及该帧在每个节的16个帧中的位置(节拍强度)的单个编码,进行以下操作:

1.用节强度对每个节的第一帧进行编码;

2.通过将每个帧的节拍强度偏移所述节的最大节强度值(即,该情况下为3)的方式对节中的每个其他帧进行编码。

因此,对于第一节,超节拍强度(节强度和节拍强度的组合)将是:

0 7 6 7 5 7 6 7 4 7 6 7 5 7 6 7

...并且对于第二节,超节拍强度将是:

3 7 6 7 5 7 6 7 4 7 6 7 5 7 6 7

...并且对于第三节,超节拍强度将是:

2 7 6 7 5 7 6 7 4 7 6 7 5 7 6 7

...等等。

因此,超节拍强度方法使每个节的第一帧等于与该节的节强度相同的值,然后将每个节的所有其他帧偏移该节循环中的节的节强度的最大值。在以上8节循环的情况下,最大节强度值是3,并且因此使所有帧(除了每个节的第一帧)的节拍强度值增加3。注意,这些仅是如何将节拍强度和节强度一起编码的说明性的而非详尽的示例,而且使用的节强度、最大节强度和节拍强度可以不同。

虽然以上示例示出了节强度值被应用于循环中的每个节,但节强度可以仅影响循环中的节的子集。例如,采用8节循环,对于第1节和第2节可以使用0与3之间的节强度值,并且对于该8节循环的其余节(例如,第3+节),可以按其原样使用平常的节拍强度。

将向量分配给音乐片段的节内的帧(其中向量包括表示该帧的强度的强度值)在其他情境中也有应用,例如训练旋律生成器或其他基于ML的音乐信息生成器。

如前面讨论的,在步骤s307处输出的多个向量被用作神经网络的输入以训练该神经网络。

在实践中,将使用许多不同的音乐数据集来训练神经网络以使神经网络得到更良好的训练。通过仅针对某一音乐流派或风格来训练神经网络,该神经网络可以特定于该音乐流派或风格,或者可以针对不同的音乐流派和风格来训练神经网络。神经网络可以被训练成识别可以在音乐中发现的任何种类的重复结构。

现在将结合图6描述图3的步骤的更复杂的示例。首先,确定音乐数据的每个音符的参数值并且进行标注(步骤s301)。接下来,识别所有音长重复和音长音程重复(步骤s302和s303)。音符606、607和608的系列由音符612、613和614的系列重复。因此,音符612、613和614的系列是音长重复。该音长重复的时长为5.5,位置值为8,并且回顾长度为8。在图6的示例音乐数据中,还存在其他的音长重复。音符607是音符606的音长重复,其时长为2,位置值为2,并且回顾长度为2。音符611是音符610的音长重复,其时长为1,位置值为7,并且回顾长度为1。音符612是音符607和音符606二者的音长重复,其时长为2,位置值为8,并且回顾长度分别为6和8。此外,音符613是音符612、607和606中每一个的音长重复。音符614是音符608的音长重复,其时长为1.5,位置值为12,并且回顾长度为8。

还存在若干音长音程重复。音符607和608的系列由音符613和614的系列重复。由于音符613和607具有相同的音程值(+1),因此这是音长音程重复。该音长音程重复的时长为3.5,位置值为10,并且回顾长度为8。此外,音符613是音符607的音长音程重复(音程值+1,时长2,位置值10,回顾长度8),并且音符614是音符608的音长音程重复(音程值+1,时长1.5,位置值12,回顾长度8)。

在重复过滤步骤s304处,按照图4的步骤阐述的那样删除音长重复和音长音程重复中的一些。

在步骤s305处,如先前所述将音乐数据划分成多个帧。

在步骤s306处,如先前所述对帧加标签。例如,假设回顾长度8是预定义的回顾长度,则与音符612、613和614的系列对应的帧将被标记有音长重复标签“真”、音长音程重复标签“假”、回顾长度8和移调标签空值。

在步骤s307处,针对被标记的帧生成向量标签将该向量用作用以训练神经网络的训练向量。

生成音乐数据

图1示出了生成新音乐数据的迭代方法。特别地,图1的某些步骤可以重复进行以不断地将音乐数据添加到现有的音乐数据中或者添加到在该方法的上一次迭代中生成的音乐数据中。在神经网络的背景下,关于现有的或者先前生成的音乐数据的数据可以包括结构神经网络的内部状态数据,该内部状态数据根据现有的或先前生成的音乐数据而确定。同样,可以在该方法的每次迭代时基于在该迭代结束时选择的新的音乐数据(例如,新的音符)对内部状态数据进行更新,以为下一次迭代做准备。音乐数据可以包括要在一个或更多个相应时刻输出的一个或更多个输出。例如,音乐数据可以包括一个音符或一系列音符,每个音符对应于要在由这一系列音符限定的特定时间点处输出的输出。

音乐数据的生成可以基于预先存在的音乐数据,或者可以包括音乐数据的第一音符的生成。换言之,音乐数据的生成可以是用以添加到现有的音符系列中的一个或更多个音符的生成,或者可以是新的音乐片段的第一音符的生成。优选的是,两者可以一起使用,使得音乐数据的生成既包括该音乐片段的第一音符的生成,也包括一个或更多个后续音符的生成。

在必须生成音乐数据的第一、起始音符的情况下,这可以以各种方式实现。可以用固定的、预定义的音高和音长来生成起始音符。替选地,可以从包括有与多个音符相关联的概率阵列的旋律概率阵列中选择第一、起始音符。音符的选择可能受限于一定的范围,例如两个八度。

·生成旋律概率阵列,s101

在生成新的音乐数据时,在步骤s101处生成旋律概率阵列。旋律概率阵列包括新的音符音高值,其中每个新的音符音高值具有至少一个相关联的新的音符音长,每个音高值与音符音长组合具有相关联的旋律概率值。该概率值可以基于音乐数据。具体地,旋律概率值可以基于音乐数据的至少一个在前音符的音高值和/或音长值,并且可以基于所有在前音符的音高值和/或音长值。在前音符可以是紧邻在前的音符或者任何其他在前音符。

替选地,旋律概率值可以不基于任何在前音符(或任何在前的音乐数据),并且可以是针对每个新音符的固定概率或随机概率。在这种情况下,旋律概率阵列可以是音符和每种音高与音长组合的概率的预定义列表。特别是在选择音乐数据的起始音符的情况下可以使用该旋律概率阵列。

新音符音高值描述音符的音高。例如,旋律新音符音高值可以是C4、E5、F#5等,如将理解的,其中字母指定音高级别并且数字指定八度。新音符音长采用音符的音长值例如十六分音符、半分音符、四分音符、附点四分音符等。可以相对于四分音符的音长来量化新音符音长,四分音符的音长为1。旋律概率值是新音符具有某一音高值和某一音长的概率。

旋律概率阵列可以由旋律生成器生成,其中旋律生成器包括神经网络,例如已被训练成基于音乐数据中被识别的音符的音长和音高来生成旋律概率阵列的递归神经网络。这样的旋律概率阵列可以由被训练成基于在前音符的音长和音高提供新音符的音长和音高的概率的神经网络生成。在前音符可以是紧临在前的音符或任何其他在前音符。

例如,在RNN的情况下,旋律概率阵列的概率分布可以以整个过往音符的序列为条件。构成音乐上有说服力的音符序列的是旋律生成器在训练中获得、并且被封装在旋律生成器在训练中根据旋律训练数据集确定的一组模型参数中的知识(并且该知识将取决于旋律生成器所接触的旋律数据的类型)。注意,旋律生成器的学习目标与结构生成器的学习目标不同:旋律生成器被训练成学习如何以音乐方式生成音符序列,而不考虑音乐的整体结构,但结构生成器被训练成学习生成音乐结构——本质上是音乐片段中连续或不连续的乐节(例如,节)之间的相似性。

为了实现这一点,可以使用包括具有针对每个帧的音高和音长的标签的训练向量的输入来训练旋律生成器的神经网络,并且可以基于这些训练向量将神经网络布置成在给定在前音符的音高和音长的情况下输出下一音符的音高和音长的概率阵列。作为示例,对于给定的在前音符A,经训练的神经网络可以提供下一个音符是A、B、C、D或E中的一个的概率,这些音符中的每一个具有特定概率,该概率基于神经网络在训练向量中观察到的音符进展。作为另一示例,对于给定的一系列在前音符A、B、C,经训练的神经网络可以提供下一个音符是A、B或C的概率。虽然神经网络被训练成基于在前音符提供概率,但神经网络仍可以通过简单地将空值输入网络并且从结果阵列进行采样来提供音乐数据的起始音符的概率阵列。例如,可以使用以下关于表5的阵列描述的音符的选择。

替选地,旋律概率阵列可以由一组预定义规则生成,这些预定义规则基于在前音符的音长和/或音高来确定概率。例如,如US 9,361,869B2的第7列第28行至第65行中所阐述的,可以使用如图7所示的概率阵列。图7中的每个p表示单独的概率。这些概率中的每个概率可以与阵列中的其他概率不同,或者可以等于阵列中的其他概率中的一些或全部。图7中的每行概率p表示在给定在前数据对象(音符)的特定音长的情况下要使用的概率集合。图7中的每列概率表示针对正在生成的数据对象(音符)将选择某一特定音长的概率集合。作为示例,可以使用与各种结果相关联的加权来选择图7的旋律概率阵列的概率,如下面关于表5的阵列描述的。为了确定正在生成的音符的音长,基于在前音符的音长选择概率阵列中的一行。例如,如果在前音符的音长是2,则选择第四行。概率阵列中被选择的行表示下一个音符的不同的可能音长的各种可能性。可以针对正在生成的音符选择特定的音长。也可以利用与图7的阵列类似的特定于音高的阵列使用同样的处理来选择音符的音高。

可以使用其他规则和选择方法代替与图7相关的以上方法。例如,概率阵列可以包含基于多于一个在前音符或事实上所有在前音符的音高和/或音长的概率。对阵列中概率的选择也可以以确保较高概率音高/音长与比较低概率音高/音长更可能被选择的任何其他方式来实现。

因此,旋律概率阵列提供每个可能的新音符音高和音长(包括休止音符)的旋律概率值。为了实用性,可能的新音符可以被限制为在前的一个或多个音符的某个八度范围内的音符。

在实施方式中,音乐数据包括至少一个音符,并且在步骤101处,生成旋律概率阵列以输出要添加到音乐数据的音符的概率阵列。作为音符将被添加到的音乐数据的示例,将再次讨论图6的音乐数据。虽然之前关于训练神经网络已经讨论了图6,但此处仅将图6作为音符要被添加到的音乐数据的示例来进行讨论。如先前所述,节602包括A4二分音符606,接着是B4二分音符607。节603包括C5附点四分音符608,接着是G4八分音符609,接着是F4四分音符610,接着是G4四分音符611。节604包括A4二分音符612,接着是B4二分音符613。不完整的节605包括C5附点四分音符614。图6的标注615表示要被添加到音乐数据中的新音符的位置。

基于图6的音乐片段,旋律概率阵列输出针对新音符的多个概率。例如,旋律概率阵列可以包括与第一音符音高值为G4且音符音长为八分音符(即,0.5个四分音符)相关联的第一旋律概率值0.6;与音符音高值为G4且音符音长为八分音符相关联的第二旋律概率值0.1;以及与音符音高值为F4且音符音长为八分音符(即,0.5个四分音符)相关联的第三旋律概率值0.3。在下面的表5中示出了这样的旋律概率阵列。

表5

可以按照例如Jukedeck Ltd.名下的US 9,361,869B2中阐述的那样实现基于以上示例旋律概率阵列(由神经网络生成或基于预定义规则生成)进行音符选择。以上概率阵列表示三种不同的结果:G4八分音符、G4四分音符和F4八分音符。概率列表被分配有表示所列出的概率的数字。对于以上列出的概率,数字0.6、0.7和1.0可以分别被分配给以下结果:G4八分音符、G4四分音符和F4八分音符。为了选择这些结果中的一个,生成0与1之间的随机数。将该随机数与概率阵列中的每个分配的数字进行比较,并且选择对应于比随机数大的第一个分配数字的结果。例如,如果生成的随机数是0.85,则由于1.0是大于0.85的第一个数字,因此选择F4八分音符为结果。因此,概率阵列是与各种结果相关联的权重。可以看出,在以上示例中,结果G4八分音符是最可能的结果,因为0与0.6之间的任何随机数都会导致选择G4八分音符。

然而,根据旋律概率阵列进行音符选择可以通过多种方法实现,并不限于以上方法。可以使用从具有不同概率的对象阵列中选择对象的任何方法,如将理解的,其中具有较高概率的对象比具有较低概率的对象更频繁地被选择。例如,如本领域所公知的,可以使用逆变换采样。

以上选择方法也可以用于选择起始音符,唯一不同的是,由旋律概率阵列提供的概率阵列不是基于现有的音乐数据。例如,以上列出的概率可以是随机的或固定的,也可以像所描述的那样通过向神经网络提供空输入来输出。

·记录结构历史,s102

作为步骤s102,记录描述在前音符的音乐数据的结构历史。结构历史是包含帧标签的一系列向量(其中,如上所述,每个向量可以进一步分成子向量),这些向量和帧标签包含的信息类型与在使用训练数据进行的训练过程中这些向量和帧标签所包含的信息类型相同。然而,在训练过程中向量表示训练数据的结构,在图1的音乐生成过程中,向量表示生成的音乐数据的结构。

在实施方式中,音乐数据对应于音乐片段的第一、起始音符,起始音符是使用上述方法中的任何方法生成和选择的。在该实施方式中,步骤s102发生在生成新音乐数据的第一、起始音符之后。表示新音乐数据所需的向量数量被添加到结构历史中。在步骤s102处,通过识别表示起始音符的帧数量并且将每个帧添加到结构历史以作为对应向量来记录结构历史。每个对应向量的格式与关于图3的步骤s307描述的向量的格式相同。例如,在一帧的时长为十六分音符的情况下,如果音乐数据对应于音长为1.5个四分音符(即,附点四分音符)的起始音符,则识别出6个帧。由于已经识别出6个帧,因此这些帧在其对应的向量中被标记为自由音乐,因为此时没有识别到结构重复。因此,在结构历史中记录作为自由音乐的6个向量。

将帧标记为自由音乐的一种方式可以是:对向量中的任何结构标签(例如音长重复标签)分配空值。替选地,可以将向量中的特定的自由音乐标签赋值为真。事实上,可以使用许多其他方式将帧标记为对应于自由音乐。

如稍后将描述的,在音乐数据对应于音乐片段的第一、起始音符的情况下,仅基于该音乐数据执行一次步骤s102。在步骤s102之后对结构历史的任何后续更新和记录通过步骤s107处理。

替选地,在另一实施方式中,在音乐数据对应于不使用图1的步骤生成该音乐数据而提供的多个音符的情况下,记录结构历史包括:执行图3的步骤s301至s307以得到用于记录结构历史的向量列表。换言之,识别并标注音乐数据的参数值、识别重复、可选地对重复进行过滤、将数据划分成帧并进行标记、以及针对帧生成向量。在这种情况下生成的向量是在前音符的帧的向量,并且这样的向量表示在前音符的音乐数据的结构。同样,在该步骤之后对结构历史的任何后续更新和记录通过步骤s107处理。

一旦记录了结构历史的向量,则将其用作对结构神经网络的输入,以用于进行当前迭代以生成结构概率阵列,如将在下面描述的。因此,结构历史的向量可以直接用于更新在音乐生成过程中使用的结构神经网络。替选地,可以将结构历史的向量存储在计算机存储器中的数据库中。

虽然在图1中步骤s102被示为在步骤s101之后,但这些步骤的顺序可以相反,或者事实上它们可以是同时的。

·生成结构概率阵列,s103

在步骤s103处,由结构生成器生成基于音乐数据的结构概率阵列。这样的输出可以被称为偏置输出,因为其被用于将旋律生成器的概率朝向结构的重复偏置。可以基于以下中的一者、两者或全部来生成当前迭代中的偏置输出:初始音符序列中的一个或更多个音符(例如,如在前次迭代中选择的、序列中的最近的一个或多个音符)或在当前迭代中在输入处接收的针对所述一个或多个音符确定的一个或更多个向量;神经网络的内部状态的数据;以及在前次迭代中结构生成器的输出的数据。如所述的,向量可以表示由与其有关的音符所隐含的音乐结构。

在这方面,需注意,虽然“初始音符序列”可以指初始音符序列中的一个或多个音符,但也可以指根据其中的一个或多个音符得到的数据,例如内部状态或较早的输出(或两者/全部三者的组合),即,受音符影响的数据。

可以使用基于将s102的结构历史向量用作输入的经训练的神经网络来生成结构概率阵列。结构生成器输入可以接收目前音乐片段的一个或多个音符的数据(例如,针对音符中的一个或更多个音符确定的一个或多个向量),基于该数据,在该方法的当前迭代中生成偏置输出。具体地,结构生成器可以接收如先前描述的针对初始音符序列(即,目前的音乐片段)确定的一个或更多个向量,基于这些向量,在当前迭代中生成偏置输出。

在每个时间点处,可以存在到结构生成器的两个输入:

(1)由旋律生成器生成的最近的旋律音符所隐含的音乐结构,该音乐结构呈一个或更多个向量的形式(即,以结构生成器熟悉、并且在其自身的训练阶段使用的数据集中使用的编码表示的一个或更多个向量——参见上文)。在结构生成器和旋律生成器两者外部可以存在中间翻译步骤,该中间翻译步骤将由旋律生成器生成的音符和该音符隐含的音乐结构的要素(如回顾为8的音长重复、回顾为16的音长音程重复或其他重复类型——参见下文)翻译成可以由结构生成器解译的特征向量。

(2)结构生成器的自身内部状态(其可以包含一个或更多个或所有先前生成的旋律音符所隐含的音乐结构的知识)。

替选地,经训练的神经网络可以实际上不以音符或向量作为输入。相反,神经网络可以仅依赖于其在前次迭代中的输出,并且将该输出与其内部状态一起用作当前的输入。

结构生成器提供结构概率阵列作为偏置输出,以用于将旋律生成器生成的概率偏置以增加新的音乐数据是先前音乐数据的重复的可能性。

使用经训练的神经网络来生成结构概率阵列。步骤s102的结构历史的向量被用作对神经网络的输入。根据此时由音乐数据描述的音符数量,结构历史可以例如包括与具有一定音长和音高的单个音符对应的一个或更多个向量或者与各自具有一定音长和音高的一系列音符对应的多个向量。

首先,向结构神经网络提供组成结构历史的一个或更多个向量。基于结构历史的向量,神经网络输出关于序列中的下一帧的标签的每种可能组合(可选地仅针对预定义的回复时长)的概率阵列(结构概率阵列)。使用目前讨论的示例标签,因此,由神经网络输出的阵列包含以下标签的每种组合在下一帧中存在的概率:

·音长重复标签为真

·音长重复标签为假

·可选地,音长音程标签为真

·可选地,音长音程标签为假

·回顾长度标签,可选地仅针对预定义的回顾时长中的每一个

·可选地,移调标签为真

·可选地,移调标签为假

阵列中与回顾至音乐数据开始之前的回顾或者不回顾至音符的开始的回顾对应的条目被删除。

在音乐数据仅对应于起始音符(即方法的第一次迭代)的情况下,结构历史仅是被标记为自由音乐的向量。基于这些输入向量,在所有在前的向量/帧都被标记为自由音乐这一事实的基础上,神经网络输出关于序列中的下一帧的标签的每种可能组合的概率阵列(结构概率阵列)。替选地,在这种情况下可以使用零向量作为输入,条件是其不与关于数据的任何假设相冲突,或者可以使用默认的初始输入。

继续进行到步骤s103,结构历史中的向量被用作对经训练的神经网络的输入,经训练的神经网络输出/生成关于音乐中的下一帧的结构概率阵列(偏置阵列)。同样,使用图6的示例仅作为音符可以被添加到的音乐数据的示例,该示例是帧615。例如,经训练的神经网络可以输出包括有在下表6中列出的所分配的概率的结构概率阵列。

表6

可以替选地或附加地(也可能主要地)在当前迭代中基于在前次迭代中结构生成器的输出来生成偏置输出。所述输出可以包括在前次迭代中生成的偏置输出。

·修改旋律概率阵列中的概率,s104

在步骤s104处,通过将结构概率阵列中的一个或更多个概率与旋律概率阵列中的概率相结合来修改或偏置旋律概率阵列中的概率。如先前所描述的,结构概率阵列是标签和相关联的概率的列表,例如表6所示那样。

可以确定满足结构概率阵列中的标签的一个或多个音符。在图6的示例中并且在生成针对帧615的标签的情境下,参考表6的标签组合,按照从表的顶部的组合开始的递降顺序,第一标签组合对应于G4八分音符音符609,并且由任何音高的八分音符满足(因为音长音程重复标签为“假”);第二标签组合对应于F4四分音符音符610并且由任何四分音符满足;第三标签组合对应G4四分音符音符611并且由任何四分音符满足;第四标签组合对应G4八分音符音符609并且由G八分音符满足(在任何八度中,以满足具有相同音程值的要求);第五标签组合对应自由音乐并且由不是音长重复或音长音程重复的任何音符满足。

由于已经确定结构概率阵列分配给帧615的音符的各种可能的音长或音长和音高的概率,因此这些概率被用来影响由旋律生成器提供的概率以使得由旋律生成器提供的每个音长与音高组合的概率得到调整。如以上所提及的,旋律生成器提供包括有新的音符音高值的旋律概率阵列,其中每个新的音符音高值具有相关联的新的音符音长和相关联的旋律概率值。旋律概率阵列的概率与结构概率阵列中的一个或更多个概率结合(换言之,由结构概率阵列中的一个或更多个概率偏置)以提供经修改的旋律概率阵列。这些概率可以以多种方式结合以实现该结果。

例如,对于给定的旋律概率阵列,使用旋律概率阵列中的满足结构概率阵列的某个标签组合的音符数量来修改该标签组合的概率。

作为示例,假设旋律概率阵列提供了以下音符的概率:G4八分音符、A5八分音符、F4四分音符和E5四分音符。还假设结构概率阵列提供了标签组合音长重复为真、回顾长度为2的概率为0.7。最后,假设对应于回顾长度2的音符的音长为1,即原始音符是四分音符。在该示例中,旋律概率阵列已经提供F4和E5两个四分音符的概率。相应地,在这种情况下,将由结构概率阵列提供的特定标签组合的概率0.7除以四分音符的数量2,得到下一个音符音长为1(四分音符)的共享的结构概率为0.35。换言之,将标签组合的概率除以满足该组合的(旋律阵列的)音符的数量。

然后将每个四分音符(无论音高如何)的旋律概率值与共享的结构概率相乘,从而生成针对这些给定音符的经修改的旋律概率值。对旋律概率阵列中的每个音符应用同样的过程。由于已确定旋律阵列中的每个音符音长的结构概率,因此旋律概率阵列中的每个音符应用同样的过程使得旋律概率阵列中的每个音符的概率与一定概率值相乘。因此,虽然所有的旋律概率都被减小(因为每个共享的结构概率小于1),但是与具有较高的共享结构概率的音符相比,具有较低的共享结构概率的音符的概率减小的程度更大。

例如,旋律概率阵列最初可以对两个不同的音符音长分配相同的概率值,使得这两个音符音长有同样的可能成为下一个音符。然而,如果结构阵列已经向一个音符音长分配了比另一个音符音长的共享结构概率值高的共享结构概率值,则在相乘之后这两个音符音长将具有不同的概率。因此,具有较高概率的音符音长更有可能被选择为下一个音符的音符音长。

替选地,经修改的概率阵列可以被生成为多个概率值的总和。该总和可以是加权和,其中,重复类型概率中的每个由产生该类型的重复音乐结构的音符的累积概率的倒数加权。作为另一替选方案,可以使用多个概率的最大值。

以上仅是将两个概率阵列相结合的一些示例方法。可以使用任何其他方法使得一个阵列中的概率影响到另一阵列中的概率,而且以上说明的特定方法并非必要。下面提供更详细的示例。

·从经修改的旋律概率阵列中选择新的音符音高和音长,s105

在步骤s104,从经修改的旋律概率阵列中选择具有新的音符音高值和新的音符音长值的新音符。可以以任何方式从经修改的旋律概率阵列中选择新音符,例如,像之前关于所讨论的表5的阵列所阐述的那样,使用与随机数相结合的加权方法。作为示例,可以对经修改的旋律概率阵列进行采样以选择新的音符,或者可以通过选择具有最高概率的一个或多个向量来简单地选择新音符。替选地,可以使用能确保具有较高概率的音符比具有较低概率的音符更有可能被选择的任何其他方法来选择新音符。

由于经修改的概率阵列被结构阵列的概率偏置,因此,如果基于用来训练结构网络的训练数据得知此时提供的情况指示预期存在某一先前音符的要素的重复,则可以增大新音符具有的要素是该先前音符的要素的重复的可能性。

·添加音乐数据,s106

在步骤s106处,将新音符添加到音乐数据中,其中新音符具有所选择的新音符音高值和新音符音长值。具体地,将新音符依次添加到音乐数据中的现有音符序列中,使得在序列中接下来出现该新音符。步骤s106还可以包括:输出音乐数据的位于音符序列中的各个位置的音符。第一音符可以提供输出的第一部分,并且后续音符可以提供输出的后续部分。定义音符的音乐数据可以表示音频数据或MIDI数据,并且输出音符可以包括播放音频数据或MIDI数据。替选地,输出音频数据或MIDI数据可以是存储音频数据以供播放或者存储MIDI数据。

·更新结构历史,s107

在新音符被添加到音乐数据后,必须通过向新音符分配一个或多个向量来更新结构历史。以这种方式,结构历史是最新的并且可以被用作对结构神经网络的输入以允许重复该过程,如下面所讨论的。在步骤s107处,通过向结构历史添加表示新音乐数据的结构的新向量来更新结构历史。

为了向结构历史添加新向量,必须首先确定这些新向量应该包含的帧标签。这可以通过修改步骤s103的结构概率阵列以创建经修改的结构概率阵列来实现。为了创建经修改的结构概率阵列,步骤s103的结构概率阵列中的与所选择的新音符音高值和新音符音长值不兼容的任何标签组合被移除。以这种方式,经修改的结构概率阵列不包含表示新音符不能被认为是其中一部分的重复的任何标签组合。

用于生成结构阵列的神经网络可以包括具有内部状态的至少一个有状态组件,在该方法的每次迭代时基于每次迭代结束时的内部状态和在前次迭代中选择的一个或多个音符所隐含的音乐结构来更新内部状态。也就是说,可以基于有状态组件的当前内部状态(即,迭代结束时有状态组件的状态)和(间接地)刚刚被选择/添加的一个或多个音符来确定有状态组件的新内部状态。

在图6的示例中,并且在已经生成针对帧615的新音乐数据的背景下,假设帧615处的生成的音乐数据是G4八分音符。在该实例中,如果步骤s103的结构概率阵列包含其中音长重复标签为“真”、音长音程重复标签为“真”、回顾长度为8且移调标签为“假”的标签组合,则该标签组合将被保留在经修改的结构概率阵列中,因为该标签组合表示G4八分音符609的重复,这与生成的G4八分音符一致。然而,如果步骤s103的结构概率阵列包含其中音长重复标签为“真”、音长音程重复标签为“假”且回顾长度为1.5的标签组合,则该标签组合将不被包括在经修改的结构概率阵列中,因为该标签组合表示附点四分音符614的重复,这与生成的G4八分音符不一致。

此时,经修改的结构概率阵列包含与新生成的音乐数据(在该情况下为G4八分音符)兼容的所有标签组合的列表。然而,为了使结构历史是最新的,应当向与新音乐数据对应的帧分配仅一个标签组合。

因此,然后从经修改的结构概率阵列中选择经修改的结构概率阵列的单个标签组合。可以以多种方式选择该单个标签组合。该选择可以基于经修改的结构概率阵列中的标签组合的概率分布。例如,可以使用先前描述的概率加权和关于表5讨论的随机数方法来选择单个标签组合,这使得具有最高概率的标签组合最可能被选择。替选地,可以简单地选择具有最高概率的标签组合。替选地,可以随机选择经修改的结构概率阵列的每个标签组合,不论它们的概率如何。

替选地,可以在不使用经修改的结构概率阵列的情况下选择标签组合。例如,可以根据下述硬编码规则来选择标签组合:选择与被添加到音乐数据中的新音符兼容的标签组合。

一旦从经修改的结构概率阵列中选择了标签组合,则针对新音乐数据的每个帧创建向量,其中每个向量具有与s307处的向量相同的格式,并且所选择的标签组合被存储在每个向量中。然后,这些向量被添加到结构历史中。

现在将提供步骤s104至s107的详细示例。一旦基于上述结构数据集进行了训练,则一起使用结构生成器的神经网络(结构模型Ms)与旋律生成器的神经网络(旋律模型Mm)。在时间t处(即,给定直到时间t生成的音符的历史),模型Mm预测音符集N上的概率分布Pt。同时,给定目前已生成的重复的历史,结构模型Ms预测可能重复集Π上的概率分布Qt,可能重复集Π包括表示“自由音乐”的要素πf。每个音符ν∈N可以与这些重复的子集一致,该子集

Figure BDA0002591898680000342

将总是包括πf,这意味着每个音符都与“自由音乐”一致。结构模型通过根据与每个音符一致的重复的概率修改该音符的概率来影响预测Pt。设函数

Figure BDA0002591898680000343

使得当音符ν在时间t处与重复π一致时否则等于0。据此,可以将表示为

Figure BDA0002591898680000346

并且进一步定义

Figure BDA0002591898680000347

这是与π一致的音符集。然后,向每个音符ν分配权重:

Figure BDA0002591898680000348

其中,以这种方式,当音符ν与被Ms分配有高概率的重复一致时,该音符ν的相对概率增大。值得注意的是,在该示例中,Mm和Ms以不同的时间分辨率工作——分别是音符层面和十六分音符帧层面,并且该差异在此处变得明显。假设音符ν的音长为Δv=τvδ,其中δ是帧时长并且τν是ν所占用的帧的数量。理想地,为了得到对音符ν和重复π的联合概率的准确估计,应该考虑Ms向π的τν个连续帧分配的概率。这将被表示为:

然而,已经发现单步近似法(1)在实践中效果良好,并且计算强度比(2)小。接下来,将权重分布Wt归一化以获得概率分布Rt

Figure BDA0002591898680000352

现在可以从该分布中对采样音符νt,并且用该观测值更新旋律模型Mm的内部状态。还要用一些观察到的重复来更新结构模型Ms的状态。在时间t处采样的音符νt可以被关联有与该音符νt一致的重复中的任何重复。可以通过从上的分布St中对πt进行采样来选择一个音符,分布St被定义为:

此时,两个模型由于工作的时间尺度不同而未对齐,其中Mm比Ms提前τ个十六分音符帧。由于Ms状态的每次更新会使Ms提前正好一个十六分音符帧,因此需要用同一结构向量将Ms反复更新τ次以使其再次与Mm对齐。在上述处理结束时,得到从旋律模型采样的旋律音符,该旋律音符已经经过结构生成器的神经网络影响或偏置。该神经网络也已经根据所采样的音符更新了自身状态,并且准备好影响/偏置下一个音符的选择。

以上详细示例应该被这样对待,并且存在可以实现这些步骤的其他方式,这些方式不需要以上概述的特定步骤和算式。特别地,也可以使用所附附录4.2节中所示的算式,该附录的全部内容通过引用并入本文。

生成另外的新音乐数据——后续迭代

在该方法的后续迭代中,可以重复图1中的部分步骤以生成另外的新的音乐数据,即使音乐片段延续。在每次迭代之后每个后续的新音符可以被添加到现有的音乐数据中以形成新的音乐数据,这可以再次随之进行图1的处理。然而,步骤s102不需要重复,因为在第二次和任何接续的贯彻处理中,由于进行步骤s107,结构历史已经是最新的。因此,在图1的步骤的第一次贯彻执行之后,对于每个接续的处理循环,需要以下步骤:s101、s103、s104、s105、s106和s107。在步骤s103处,对神经网络(如果使用)的输入是在前次贯彻处理中的步骤s107处提供的经更新的结构历史,并且基于该输入生成结构概率阵列。以这种方式,可以通过循环进行图1的一些步骤来向音乐数据添加连续的音符。

图1的步骤的循环/迭代可以在生成预定义长度的音乐时终止,或者可以在基于终止概率的音符生成之后随机终止。例如,图1的循环可以在生成一定数量的音符之后终止,或者在生成一定时长的音乐之后终止。

在整个本说明书中,已经关于某些步骤讨论帧和音符。然而,尽管一些步骤可以具体地与帧或音符有关,但这些步骤是可互换的。例如,步骤s305讨论将数据划分为帧,然而,数据可以按照音符保持,然后音符将在步骤s306处被标记。然后,在步骤s307处生成的向量将是表示音符而不是帧的向量,其中每个音符具有单个对应的向量。作为另一示例,步骤s102处的结构历史可以按照音符来记录,并且在步骤s107处按照音符更新,并且结构概率阵列可以提供下一个音符而不是下一个帧的标签组合概率。作为另一示例,步骤s101处的旋律概率阵列可以包括下一个帧或多个下一帧而不是下一个音符的新音符音高值和音长的概率。可以看出,帧和音符的使用是可互换的,并且在本文所述的方法中,并不是必须使用帧和音符中的一个或另一个。

上述的各种方法可以由计算机程序产品来实现。驻留在装置上的软件是这样的计算机程序产品的示例。计算机程序产品可以包括计算机代码,该计算机代码被布置成指示计算机或装置执行上述各种方法中的一个或更多个方法的功能。用于执行这些方法的计算机程序和/或代码可以在计算机可读介质或计算机程序产品上提供给设备,例如计算机或装置。计算机可读介质可以是暂态的或非暂态的。计算机可读介质可以是例如电子、磁性、光学、电磁、红外或半导体系统或用于数据传输(例如,用于通过因特网下载代码)的传播介质。替选地,计算机可读介质可以采取物理计算机可读介质的形式,例如半导体或固态存储器、磁带、可移除计算机软盘、随机存取存储器(RAM)、只读存储器(ROM)、刚性磁盘和光盘如CD-ROM、CD-R/W或DVD。

诸如计算机或装置的设备可以根据这样的代码被配置成根据本文所讨论的各种方法来执行一个或更多个过程。在一种布置中,该设备包括处理器、存储器和显示器。通常,处理器、存储器和显示器连接至中央总线结构,显示器经由显示适配器连接。该系统还可以包括一个或更多个输入装置(例如,鼠标和/或键盘)和/或用于将设备连接置其他设备或网络的通信适配器。在一种布置中,数据库驻留在计算机系统的存储器中。这样的设备可以采取数据处理系统的形式。这样的数据处理系统可以是分布式系统。例如,这样的数据处理系统可以分布在网络上。

StructureNet:诱发生成的旋律中的结构

Figure BDA0002591898680000382

Figure BDA0002591898680000411

Figure BDA0002591898680000431

Figure BDA0002591898680000451

Figure BDA0002591898680000461

Figure BDA0002591898680000471

48页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:支持不同丢失消隐工具的集合的音频解码器

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!