如何让机器自动生成音乐。一段音乐包括多个音轨,比如吉他、鼓点、贝斯、人生等,这些音轨如何编排使音乐整体和谐是一个比较大的挑战。另外,影响歌曲质量的和弦进行和节奏模式这两个关键因素,如何将它们引入到音乐生成过程同样需要研究。论文提出了一种端到端的旋律与编排生成的框架——小冰Band,它能够生成一段包含若干乐器伴奏的旋律。具体来说,论文提出了Chord based Rhythm and Melody Cross-Generation Model (CRMCG)模型通过和弦进行来生成旋律,另外提出Multi-Instrument Co-Arrangement Model (MICA)模型,使用多任务训练的方法学习多音轨音乐的编排。
在音乐中,和弦是由两个或两个以上的音组成的音高的调和组合,听起来就像同时发声一样。一个有序的和弦序列叫做和弦进行。和弦进行是歌曲中经常使用的,一首歌曲如果遵循一定的和弦模式,通常听起来和谐悦耳。除了上面提到的和弦,节奏模式是流行歌曲的另一个特点。节奏模式可以看作是一个时期内音符的持续时间。这首歌的最后一个特点是编曲,这意味着把其他乐器和旋律结合起来,使整个音乐更具感染力。在流行音乐中,编曲是必不可少的一部分,通常包括鼓、贝斯、弦乐、吉他伴奏的旋律。
问题描述
流行歌曲一般有特定的和弦进行,论文在假设已经给定了和弦进行讨论音乐生成的问题。模型的输入是一个和弦的序列 C = { c 1 , c 2 , . . . , c l c } C=\{c_1, c_2, ..., c_{l_c}\} C={c1,c2,...,clc},每个 c i c_i ci是对应和弦的one-hot表示, l c l_c lc表示和弦序列的长度。模型的目标是产生合适的节奏序列 R i = { r i 1 , r i 2 , . . . , r i l r } R_i=\{r_{i1}, r_{i2}, ..., r_{il_r}\} Ri={ri1,ri2,...,rilr}和旋律的序列 M i = { m i 1 , m i 2 , . . , m i l m } M_i=\{m_{i1}, m_{i2}, .., m_{i_{lm}}\} Mi={mi1,mi2,..,milm}。小冰band可以分成三个部分,(1)数据预处理部分;(2)CRMCG生成单个音轨(3)MICA对多个音轨进行编排(4)演奏部分。论文对第1、2、3部分进行了详细的介绍。
旋律可以分解为一系列音符和对应的音长。对于给定的和弦序列
C
=
{
c
1
,
c
2
,
.
.
.
,
c
N
}
C=\{c_1, c_2, ..., c_N\}
C={c1,c2,...,cN},我们的目标是生成对应的周期序列
P
=
{
p
1
,
p
2
,
.
.
.
,
p
N
}
P=\{p_1, p_2, ..., p_N\}
P={p1,p2,...,pN},每一个周期
P
i
P_i
Pi包含的旋律
M
i
M_i
Mi和节奏
R
i
R_i
Ri都和对应的和弦相关。为了捕获和弦之间的关系,论文使用GRU对和弦序列进行建模。首先对计算和弦序列
C
C
C的Embedding,然后计算通过GRU后embedding的隐藏状态。这些和弦的隐藏状态将用于节奏和旋律的生成。下图是论文中所有符号的定义。
(1)
C
‾
=
E
c
C
,
E
c
∈
R
V
c
∗
d
h
‾
i
,
0
c
=
G
R
U
(
c
‾
i
)
,
i
=
1
,
2
,
.
.
.
,
l
c
\overline{C} = E_c C, Ec \in \mathbb{R}^{V_c * d} \\ \overline{h}_{i,0}^c = GRU(\overline {c}_i), i=1,2,..., l_c \tag{1}
C=EcC,Ec∈RVc∗dhi,0c=GRU(ci),i=1,2,...,lc(1)
节奏生成
新生成的部分和已存在的部分的音乐保持和谐连贯对音乐整体的质量是至关重要的。因此我们需要将前一个period的旋律、节奏信息利用到下一个period部分音乐的生成当中。同样对
R
t
−
1
R_{t-1}
Rt−1和
M
t
−
1
M_{t-1}
Mt−1先做embedding然后通过GRU得到隐藏状态。
(2)
R
‾
t
−
1
=
E
r
R
t
−
1
,
E
r
∈
R
V
r
∗
d
,
M
‾
t
−
1
=
E
m
M
t
−
1
,
E
m
∈
R
V
m
∗
d
\overline{R}_{t-1} = E_rR_{t-1}, E_r \in \mathbb{R}^{V_r * d}, \\ \overline{M}_{t-1} = E_m M_{t-1}, E_m \in \mathbb{R}^{V_m*d} \tag{2}
Rt−1=ErRt−1,Er∈RVr∗d,Mt−1=EmMt−1,Em∈RVm∗d(2)
(3) h ‾ t − 1 , i m = G R U ( { m ‾ t − 1 , i } ) , i = 1 , 2 , . . . , l m , h ‾ t − 1 , i r = G R U ( { r ‾ t − 1 , i } ) , i = 1 , 2 , . . . , l r , \overline{h}_{t-1,i}^m = GRU(\{ \overline{m}_{t-1,i} \}), i=1,2,..., l_m, \\ \overline{h}_{t-1,i}^r = GRU(\{\overline{r}_{t-1,i}\}), i=1,2,..., l_r,\tag{3} ht−1,im=GRU({mt−1,i}),i=1,2,...,lm,ht−1,ir=GRU({rt−1,i}),i=1,2,...,lr,(3)
对上一个period的旋律、节奏的编码做拼接然后通过全连接层的输出作为当前period初始状态,
y
0
=
s
o
f
t
m
a
x
(
s
0
r
)
y_0=softmax(s_0^r)
y0=softmax(s0r),以后的时间步
i
i
i,使用
(
i
−
1
)
(i-1)
(i−1)时间步的状态
s
i
−
1
r
s_{i-1}^r
si−1r和输出
y
i
−
1
r
y_{i-1}^r
yi−1r作为GRU的输入得到i时间步的状态
s
i
r
s_i^r
sir和输出
y
i
r
y_i^r
yir
(4)
s
0
r
=
g
(
W
[
h
‾
t
−
1
,
l
m
m
]
,
h
‾
t
−
1
,
l
r
r
]
+
b
)
,
W
∈
R
b
∗
b
s
i
r
=
G
R
U
(
y
i
−
1
r
,
s
i
−
1
r
)
,
i
>
0
,
y
i
r
=
s
o
f
t
m
a
x
(
s
i
r
)
s_0^r = g(W[\overline{h}_{t-1, l_m}^m], \overline{h}_{t-1, l_r}^r] +b), W \in \mathbb{R}^{b*b} \\ s_i^r = GRU(y_{i-1} ^r, s_{i-1}^r), i>0,\\ y_i^r = softmax(s_i^r)\tag{4}
s0r=g(W[ht−1,lmm],ht−1,lrr]+b),W∈Rb∗bsir=GRU(yi−1r,si−1r),i>0,yir=softmax(sir)(4)
旋律生成:
旋律生成的过程需要使用到上一个period的旋律编码
M
t
−
1
M_{t-1}
Mt−1,刚刚生成的当前period节奏编码
h
r
,
l
r
r
h_{r,l_r}^r
hr,lrr,当前和弦的编码
h
t
c
h_t^c
htc的信息,与节奏生成过程相似,我们将上面三个向量通过一个全连接层的结果做为旋律生成的初始向量。后续
s
i
m
s_i^m
sim和
y
i
m
y_i^m
yim的方法和节奏生成的相同。
(5)
s
0
m
=
g
(
W
[
h
‾
t
,
l
m
m
]
,
h
‾
t
−
1
,
l
r
r
,
h
‾
t
c
]
+
b
)
,
W
∈
R
b
∗
b
s
i
m
=
G
R
U
(
y
i
−
1
m
,
s
i
−
1
m
)
,
i
>
0
,
y
i
m
=
s
o
f
t
m
a
x
(
s
i
m
)
s_0^m = g(W[\overline{h}_{t, l_m}^m], \overline{h}_{t-1, l_r}^r, \overline{h}_t^c] +b), W \in \mathbb{R}^{b*b} \\ s_i^m = GRU(y_{i-1} ^m, s_{i-1}^m), i>0,\\ y_i^m = softmax(s_i^m) \tag{5}
s0m=g(W[ht,lmm],ht−1,lrr,htc]+b),W∈Rb∗bsim=GRU(yi−1m,si−1m),i>0,yim=softmax(sim)(5)
多音轨编排
一首歌曲往往包含多个音轨,比如鼓点、贝斯、管弦和吉他等,为了达到这个目的,论文定义了一种一到多序列生成的任务。不同音轨应是相互关联,比如和弦调性和谐、节奏匹配,乐器之间的音色互补等特性。论文提出的模型能够利用到其他音轨的信息,生成当前音轨的序列。模型基于CRMCG的多乐器共同编排模型(MICA)。给定一段旋律序列,MICA模型的目标在于生成其他多个乐器伴奏的部分。MICA模型如图所示,每个cell能够编码到所有音轨的有效信息,论文提出了两种cell的实现方式。
Attention Cell
应用注意力机制来确定输入中不同部分的重要性。attention cell 能够有效地捕捉到其他音轨生成任务状态中与当前任务有关地部分。注意力机制为每一个任务生成不同的隐藏变量。
h
t
,
k
−
1
i
h_{t,k-1}^i
ht,k−1i表示任务i在period T的第
k
−
1
k-1
k−1个step的隐藏向量。第i个任务和其他任务的在第k-1个时间步隐藏向量通过全连接神经网络得到注意力分数,所有的注意力分数使用softmax网络得到0-1的分布,然后作为权重得到i任务的最终表示
a
t
,
k
i
a_{t,k}^i
at,ki。
(6)
a
t
,
k
i
=
∑
j
=
1
T
a
t
,
i
j
h
t
,
k
−
1
j
e
t
,
i
j
=
v
T
t
a
n
h
(
W
h
t
,
k
−
1
i
+
U
h
t
,
k
−
1
j
)
,
W
,
U
∈
R
b
∗
b
α
t
,
i
j
=
e
x
p
(
e
t
,
i
j
)
∑
s
=
1
T
e
x
p
(
e
t
,
i
s
)
a_{t, k}^i = \sum _{j=1} ^{T} a_{t, ij} h_{t, k-1}^j \\ e_{t, ij} = v^T tanh(Wh_{t, k-1}^i + U h_{t, k-1}^j), W,U \in \mathbb{R} ^{b*b}\\ \alpha_{t, ij} = \frac{exp(e_{t,ij})}{\sum_{s=1}^{T} exp(e_{t, is})}\tag{6}
at,ki=j=1∑Tat,ijht,k−1jet,ij=vTtanh(Wht,k−1i+Uht,k−1j),W,U∈Rb∗bαt,ij=∑s=1Texp(et,is)exp(et,ij)(6)
为了让当前音轨的生成过程能够利用到其他音轨的信息,论文对GRU进行了改造,使用
x
t
,
k
i
x_{t,k}^i
xt,ki、
h
t
,
k
−
1
i
h_{t,k-1}^i
ht,k−1i、
a
t
,
k
i
a_{t,k}^i
at,ki三个向量作为改造的GRU的输入,得到任务i在t period的第k时间步的隐藏状态。具体过程如下:
(7)
r
t
,
k
i
=
σ
(
W
r
i
x
t
,
k
i
+
U
r
i
h
t
,
k
−
1
i
+
A
r
i
a
t
,
k
i
+
b
r
i
)
,
z
t
,
k
i
=
σ
(
W
z
i
x
t
,
k
i
+
U
z
i
+
A
z
i
a
t
,
k
i
+
b
z
i
)
,
h
t
,
k
i
~
=
σ
(
W
i
x
t
,
k
i
+
U
i
[
r
t
,
k
i
⋅
h
t
,
k
−
1
i
]
+
A
i
a
t
,
k
i
+
b
i
)
h
t
,
k
i
=
(
1
−
z
t
,
k
i
)
⋅
h
t
,
k
−
1
i
+
z
t
,
k
i
⋅
h
t
,
k
i
~
r_{t,k}^i = \sigma(W_r^i x_{t,k}^i + U_r^ih_{t,k-1}^i + A_r^ia_{t,k}^i + b_r^i) , \\ z_{t,k} ^i = \sigma(W_z^i x_{t,k}^i + U_z^i + A_z^ia_{t,k}^i + b_z^i),\\ \widetilde{h_{t,k}^i} = \sigma(W^i x_{t,k}^i + U^i [r_{t,k}^i \cdot h_{t,k-1}^i]+A^ia_{t,k}^i+b^i)\\ h_{t,k}^i = (1-z_{t,k}^i) \cdot h_{t,k-1}^i +z_{t,k}^i \cdot \widetilde{h_{t,k}^i}\tag{7}
rt,ki=σ(Wrixt,ki+Uriht,k−1i+Ariat,ki+bri),zt,ki=σ(Wzixt,ki+Uzi+Aziat,ki+bzi),ht,ki
=σ(Wixt,ki+Ui[rt,ki⋅ht,k−1i]+Aiat,ki+bi)ht,ki=(1−zt,ki)⋅ht,k−1i+zt,ki⋅ht,ki
(7)
MLP Cell
与attention cell不同,MLP cell使用GRU对不同乐器的音轨序列的隐藏状态进行整合,因此,MLP cell能够选择每个乐器音轨最重要的部分以提高音乐的整体质量。首先,所有的音轨的序列的隐藏状态通过全连接层得到 H i , k − 1 i H_{i,k-1}^i Hi,k−1i,然后加上 x t , k i x_{t,k}^i xt,ki输入到GRU得到 h t , k i h_{t,k}^i ht,ki。
(8) r t , k i = σ ( W r i x t , k i + U r i H t , k − 1 i + b r i ) , z t , k i = σ ( W z i x t , k i + U z i H t , k − 1 i + b z i ) , h t , k i ~ = σ ( W h i x t , k i + U h i [ r t , k i ⋅ H t , k − 1 i ] ) h t , k i = ( 1 − z t , k i ) ⋅ H t , k − 1 i + z t , k i ⋅ h t , k i ~ H t , k i = σ ( W i [ h t , k − 1 1 , . . . , h t , k − 1 N ] + b i ) r_{t,k}^i = \sigma(W_r^i x_{t,k}^i + U_r^iH_{t,k-1}^i + b_r^i) , \\ z_{t,k} ^i = \sigma(W_z^i x_{t,k}^i + U_z^iH_{t,k-1}^i + b_z^i),\\ \widetilde{h_{t,k}^i} = \sigma(W_h^i x_{t,k}^i + U_h^i [r_{t,k}^i \cdot H_{t,k-1}^i])\\ h_{t,k}^i = (1-z_{t,k}^i) \cdot H_{t,k-1}^i +z_{t,k}^i \cdot \widetilde{h_{t,k}^i} \\ H_{t,k}^i = \sigma(W^i[h_{t,k-1}^1, ..., h_{t,k-1}^N]+b^i)\tag{8} rt,ki=σ(Wrixt,ki+UriHt,k−1i+bri),zt,ki=σ(Wzixt,ki+UziHt,k−1i+bzi),ht,ki =σ(Whixt,ki+Uhi[rt,ki⋅Ht,k−1i])ht,ki=(1−zt,ki)⋅Ht,k−1i+zt,ki⋅ht,ki Ht,ki=σ(Wi[ht,k−11,...,ht,k−1N]+bi)(8)
生成过程
生成音乐的过程:给定和弦进行序列,每个period首先使用CRMCG生成旋律片段
M
i
=
{
m
i
1
,
m
i
2
,
.
.
.
,
m
i
l
m
}
Mi=\{m{i1}, m{i2}, ..., m_{i_{lm}}\}
Mi={mi1,mi2,...,milm},然后使用Mi生成多音轨伴奏。
M
i
M_i
Mi序列通过GRU得到
s
0
m
s_0^m
s0m,
s
0
m
s_0^m
s0m可以作为生成
{
h
11
,
h
21
,
.
.
.
,
h
T
1
}
\{h_{11}, h_{21}, ..., h_{T1}\}
{h11,h21,...,hT1}的初始状态,
h
i
j
h_{ij}
hij表示任务i在j时间步的隐藏状态。
(9)
M
‾
=
E
m
M
,
E
m
∈
R
V
m
∗
d
,
s
0
m
=
G
R
U
(
m
‾
i
,
l
m
)
,
\overline{M} = E_m M, E_m \in \mathbb{R}^{V_m*d},\\ s_0^m = GRU(\overline{m}_{i,l_m}),\tag{9}
M=EmM,Em∈RVm∗d,s0m=GRU(mi,lm),(9)
{
h
1
,
j
−
1
,
h
2
,
j
−
1
,
.
.
.
,
h
T
,
j
−
1
}
\{h_{1,j-1}, h_{2,j-1}, ..., h_{T,j-1}\}
{h1,j−1,h2,j−1,...,hT,j−1}通过Attention cell或者MLP cell就能得到第
j
j
j时间步的隐藏状态,再经softmax得到最终输出。
(10) s t i = A t t e n t i o n C e l l ( y t − 1 i , s t − 1 i ) , t > 0 , o r s t i = M L P C e l l ( Y t − 1 i , s t − 1 i ) , t > 0 , y t i = s o f t m a x ( s t i ) , s_t^i = AttentionCell(y_{t-1}^i, s_{t-1}^i),\ \ t>0, or \\ s_t^i = MLPCell(Y_{t-1}^i, s_{t-1}^i), t>0,\\ y_t^i = softmax(s_t^i),\tag{10} sti=AttentionCell(yt−1i,st−1i), t>0,orsti=MLPCell(Yt−1i,st−1i),t>0,yti=softmax(sti),(10)
参考文献
[SIGKDD 2018] [paper] XiaoIce Band: A Melody and Arrangement Generation Framework for Pop Music