python:用 mido 生成 midi文件,用 pygame 播放 mid文件

pip install mido
 Downloading mido-1.3.2-py3-none-any.whl (54 kB)
 Downloading packaging-23.2-py3-none-any.whl (53 kB)
Installing collected packages: packaging, mido
Successfully installed mido-1.3.2 packaging-23.2

mido 官网文档

pip intall pygame
 pygame  2.5.2

安装文档 D:/Python39/Lib/site-packages/pygame/docs/generated/index.html

编写  test1_mido.py  如下

# -*- coding: utf-8 -*-
from mido import Message, MidiFile, MidiTrack
 
mid = MidiFile()    # 创建MIDI文件
track = MidiTrack() # 创建一个音轨
mid.tracks.append(track)

# 创建各个音符,并添加到音轨中 
track.append(Message("program_change", channel=0, program=2, time=0))
# do: C4 = 60
track.append(Message("note_on", note=60, velocity=80, time=500))
track.append(Message("note_off", note=60, velocity=80, time=500))
# re: D4 = 62 
track.append(Message("note_on", note=62, velocity=80, time=500))
track.append(Message("note_off", note=62, velocity=80, time=500))
# mi: E4 = 64
track.append(Message("note_on", note=64, velocity=80, time=500))
track.append(Message("note_off", note=64, velocity=80, time=500))
# fa: F4 = 65
track.append(Message("note_on", note=65, velocity=80, time=500))
track.append(Message("note_off", note=65, velocity=80, time=500))
# sol:G4 = 67
track.append(Message("note_on", note=67, velocity=80, time=500))
track.append(Message("note_off", note=67, velocity=80, time=500))
# la: A4 = 69
track.append(Message("note_on", note=69, velocity=80, time=500))
track.append(Message("note_off", note=69, velocity=80, time=500))
# si: B4 = 71
track.append(Message("note_on", note=71, velocity=80, time=500))
track.append(Message("note_off", note=71, velocity=80, time=500))
# do: C5 = 72
track.append(Message("note_on", note=72, velocity=80, time=500))
track.append(Message("note_off", note=72, velocity=80, time=500))

mid.save("test1.mid")

运行 python test1_mido.py  生成文件 test1.mid

编写  play_mid.py  如下

# -*- coding: utf-8 -*-
import os
import sys
import traceback
import pygame
from pygame import mixer

def mixer_init():
    freq = 44100
    bitsize = -16
    channels = 2
    buffer = 1024
    mixer.init(freq, bitsize, channels, buffer)
    # optional volume 0 to 1.0
    mixer.music.set_volume(0.9)

def play_mid(file):
    clock = pygame.time.Clock()
    try:
        mixer.music.load(file)
    except:
        print(traceback.format_exc())
    mixer.music.play()
    while mixer.music.get_busy():
        clock.tick(30)

# main()
if len(sys.argv) ==2:
    f1 = sys.argv[1]
else:
    print('usage: python play_mid.py file1.mid')
    sys.exit(1)

if not os.path.exists(f1):
    print(f"{f1} is not exists.")
    sys.exit(2)

fn,ext = os.path.splitext(f1)
if ext.lower() not in ('.mid','.mp3'):
    print('ext is not (.mid , .mp3)')
    sys.exit(2)

mixer_init()
try:
    play_mid(f1)
except KeyboardInterrupt as ex:
    # if user hits Ctrl+C then exit
    # (works only in console mode)
    mixer.music.fadeout(1000)
    mixer.music.stop()
    raise SystemExit from ex
mixer.music.stop()

运行 python play_mid.py test1.mid

详细参阅:Python编曲实践(一):通过Mido和PyGame来编写和播放单轨MIDI文件

MidiEditor 打开 test1.mid 文件

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【AI】ONNX

长期更新,建议收藏关注! 友情链接 Netron 开放神经网络交换(Open Neural Network Exchange)简称ONNX,是微软和Facebook提出用来表示深度学习模型的开放格式。所谓开放就是ONNX定义了一组和环境,平台均无关的标准格式…

内网安全-代理Socks协议路由不出网后渗透通讯CS-MSF控制上线简单总结

我这里只记录原理,具体操作看文章后半段或者这篇文章内网渗透—代理Socks协议、路由不出网、后渗透通讯、CS-MSF控制上线_内网渗透 代理-CSDN博客 注意这里是解决后渗透通讯问题,之后怎么提权,控制后面再说 背景 只有win7有网,其…

分层图像金字塔变压器

文章来源:hierarchical-image-pyramid-transformers 2024 年 2 月 5 日 本文介绍了分层图像金字塔变换器 (HIPT),这是一种新颖的视觉变换器 (ViT) 架构,设计用于分析计算病理学中的十亿像素全幻灯片图像 (WSI)。 HIPT 利用 WSI 固有的层次结…

Git系列:如何为不同的Git仓库设置不同的配置项?

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

毫米波雷达原理(含代码)(含ARS548 4D毫米波雷达数据demo和可视化视频)

