基于keras构建lstm模型自动生成音乐系统

news2024/11/25 2:36:02

目录
LSTM 机器学习生成音乐 1
数据集介绍 1
将 mid 转成 note 数组 4
将 note 数组转成 mid 文件 5
获取数据集并将其保存 6
将 note 进行编号 7
构建数据集 8
截取数据 8
进行 one-hot 编码 10
构建模型 11
训练 13
生成音乐 13
加载数据 16
加载模型 16
构建 id 与 note 的映射 16
预测下一个 note 16
源源不断产生 note 数据 17
生成音乐 20
总结 20
参考 20
将 mid 转成 note 数组
​ 下面定义get_notes,通过这个函数,我们可以将文件夹中所有mid文件变成一个名为all_note的数组。
关于具体怎么转化,实际上我们没有必要去关心,这个函数也是直接 copy 基于深度学习 lstm 算法生成音乐的,直接用即可。
from music21 import converter, instrument, note, chord, stream
def get_notes(song_path,song_names):
“”“获得midi音乐文件中的音符 :param song_path: [文件的保存地址] :type song_path: [str] :param song_names: [所有音乐文件的文件名] :type song_names: [list] :return: [所有符合要求的音符] :rtype: [list] “””
all_notes = []
for song_name in song_names:
stream = converter.parse(song_path+song_name)
instru = instrument.partitionByInstrument(stream)
if instru: # 如果有乐器部分,取第一个乐器部分
notes = instru.parts[0].recurse()
else: #如果没有乐器部分,直接取note
notes = stream.flat.notes
for element in notes:
# 如果是 Note 类型,取音调
# 如果是 Chord 类型,取音调的序号,存int类型比较容易处理
if isinstance(element, note.Note):
all_notes.append(str(element.pitch))
elif isinstance(element, chord.Chord):
all_notes.append(‘.’.join(str(n) for n in element.normalOrder))
return all_notes
将 note 数组转成 mid 文件
既然可以将mid文件转化成note数组,同理,也可以将note数组转成mid文件(也就是音乐)。定义一个create_music函数,同理这个函数也是copy基于深度学习lstm算法生成音乐的,同样也不需要关心其如何实现。
create_music函数在使用模型生成音乐的时候会用到(到后面看到的时候别懵逼了哦!!!!)。
def create_music(result_data,filename):
“”“生成mid音乐,然后进行保存 :param result_data: [音符列表] :type result_data: [list] :param filename: [文件名] :type filename: [str] “””
result_data = [str(data) for data in result_data]
offset = 0
output_notes = []
# 生成 Note(音符)或 Chord(和弦)对象
for data in result_data:
if (‘.’ in data) or data.isdigit():
notes_in_chord = data.split(‘.’)
notes = []
for current_note in notes_in_chord:
new_note = note.Note(int(current_note))
new_note.storedInstrument = instrument.Piano()
notes.append(new_note)
new_chord = chord.Chord(notes)
new_chord.offset = offset
output_notes.append(new_chord)

    else:
        new_note = note.Note(data)
        new_note.offset = offset
        new_note.storedInstrument = instrument.Piano()
        output_notes.append(new_note)
    offset += 1
# 创建音乐流(Stream)
midi_stream = stream.Stream(output_notes)
# 写入 MIDI 文件
midi_stream.write('midi', fp=filename+'.mid')

获取数据集并将其保存
通过前面的介绍,调用get_notes将使用music21库将文件夹中所有的mid文件变成一个note数组,但实际上这个过程是比较慢的,因此可以在第一次的时候将转换后的note数组保存起来,下面定义分别定义保存和读取的函数:
def save_data(filename,content):
“”“保存音符 :param filename: [保存的文件名] :type filename: [str] :param content: [内容] :type content: [list]] “””
with open(filename,“w”) as f:
for data in content:
f.write(str(data)+“\n”)
def get_data(filename):
“”“从文件中获取音符 :param filename: [文件名] :type filename: [str] :return: [返回音符] :rtype: [list] “””
with open(filename) as f:
all_notes = f.readlines()
return [ note[:len(note)-1] for note in all_notes]
​ 接下来就是调用以上几个函数:将mid文件转成note数组——>将note数组进行保存。
import ossong_path = "./midi_songs/"song_names = os.listdir(song_path)

