将midi转为json后转为str进行压缩长度而后在转为json

news/2024/11/9 0:34:00/

该代码主要实现了将json文件转换为字符串和将字符串转换为json文件的功能。

json_to_str()函数首先打开一个名为"a_0.json"的json文件,并使用json.load()函数将文件内容加载为一个字典。然后,将字典中的"data"键对应的值转换为字符串,并进行一系列替换操作,将字符串的格式调整为特定的形式,并返回最终得到的字符串数据。

str_to_json(data)函数首先对输入的字符串数据进行一系列替换操作,将字符串的格式调整为特定的形式。然后,使用re模块的正则表达式进行匹配,找到所有的分数形式,并将其转换为字符串形式。之后,将处理后的字符串数据以json格式保存到名为"a_1.json"的文件中,并返回转换后的字符串数据。

在代码的最后,调用了json_to_str()函数进行测试。

import json
import redef json_to_str():with open('a_0.json', "r", encoding="utf-8") as f:data = json.load(f)data = str(data["data"]).replace(".0", "").replace("'", "").replace("], [[", "#").replace("], [", "*").replace("]*","_").replace("]#", "-").replace("[[", "")return datadef str_to_json(data):data = "[[" + data.replace("-", "]#").replace("_", "]*").replace("*", "], [").replace("#", "], [[").replace("r","'r'")# 检测所有的分数for i in set(re.compile("\d+/\d").findall(data)):data = data.replace(i, "'{}'".format(i))for i in set(re.compile("\d+/\d\d").findall(data)):data = data.replace(i, "'{}'".format(i))for i in set(re.compile("\d+/\d\d\d").findall(data)):data = data.replace(i, "'{}'".format(i))with open("a_1.json", "w", encoding="utf-8") as f:json.dump({"data": eval(data)}, f)return dataif __name__ == '__main__':json_to_str()
import  music21 as ms21
import json
from fractions import Fraction
def json_to_midi():with open('a_0.json', "r", encoding="utf-8") as f:data = json.load(f)# 创建一个乐谱流s = ms21.stream.Stream()for one_midi in data["data"]:if type(one_midi[0]) == str:s.append(ms21.note.Rest())elif type(one_midi[0]) == int:s.append(ms21.note.Note(one_midi[0], duration=ms21.duration.Duration(Fraction(one_midi[1]))))else:note_list = []total_duration = Fraction("0")for i in one_midi:total_duration += Fraction(i[1])one_note = ms21.note.Note(i[0], duration=ms21.duration.Duration(Fraction(i[1])))note_list.append(one_note)s.append(ms21.chord.Chord(notes=note_list, duration=ms21.duration.Duration(total_duration)))s.write("midi", "s.mid")
def midi_to_json(file_name="s.mid"):s=ms21.converter.parse(file_name)# 获取持续的时间每个音符note_list=[]for note in s.flat.notesAndRests :if isinstance(note, ms21.note.Rest):note_list.append(["r"])elif isinstance(note,ms21.note.Note):note_list.append([note.pitch.midi,str(note.duration.quarterLength)])# 取和弦else:chord_list=[]for c_note in note.notes:chord_list.append([c_note.pitch.midi,str(c_note.duration.quarterLength)])note_list.append(chord_list)with open("a_1.json","w",encoding="utf-8") as f:json.dump({"data": note_list}, f)if __name__ == '__main__':midi_to_json()

http://www.ppmy.cn/news/806451.html

相关文章

家用洗地机值得入手吗?洗地机口碑榜

谈到地面清洁问题,中国家庭最为偏爱的清洁方式一定是水洗了,传统的拖把抹布清洁起来劳累又低效,电动拖把清洁方式往往也只是拖地而不能带走脏污,尤其是无法有效清理毛屑碎发等固体垃圾,因此需要事先用吸尘器清洁一遍。…

html家电分类,电器有哪些种类?家用电器都有哪些类型?

现在生活条件在不断的变好人们家庭条件也越来越好。在生活中每个家庭中到处都能够看到家电的存在。给生活提供了很多的方便。家用电器的种类和品牌也是多,在购买之前做个简单的了解还是挺有必要的。接下来,就来看看电器有哪些种类及家用电器都有哪些类型。 电器有哪…

深度剖析家用洗地机的方案设计

对于我们每一位居民来说,家庭清洁永远是一个绕不开的工作。 小宇猜想各位家中都有扫把、拖把或是吸尘器这些基础的清洁工具吧?随着科技的创新,像扫地机器人、蒸汽拖把、家用洗地机这类智能化的工具,渐渐进入了我们日常生活中&…

CleanMate吸尘器机器人_Cleanmate拖地机器人全自动擦地机家用智能扫地机电动拖把...

主要性能: 1、精心清洁:UFO精心的智能清扫多种清洁模式混合,清洁更干净,不漏点; 2、仿人工跪地式清洁,更专业清洁:UFO贴心仿人工跪地式擦地,加重下压拖地抹布全部推进力有两个可悬浮…

扫地机器人什么牌子的好 费电吗_哪种家用扫地机器人最好 扫地机器人十大品牌排名...

家用扫地机器人哪个牌子好 2016 扫地机器人十大品牌排名 家居生活中相信很多人都对打扫卫生比较厌烦, 如果能有扫地机器人来帮助我们解放双 手那真是再美不过了。 可是面对如此多的品牌, 到底哪种家用扫地机器人最好用呢?今天小 编就整理一下…

解决IDEA项目external libraries依赖包消失的问题

有时候电脑重启后,再打开IDEA上的项目时会出现external libraries目录下的依赖包都消失了的情况,只剩下了一个JDK的包 网上说可以通过刷新IDEA的缓存解决,但我试了没有效果,最后使用如下办法解决: 1.删除项目目录下的…

【Quartus FPGA】EMIF DDR3 IP 仿真记录

EMIF (External Memory Interface) 是 Quartus 平台提供的 IP,用于实现高速存储器件接口与控制器。通过 Intel Quartus Prime 软件,可以很方便地实现 EMIF IP 电路。本文记录了使用 EMIF 实现 DDR3 控制器的仿真过程,软件平台为 Quartus Prim…

IDEA+springboot+mybatis+shiro+bootstrap+Mysql WMS仓库管理系统

IDEAspringbootmybatisshirobootstrapMysql WMS仓库管理系统 一、系统介绍1.环境配置 二、系统展示1. 管理员登录2.修改密码3.系统日志4. 登陆日志5. 库存查询6. 出入库记录7.货物入库8.货物出库9.仓库管理员管理10.供应商信息管理11.客户信息管理12.货物信息管理13. 仓库信息管…