当前位置: 首页 > news >正文

昇思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 MusicgenForConditionalGenerationmodel = 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 scipysampling_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 AutoProcessorprocessor = 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_datasetdataset = 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)

        运行结果:

        打印时间:

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 如何在 VitePress 中增加一个全局自定义组件
  • 如果想不明白,那就读书吧
  • windows系统下编译和使用grpc
  • 代码随想录——打家劫舍Ⅱ(Leetcode 213)
  • 对JAVA的包package的理解
  • 2024华为数通HCIP-datacom最新题库(H12-831变题更新⑧)
  • rocketmq普通消息-消息类型
  • idea中maven无法下载内网自建的Nexus私服中的依赖
  • 优化冗余代码:提升前端项目开发效率的实用方法
  • 搭建 STM32 网关服务器的全流程:集成嵌入式 C++、TCP/IP 通信、Flash 存储及 JWT 认证(含代码示例)
  • 了解郑州自闭症寄宿学校:提供专业康复服务与关怀
  • 《昇思25天学习打卡营第24天》
  • Springboot 开发之 RestTemplate 简介
  • 微信小程序-获取手机号:HttpClientErrorException: 412 Precondition Failed: [no body]
  • 人工智能与机器学习原理精解【11】
  • [deviceone开发]-do_Webview的基本示例
  • Brief introduction of how to 'Call, Apply and Bind'
  • ES6, React, Redux, Webpack写的一个爬 GitHub 的网页
  • Git学习与使用心得(1)—— 初始化
  • Hibernate【inverse和cascade属性】知识要点
  • JavaScript 基本功--面试宝典
  • JavaScript新鲜事·第5期
  • PAT A1017 优先队列
  • PHP 的 SAPI 是个什么东西
  • Python_网络编程
  • quasar-framework cnodejs社区
  • Redis中的lru算法实现
  • Storybook 5.0正式发布:有史以来变化最大的版本\n
  • 纯 javascript 半自动式下滑一定高度,导航栏固定
  • 从输入URL到页面加载发生了什么
  • 分布式事物理论与实践
  • 前嗅ForeSpider采集配置界面介绍
  • 如何使用 JavaScript 解析 URL
  • 世界编程语言排行榜2008年06月(ActionScript 挺进20强)
  • 通信类
  • ​​​​​​​开发面试“八股文”:助力还是阻力?
  • ​探讨元宇宙和VR虚拟现实之间的区别​
  • ​一些不规范的GTID使用场景
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • (02)Unity使用在线AI大模型(调用Python)
  • (24)(24.1) FPV和仿真的机载OSD(三)
  • (BFS)hdoj2377-Bus Pass
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (编译到47%失败)to be deleted
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (论文阅读11/100)Fast R-CNN
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)Docker基本介绍
  • (一)UDP基本编程步骤
  • (一)硬件制作--从零开始自制linux掌上电脑(F1C200S) <嵌入式项目>
  • .Family_物联网
  • .NET/ASP.NETMVC 深入剖析 Model元数据、HtmlHelper、自定义模板、模板的装饰者模式(二)...
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET性能优化(文摘)
  • .NET中GET与SET的用法