获取note数组all_notes = get_notes(song_path,song_names)# 保存文件save_data(“data.txt”,all_notes)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/28050.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

我服了!SpringBoot升级后这服务我一个星期都没跑起来!(下)

14. DiscoveryEnabledServer Not Found 主要问题还是 eureka 中没有了 ribbon 相关的依赖。 Caused by: java.lang.NoClassDefFoundError: com/netflix/niws/loadbalancer/DiscoveryEnabledServerat java.lang.Class.getDeclaredMethods0(Native Method) ~[?:?]at java.lan…

论文笔记(二十二):GRiD: GPU-Accelerated Rigid Body Dynamics with Analytical Gradients

GRiD: GPU-Accelerated Rigid Body Dynamics with Analytical Gradients文章概括摘要1. 介绍2. 相关工作3. 背景A. *计算硬件:CPU vs. GPU*B. 刚体动力学4. GRiD库A. 设计B. 当前特征C. 代码优化方法5. 性能基准A. 方法B. 多重计算延时C. 单一计算延时扩展6. 结论和…

母线电容及其计算方法

母线电容及其计算方法 1.母线电容是什么? 2.母线电容有什么作用? 3.母线电容的参数。 4.母线电容参数计算。 1.母线电容是什么? 工程定义: (1)在电机控制器中,电池包的直流电作为输入电源&am…

关于 SAP ABAP SYSTEM_SHM_OPEN_CHANGE_LOCK 运行时错误的问题

有朋友在技术讨论群里提问: 遇到 SYSTEM_SHM_OPEN_CHANGE_LOCK 的运行时错误:Open change lock on transactional area in COMMIT: 上图显示,错误在 SAP ABAP 标准程序 SAPMHTTP 里抛出,这说明是 ABAP 服务器进行 HTTP 请求处理或…

SpringBoot SpringBoot 开发实用篇 5 整合第三方技术 5.23 SpringBoot 整合 RabbitMQ(direct 模式)

SpringBoot 【黑马程序员SpringBoot2全套视频教程,springboot零基础到项目实战(spring boot2完整版)】 SpringBoot 开发实用篇 文章目录SpringBootSpringBoot 开发实用篇5 整合第三方技术5.23 SpringBoot 整合 RabbitMQ(direct 模式)5.23.1…

web前端期末大作业——基于html+css+javascript+jquery+bootstrap响应式户外旅游网站

👨‍🎓学生HTML静态网页基础水平制作👩‍🎓,页面排版干净简洁。使用HTMLCSS页面布局设计,web大学生网页设计作业源码,这是一个不错的旅游网页制作,画面精明,排版整洁,内容…

分析高数值孔径物镜的聚焦

摘要 高数值孔径物镜广泛用于光学光刻、显微镜等。因此,在聚焦模拟中考虑光的矢量性质是非常重要的。 VirtualLab非常容易支持这种镜头的光线和光场追迹分析。 通过光场追迹,可以清楚地展示不对称焦斑,这源于矢量效应。 照相机探测器和电磁场…

解决台式机麦克风不可用问题,只有音频输出,无音频输入

解决台式机麦克风不可用问题 戴尔灵越3880 最近因为需要开线上会议,发现戴尔台式机音频只有输出没有输入,也就是只能听见声音,无法输入声音。 先后尝试了各种驱动安装更新之类的调试,无果。 之后通过戴尔支持解决~ 这里多说一…

京东主图视频上传,如何关联商品投放?

京东主图视频怎么做,如何上传主图视频?大家都知道商品可以展示五张主图,主图可以帮助买家更好地了解产品卖点。而主图视频可以更全面的展示产品,对此京麦还设置了不同类型的视频模板,但是很多新手商家往往在上传视频的…

适配器模式(Gateway中GatewayFilter和GlobalFilter整合实现)

