几句话就能写歌,一招搞定文本生成音频

115 篇文章 2 订阅
92 篇文章 0 订阅

相较于AI在生成图像、视频、文本的应用,AI生成音乐领域的发展相对落后。这是由于生成高质量的音频需要对不同类型的信号、模块进行不同层级的建模,加上该领域开源的代码较少,可以说是AI生成内容中最具挑战性的领域。近日Meta 开源了一个能够生成各种音频的 PyTorch 库 ——AudioCraft
5fc7f6fe60b00ee38f04729bff7287c0.jpegDemo:https://huggingface.co/spaces/facebook/MusicGen

与Llama一样,AudioCraft也是以开源的形式进行发布,目的也是为了能够让“研究人员和从业人员能够使用自己的数据集训练自己的模型,减少由于训练数据的局限性带来的偏误,推动AI生成音乐或音频的发展。


Audiocraft 是一个PyTorch库,用于音频生成的深度学习研究,包括AudioGen、EnCodec(改进版)和MusicGen三个部件。其中,MusicGen 使用 Meta 具有版权的音乐数据进行训练,基于用户输入的文本生成音乐;AudioGen 使用公共音效数据进行训练,基于用户输入的文本生成音频;EnCodec 用于压缩音频并以高保真度重建原始信号,保证生成的音乐是高质量的.
738f159ac5183edb9d8d23d73acb245c.jpegAudioGen基于10个公开的音效数据集训练,里面包括狗吠、汽车鸣喇叭或木地板的脚步声等各种音效。
然后是MusicGen模型,一共包含300M、1.5B、3.3B三个不同参数量的自回归Transformer。
90c46e96e9c430405da3a05d9c678900.jpegMusicGen使用了20000小时的音乐来训练,包含10000条内部搜集的高质量音轨,以及ShutterStock和Pond5素材库中的数据,后两者的数据量分别为2.5万和36.5万.这些音乐数据在32kHz下被重新采样,都配有流派、BPM等基本信息和复杂一些的文字说明。
最后是EnCodec神经音频编解码器(neural audio codec)。编码器能从要压缩的音频信号中学习离散的音频token;随后,基于一个自回归语言模型,将音频信号压缩到目标大小;最后,基于解码器,就能将压缩的信号高保真重建回音频。基于这种压缩效果,音频能被压缩到比MP3格式还要小10倍。
e627c520db62f552628dfa15a1e30213.jpeg
安装使用
需要Python 3.9,PyTorch 2.0.0,至少16 GB内存的GPU


环境搭建
conda create -n musicgen python=3.9
pip install 'torch>=2.0'
# Then proceed to one of the following
pip install -U audiocraft # stable release
pip install -U git+https://git@github.com/facebookresearch/audiocraft#egg=audiocraft # bleeding edge
pip install -e . # or if you cloned the repo locally

使用api生成音乐

import torchaudio
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write

model = MusicGen.get_pretrained('melody')
model.set_generation_params(duration=8) # generate 8 seconds.
wav = model.generate_unconditional(4) # generates 4 unconditional audio samples
descriptions = ['happy rock', 'energetic EDM', 'sad jazz']
wav = model.generate(descriptions) # generates 3 samples.

melody, sr = torchaudio.load('./assets/bach.mp3')
# generates using the melody from the given audio and the provided descriptions.
wav = model.generate_with_chroma(descriptions, melody[None].expand(3, -1, -1), sr)

for idx, one_wav in enumerate(wav):
# Will save under {idx}.wav, with loudness normalization at -14 db LUFS.
audio_write(f'{idx}', one_wav.cpu(), model.sample_rate, strategy="loudness", loudness_compressor=True)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值