[论文阅读]Neural music synthesis for flexible timbre control

本文提出了一种新的合成音乐的方法,直接从MIDI音符序列合成为由不同乐器演奏的音乐,并且可以自由地对音色进行操控,具体来说:网络输入MIDI音符序列,输出梅尔频谱,乐器嵌入作为对网络的约束,有了约束之后,网络就可以生成特定乐器的梅尔频谱,在将频谱输入到WaveNet声码器,声码器输出合成的特定乐器的音乐。

本文的方法并不是第一次出现,之前已经有了Tacotron和DeepVoice这两中类似的模型,这两个模型都是文本到语音转换模型,输入一段文本,输出该文本对应的梅尔频谱,跟着WaveNet声码器输出音频波形。TimbreTron也使用了的WaveNet模型作为声码器,和本文不同的是它应用在乐器音色转换。

什么是MIDI文件?

MIDI文件是一种描述性的“音乐语言”,它将所要演奏的乐曲信息用字节进行描述。譬如在某一时刻,使用什么乐器,以什么音符开始,以什么音调结束,加以什么伴奏等等,MIDI文件本身并不包含波形数据,所以MIDI文件非常小巧.

本文实验数据集:

MIDI数据集包含了10种乐器,通过FluidSynth合成对应的音乐,每种乐器合成334个音频文件,其中320用来训练,14个用来验证。为什么要用合成的音乐呢,作者解释说自然乐器演奏的音乐数据集MusicNet中,乐器独奏的音频文件很少,而且还有标签错误。不过我觉得主要是利用合成的音频文件可以进行有监督的训练,即本文模型是监督模型,我们看一下损失函数:

a b s M S E = E [ ( S t r u e − S p r e d ) 2 ] \mathbf { a b s } \mathbf { M S E } = \mathbb { E } \left[ \left( S _ { \mathrm { true } } - S _ { \mathrm { pred } } \right) ^ { 2 } \right] absMSE=E[(StrueSpred)2]

log ⁡ − a b s M S E = E [ ( log ⁡ S t r u e − log ⁡ S p r e d ) 2 ] \log -abs MSE = \mathbb { E } \left[ \left( \log S _ {true } - \log S _ { pred } \right) ^ { 2 } \right] logabsMSE=E[(logStruelogSpred)2]

t a n h − l o g − a b s M S E = E [ ( tanh ⁡ 1 4 log ⁡ S t r u e − tanh ⁡ 1 4 log ⁡ S p r e d ) 2 ] tanh-log-abs MSE = \mathbb { E } \left[ \left( \tanh \frac { 1 } { 4 } \log S _ { true } - \tanh \frac { 1 } { 4 } \log S _ { pred } \right) ^ { 2 } \right] tanhlogabsMSE=E[(tanh41logStruetanh41logSpred)2]

其中 S t r u e S_{true} Strue 即为真实频谱, S p r e d S_{pred} Spred即为合成的梅尔频谱,用监督学习训练模型能够拟合训练集。本文的模型是一种判别模型,即学习 p ( y ∣ x ) p(y|x) p(yx) ,给定音符序列,学习到其最可能的梅尔频谱表示。也可以将其转变为生成模型,即学习 p ( x , y ) p(x,y) p(x,y),即给定音符序列和目标乐器嵌入合成具有目标乐器音色的音乐。

本文网络结构:

image-20181128151116476

将MIDI文件转换为钢琴卷轴表示(piano roll representation),这种表示包含了88个钢琴键的时间和速度。在将钢琴卷轴表示转化为矩阵。网络的输入就是两个88维的钢琴卷轴表示的连接,共176维,一个是音符起始时间,一个是帧。

输入为Onsets和Frames的连接,即

X = [ X  onset  ; X  frame  ] X p , t  onset  = v  the active note  ⋅ 1  anote at pitch  p  is frirst active at time  t X p , t  frame  = v  the active note  ⋅ 1  anote at pitch  p  is active at time  t \begin{aligned} \mathbf { X } & = \left[ \mathbf { X } ^ { \text { onset } } ; \mathbf { X } ^ { \text { frame } } \right] \\ \mathbf { X } _ { p , t } ^ { \text { onset } } & = v _ { \text { the active note } } \cdot \mathbb { 1 } _ { \text { anote at pitch } p \text { is frirst active at time } t } \\ \mathbf { X } _ { p , t } ^ { \text { frame } } & = v _ { \text { the active note } } \cdot \mathbb { 1 } _ { \text { anote at pitch } p \text { is active at time } t } \end{aligned} XXp,t onset Xp,t frame =[X onset ;X frame ]=v the active note 1 anote at pitch p is frirst active at time t=v the active note 1 anote at pitch p is active at time t

X为176维向量

输入X经过 1x1卷积,输入到FiLM约束层,再经过双向LSTM层,FiLM约束层,1x1卷积层,输出梅尔频谱,梅尔频谱输入WaveNet声码器,输出音频波形。

实验部分:

网络为什么这么设计 ?

作者做了脱离实验(ablation study):

image-20181129110552308

设置了不同的条件来探索那种模型结构较好,训练集和验证集损失作为评价标准。只输入Frame或者Onset结果都是极差的,从“Second FiLM only”这一行可以看出,如果去掉第一个FiLM层,模型在验证集上的损失达到最大,可以说明第一个FiLM层可以帮助循环层学习到音色特征。做脱离实验来说明模型的有效性,在这个具体的模型结构上来说是可以的,但是可能还有其他更好的模型结构作者没有去探索。

合成的音频质量怎么样?

评价指标包括主观和客观评价。因为模型在不同的阶段都会产生导致音频质量的下降,比如 u − l a w u-{law} ulaw 量化和WaveNet合成。使用皮尔逊相关系数来度量乐器在不同阶段音频质量下降的程度。下图绘制了原始音频和合成音频之间的皮尔逊相关系数,相关系数越低,音频质量下降的越厉害。

image-20181129115846613

图a中黄线是真实的频谱通过WaveNet后合成的音频和原始音频的相关系数,代表了模型的合成性能的上限。绿色,红色和紫色线代表了不同损失函数下的相关系数,可以看到使用abs损失的模型相关系数最低,模型最差,而使用log-abs函数损失的两个模型性能差不多,更加接近性能上限。图b是图a中绿色线所对应的模型在10种乐器上的相关系数,不同乐器之间的差别很大,大部分乐器在音高较低的部分相关系数很小,也就是音频质量下降的厉害。

主观MOS评分的结果和上图结果一致,使用了tanh-log-abs MSE损失的网络效果最好。

image-20181129160510680

音色嵌入空间

本文一个重要的点就是音色嵌入空间,嵌入空间包含了音色信息。作者创建了320x320的网格,包含了所有乐器的嵌入,然后使用网格中的每个像素点来预测其对应的梅尔频谱。谱中心点和平均能量中心点如下图所示:image-20181129160938295

谱中心比较高代表泛音部分较强,较低则代表更接近于单音符。平均能量较高代表音符持续时间长,平均能量较低表示音符短暂而且衰减的很快。两图的结果是一致的。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值