文章目录GlobalFilter(代表全局过滤器)GatewayFilter(代表路由过滤器)GlobalFilterAdapter(适配器关键)测试类执行结果在SpringCloud Gateway中有两个不同的过滤器接口,分别是GatewayFilter和GlobalFilter。 GlobalFilter:全局过滤器。不需要再配置文件…

在外公网调阅公司内网资料文件【内网穿透】

优盘体积小巧重量轻,是不少人移动存储数据的首选。但优盘虽然方便携带,但也正是因为小巧和轻便,导致一不留神就会丢失,并且存储的数据也会有损坏的风险,因此在云存储概念兴起后,就快速成为数据存储的新风尚…

网络安全之反序列化漏洞复现

0x01 Apereo cas简介 Apereo CAS 单点登陆系统是Java服务器环境下使用较为广泛的单点登陆系统。 CAS 全程Central Authentication Service(中心认证服务),是一个单点登录协议,Apereo CAS是实现该协议的软件包。 单点登录定义 …

【面试】Android 大厂必问的8大模块,你掌握了几个?

自15年毕业进入社会从事 Android 开发行业,,已经将近有八年的时光了; 在这将近八年的时间内, 我从 小厂打杂到进入到核心团队,再跳槽到大厂; 在华为呆过一段时间,18年四月份进了阿里一直到现在&…

体态识别算法在 Android 端部署实例

背景介绍 随着软硬件技术的发展,智能穿戴式设备逐渐从概念走向商用化。在过去几年内,Google、Apple以及Sony等科技公司在体积、功耗控制以及成本等方面做得越来越好,推出了一大批可穿戴产品,具有代表性的成果有:1. 智能…

Cy5 Alkyne,1223357-57-0,花青素Cyanine5炔基用于点击化学标记反应

CAS号:1223357-57-0 | 英文名: Cyanine5 alkyne,Cy5 Alkyne | 中文名:花青素CY5炔基 CASNumber:1223357-57-0 Molecular formula:C35H42ClN3O Molecular weight:556.19 Purity:9…

【CNN】ResNet——开启的深度学习从1到无限可能的新时代

前言 深度残差网络(Deep residual network, ResNet)的提出是CNN图像史上的一件里程碑事件,ResNet在2015年发表当年取得了图像分类,检测等等5项大赛第一,并又一次刷新了CNN模型在ImageNet上的历史记录。直到今天&#…

《看漫画学Python》1、2版分享,python最佳入门教程,中学生用业余时间都能学会,北大教授看完都这样定义它

前言 学习Python的小伙伴大部分应该都知道《看漫画学Python:有趣、有料、好玩、好用(全彩版)》这本书! 但是刚开始接触Python的朋友都会有一个共同的烦恼,自学好无聊,好枯燥,不想坚持了……所…

Ajax使用

简介: 全称:Asynchronous JavaScript And XML 中文名:异步js与XML 作用:网页使用JavaScript脚本实现前端与服务器的异步交互技术,可以在不刷新网页的前 提下实现和服务器的数据交互 注意:ajax不是一种编程语言,而是使用JS的一种技术。 使用步骤 步骤&am…

最佳镜像搬运工 Skopeo 指南

最佳镜像搬运工 Skopeo 指南 文章目录最佳镜像搬运工 Skopeo 指南1. 概述2. Skopeo 是如何工作的?3. 为什么要用 Skopeo?3.1 灵活性3.2 安全性和可访问性3.3 功能多样性4. 安装4.1 Fedora4.2 RHEL / CentOS Stream ≥ 84.3 RHEL/CentOS ≤ 7.x4.4 Ubuntu…

GPU显存占满但利用率却很低

来帕多瓦联培已经一个多月了,最近调代码跑实验又发现了这个问题。这里提供另外一个解决思路。一个原因还是 cpu没跟上gpu节奏。 通常我们都会用尽可能大的 batch 来占满显存。但是如果cpu的读取和传输跟不上的话就会导致gpu利用率时上时下,而且训练时间…