在人工智能的广阔领域中,深度学习已经在自然语言处理、计算机视觉和语音识别等多个领域实现了革命。然而,一个同样引人注目的领域是使用人工智能算法生成音乐。MusicGen是一种最先进的可控文本转音乐模型,它可以将文本提示无缝地转化为引人入胜的音乐作品。
MusicGen是什么?
MusicGen是一个卓越的音乐生成模型,提供简单性和可控性。与现有的方法如MusicLM不同,MusicGen通过消除自我监督的语义表示的需求而脱颖而出。该模型采用单阶段自回归Transformer架构,并使用32kHz EnCodec tokenizer进行训练。值得注意的是,MusicGen可以在一个通行中生成所有四个代码簿,这使其与传统方法有所区别。通过引入代码簿之间的轻微延迟,该模型展示了在并行预测它们的能力,从而每秒产生50个自回归步骤的音频。这种创新的方法优化了音乐生成过程的效率和速度。
MusicGen使用了20,000小时的授权音乐进行训练。他们还使用了内部数据集中的10,000首高质量音乐曲目以及ShutterStock和Pond5的音乐数据进行训练。
先决条件:
根据MusicGen官方GitHub库的说明:
- Python 3.9
- PyTorch 2.0.0
- 至少16GB内存的GPU
可用的MusicGen模型
有4个预训练模型可供选择,如下所示:
- Small:300M模型,只能将文本转化为音乐。
- VoAGI:1.5B模型,只能将文本转化为音乐。
- Melody:1.5B模型,能够将文本和旋律转化为音乐。
- Large:3.3B模型,只能将文本转化为音乐。
实验
下面是使用MusicGen large模型进行条件音乐生成的输出。
文本输入:弦乐和钢琴的铃儿响叮当的曲调
输出:(使用MusicGen "large" 模型)
下面是MusicGen “melody” 模型的输出。我们使用以上音频和文本输入生成了以下音频。
文本输入:只加入沉重的鼓声
输出:(使用MusicGen "melody" 模型)
如何在Colab上设置MusicGen
确保您正在使用GPU进行更快的推断。使用CPU生成10秒音频需要大约9分钟,而使用GPU(T4)仅需35秒。
在开始之前,请确保Colab中已安装Torch和TorchAudio。
安装来自Facebook的AudioCraft库。
!python3 -m pip install -U git+https://github.com/facebookresearch/audiocraft#egg=audiocraft
导入必要的库。
from audiocraft.models import musicgenfrom audiocraft.utils.notebook import display_audioimport torchfrom audiocraft.data.audio import audio_write
加载模型。模型列表如下:
# | model types are => small, VoAGI, melody, large |# | size of models are => 300M, 1.5B, 1.5B, 3.3B |model = musicgen.MusicGen.get_pretrained('large', device='cuda')
设置参数(可选):
model.set_generation_params(duration=60) # 这将生成60秒的音频。
条件音乐生成(通过提供文本生成音乐)。
model.set_generation_params(duration=60)res = model.generate( [ '弦乐和钢琴的铃儿响叮当的曲调' ], progress=True)# 该过程将在Colab上显示音乐控件
生成无条件音乐:
res = model.generate_unconditional( num_samples=1, progress=True)# 在屏幕上显示音乐控制display_audio(res, 16000)
生成音乐延续
要创建音乐延续,我们需要一个音频文件。将文件输入模型后,模型将会生成并添加更多音乐。
from audiocraft.utils.notebook import display_audioimport torchaudio音频路径 = "音频文件路径.wav"描述 = "爵士爵士,只有爵士"# 从文件加载音频。如果音频太长,请务必裁剪!prompt_waveform, prompt_sr = torchaudio.load( path_to_audio )prompt_duration = 15prompt_waveform = prompt_waveform[..., :int(prompt_duration * prompt_sr)]output = model.generate_continuation(prompt_waveform, prompt_sample_rate=prompt_sr,descriptions=[ description ], progress=True)display_audio(output, sample_rate=32000)
生成旋律条件生成:
model = musicgen.MusicGen.get_pretrained('melody', device='cuda')model.set_generation_params(duration=20)旋律波形, sr = torchaudio.load("音频文件路径.wav")旋律波形 = 旋律波形.unsqueeze(0).repeat(2, 1, 1)output = model.generate_with_chroma(descriptions=['添加重型鼓'], melody_wavs=melody_waveform, melody_sample_rate=sr,progress=True)display_audio(output, sample_rate=32000)
将音频文件写入磁盘。
如果您想从Colab下载文件,则需要将WAV文件写入磁盘。下面是将WAV文件写入磁盘的函数。它的第一个输入将是模型的输出,第二个输入将是文件名。
def write_wav(output, file_initials): try: for idx, one_wav in enumerate(output): audio_write(f'{file_initials}_{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True) return True except Exception as e: print("写文件时出错 ", e) return None# 这将写一个以bollywood开头的文件write_wav(res, "音频文件")
完整实现(Google Colab文件链接)
我们的Meta’s MusicGen库的完整实现在Colab文件中提供。请随意探索并使用它来创作音乐。
结论
总而言之,Audiocraft的MusicGen是一个功能强大且可控的音乐生成模型。展望未来,Audiocraft在AI生成音乐方面具有令人兴奋的潜力。无论您是音乐家还是AI爱好者,Audiocraft的MusicGen都为创意无限可能打开了一扇门。