毫米波雷达原理 1. 传统毫米波雷达1.1 雷达工作原理1.2 单目标距离估计1.3 单目标速度估计1.4 单目标角度估计1.5 多目标距离估计1.6 多目标速度估计1.7多目标角度估计1.7 总结 3. FMCW雷达数据处理算法4. 毫米波雷达的目标解析(含python代码)5. ARS548 4D毫米波雷达数据demo(含…

企业定制AI智能名片商城小程序:重塑营销场景,引领数字化营销新纪元

在数字化时代的浪潮中,多企业AI智能名片商城小程序以其独特的魅力和创新的功能,为消费者带来了前所未有的购物体验。它不仅是一个汇聚各类商品的购物平台,更是一个充满活力和创造力的社群生态。通过强化社群互动、鼓励用户生成内容以及引入积…

【RAG 博客】Haystack 中的 DiversityRanker 与 LostInMiddleRanker 用来增强 RAG pipelines

Blog:Enhancing RAG Pipelines in Haystack: Introducing DiversityRanker and LostInTheMiddleRanker ⭐⭐⭐⭐ 文章目录 Haystack 是什么1. DiversityRanker2. LostInTheMiddleRanker使用示例 这篇 blog 介绍了什么是 Haystack,以及如何在 Haystack 框…

加州大学欧文分校英语中级语法专项课程03:Tricky English Grammar 学习笔记

Tricky English Grammar Course Certificate Course Intro 本文是学习 https://www.coursera.org/learn/tricky-english-grammar?specializationintermediate-grammar 这门课的学习笔记 文章目录 Tricky English GrammarWeek 01: Nouns, Articles, and QuantifiersLearning …

WAAP动态安全解决方案

随着企业数字化进程不断加速,应用安全面临多重威胁,新型攻击方式层出不穷,常见的攻击形式包括Web应用攻击、DDoS攻击、API攻击、恶意爬虫攻击等。企业正面临严峻的安全防护挑战,需寻找一个可靠、全面的安全解决方案。在此情况下&a…

基于双层优化的电动汽车优化调度研究(附matlab程序)

基于双层优化的电动汽车优化调度研究 0.代码链接 基于双层优化的电动汽车优化调度研究(matlab程序)资源-CSDN文库 1.简述 关键词:双层优化 选址定容 输配协同 时空优化 参考文档:《考虑大规模电动汽车接入电网的双层优化调度策略_胡文平》…

【 书生·浦语大模型实战营】学习笔记(六):Lagent AgentLego 智能体应用搭建

🎉AI学习星球推荐: GoAI的学习社区 知识星球是一个致力于提供《机器学习 | 深度学习 | CV | NLP | 大模型 | 多模态 | AIGC 》各个最新AI方向综述、论文等成体系的学习资料,配有全面而有深度的专栏内容,包括不限于 前沿论文解读、…

Redis 实战之对象

Redis 实战 - 对象 对象的类型与编码类型编码和底层实现 字符串对象编码的转换字符串命令的实现 列表对象编码转换列表命令的实现 哈希对象编码转换哈希命令的实现 集合对象集合命令的实现 有序集合对象编码的转换有序集合命令的实现 类型检查与命令多态类型检查的实现多态命令…

嵌入式全栈开发学习笔记---C语言笔试复习大全7(编程题1~8)

目录 1、200~300之间能被3整除的数,5个一行输出; 2、求两个数的最大公约数、最小公倍数; 3、输入十个数,求出平均值; 4、通过编程实现,统计1~n有多少个9; 5、有1、2、3、4个数字&#xff0…

开源AI智能名片与B2B2C商城系统:打造私域流量的会员体系新篇章

在数字化浪潮的推动下,企业如何高效利用私域流量、构建强大的会员体系成为了市场竞争的关键。AI智能名片与B2B2C商城系统的结合,为企业提供了一个全新的解决方案。通过智能名片的个性化推荐和商城系统的精准营销,企业能够更有效地触达和沟通私…

ApiHug 官方站点

🤗 ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱,有温度,有质量,有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplacehttps://…

计算机等级考试2级(Python)知识点整理

计算机等级考试2级(Python)知识点整理 1.基础知识点(记忆、理解) 第1讲Python概述 01. 源代码 02. 目标代码 03. 编译和解释 04. 程序的基本编写方法 第2讲 Python语言基础(一) 01. 用缩进表示代码…

tomcat打开乱码修改端口

将UTF-8改成GBK 如果端口冲突,需要修改tomcat的端口

AJ-Report开源数据大屏 verification;swagger-ui RCE漏洞复现

0x01 产品简介 AJ-Report是一个完全开源的BI平台,酷炫大屏展示,能随时随地掌控业务动态,让每个决策都有数据支撑。多数据源支持,内置mysql、elasticsearch、kudu等多种驱动,支持自定义数据集省去数据接口开发,支持17+种大屏组件,不会开发,照着设计稿也可以制作大屏。三…

高级数据结构与算法习题(9)

一、判断题 1、Let S be the set of activities in Activity Selection Problem. Then the earliest finish activity am​ must be included in all the maximum-size subset of mutually compatible activities of S. T F 解析:F。设S是活动选择问题中的一…

每日OJ题_贪心算法二⑤_力扣870. 优势洗牌(田忌赛马)

目录 力扣870. 优势洗牌(田忌赛马) 解析代码 力扣870. 优势洗牌(田忌赛马) 870. 优势洗牌 难度 中等 给定两个长度相等的数组 nums1 和 nums2,nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引…