昇思25天学习打卡营第22天|基于MindNLP+MusicGen生成自己的个性化音乐案例

目录

MindSpore 环境配置与 Musicgen 模型加载

模型加载 Musicgen 模型的无条件生成与音频保存

基于文本输入的 Musicgen 模型生成与音频保存

使用预训练模型生成特定描述的音频并保存与播放


MindSpore 环境配置与 Musicgen 模型加载


        首先实验环境预装了特定版本的 mindspore ,并提供了更改版本的方法,然后查看了当前 mindspore 的版本。接着安装了 mindnlp 包和 jieba 。最后从预训练模型 facebook/musicgen-small 中加载了 MusicgenForConditionalGeneration 模型。

        代码如下:

%%capture captured_output
# 实验环境已经预装了mindspore==2.3.0rc1,如需更换mindspore版本,可更改下面mindspore的版本号
!pip uninstall mindspore -y
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.3.0rc1
# 查看当前 mindspore 版本
!pip show mindspore
# 安装 mindnlp 包
!pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindnlp==0.2.4 jieba
from mindnlp.transformers import MusicgenForConditionalGeneration

model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")

模型加载 Musicgen 模型的无条件生成与音频保存


        首先获取了无条件输入以生成样本数量为 1 的数据。然后使用模型进行生成操作,设置了采样方式和生成的最大新标记数。接着获取了模型配置中的音频采样率,并使用 scipy.io.wavfile.write 将生成的音频数据保存为 wav 文件。还注释了在 notebook 中通过 Audio 来播放生成音频的相关代码,以及计算了音频的时长。

        代码如下:

unconditional_inputs = model.get_unconditional_inputs(num_samples=1)

audio_values = model.generate(**unconditional_inputs, do_sample=True, max_new_tokens=256)
import scipy

sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("musicgen_out.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())
# from IPython.display import Audio
# # 要收听生成的音频样本,可以使用 Audio 在 notebook 进行播放
# Audio(audio_values[0].asnumpy(), rate=sampling_rate)
# audio_length_in_s = 256 / model.config.audio_encoder.frame_rate

# audio_length_in_s

基于文本输入的 Musicgen 模型生成与音频保存


        首先从预训练模型 facebook/musicgen-small 加载了 AutoProcessor 。然后使用这个处理器对给定的文本描述进行处理,包括填充操作,并指定返回的数据类型为 mindspore 的张量。接着利用模型根据处理后的输入进行生成操作,设置了采样方式、指导尺度和生成的最大新标记数。最后将生成的音频数据保存为 wav 文件,并注释了在 notebook 中播放生成音频的相关代码。

        代码如下:

from mindnlp.transformers import AutoProcessor

processor = AutoProcessor.from_pretrained("facebook/musicgen-small")

inputs = processor(
    text=["80s pop track with bassy drums and synth", "90s rock song with loud guitars and heavy drums"],
    padding=True,
    return_tensors="ms",
)

audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
scipy.io.wavfile.write("musicgen_out_text.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())
# from IPython.display import Audio
# # 要收听生成的音频样本,可以使用 Audio 在 notebook 进行播放
# Audio(audio_values[0].asnumpy(), rate=sampling_rate)

        运行结果:

使用预训练模型生成特定描述的音频并保存与播放


        使用了相关的库和模型来处理音频数据并生成新的音频。

        首先,通过 load_dataset 函数加载了名为 gtzan 的数据集的训练集部分,并获取了其中一个音频样本。然后,取这个音频样本的前一半数据。接下来,从预训练的模型 facebook/musicgen-small 加载了处理器 AutoProcessor 。之后,使用这个处理器对音频样本进行处理,同时结合给定的文本描述 80s blues track with groovy saxophone ,设置了一些参数,如采样率、填充方式和返回的数据类型等。最后,使用模型生成新的音频数据,并将其保存为 musicgen_out_audio.wav 文件,还可以在 notebook 中通过 Audio 来播放生成的音频样本。

        代码如下:

from datasets import load_dataset

dataset = load_dataset("sanchit-gandhi/gtzan", split="train", streaming=True)
sample = next(iter(dataset))["audio"]

# take the first half of the audio sample
sample["array"] = sample["array"][: len(sample["array"]) // 2]
# 使用音视频提示生成,耗时较久
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")

inputs = processor(
    audio=sample["array"],
    sampling_rate=sample["sampling_rate"],
    text=["80s blues track with groovy saxophone"],
    padding=True,
    return_tensors="ms",
)

audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=256)
scipy.io.wavfile.write("musicgen_out_audio.wav", rate=sampling_rate, data=audio_values[0, 0].asnumpy())
# from IPython.display import Audio
# # 要收听生成的音频样本,可以使用 Audio 在 notebook 进行播放
# Audio(audio_values[0].asnumpy(), rate=sampling_rate)

        运行结果:

        打印时间:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端基地

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值