模型:

google/music-spectrogram-diffusion

英文

多乐器音乐合成与频谱扩散

由Curtis Hawthorne、Ian Simon、Adam Roberts、Neil Zeghidour、Josh Gardner、Ethan Manilow和Jesse Engel撰写。

摘要

一个理想的音乐合成器应该既具有交互性又具有表现力,能够实时生成任意组合乐器和音符的高保真音频。最近的神经合成器在领域特定模型和原始波形模型之间存在一种权衡,前者可以详细控制特定乐器,后者可以在任何音乐上进行训练,但控制能力有限且生成速度较慢。在这项工作中,我们专注于中间领域的神经合成器,它可以实时地从MIDI序列中生成具有任意乐器组合的音频。这使得我们可以使用单个模型对多种转录数据集进行训练,从而在一系列乐器上具有音符级的作曲和乐器控制能力。我们使用一个简单的两阶段过程:使用编码器-解码器Transformer将MIDI转换为频谱图,然后使用生成对抗网络(GAN)频谱图反转器将频谱图转换为音频。我们将解码器训练为自回归模型和Denoising Diffusion Probabilistic Model(DDPM)两种方法进行比较,发现DDPM方法在音频重建和Fréchet距离度量方面具有更好的质量。鉴于这种方法的交互性和通用性,我们认为这是朝着实现任意乐器和音符的交互和表现力神经合成的有希望的第一步。

模型

如上图所示,模型将输入的MIDI文件进行分词,转换为一系列5秒间隔的片段。然后,将每个分词的片段与位置编码一起通过Note编码器,将其表示与前一个窗口生成的频谱图表示(通过上下文编码器获得)进行拼接。对于初始的5秒窗口,这个表示被设为零。然后,使用生成的上下文来作为条件去采样从MIDI窗口中去噪的频谱图,并将其与最终输出进行拼接,同时也将其用作下一个MIDI窗口的上下文。重复该过程直到所有MIDI输入都被处理完。最后,一个MelGAN解码器将可能很长的频谱图转换为音频,这是该流程的最终结果。

示例用法

from diffusers import SpectrogramDiffusionPipeline, MidiProcessor

pipe = SpectrogramDiffusionPipeline.from_pretrained("google/music-spectrogram-diffusion")
pipe = pipe.to("cuda")
processor = MidiProcessor()

# Download MIDI from: wget http://www.piano-midi.de/midis/beethoven/beethoven_hammerklavier_2.mid
output = pipe(processor("beethoven_hammerklavier_2.mid"))

audio = output.audios[0]