基础知识

MIDI文件头:4d 54 68 64 00 00 00 06 ff ff nn nn dd dd
4d 54 68 64:MThd
00 00 00 06:数据区长度六字节
ff ff:00 00-单音轨;00 01-多个同步音轨;00 10-多个不同步音轨
nn nn:音轨数目(含全局音轨和演奏音轨)
dd dd:最高位为标记位,0为采用ticks计时,后面的数据为一个4分音符的ticks;1为SMPTE格式计时,后面的数值则是定义每秒中SMTPE帧的数量及每个SMTPE帧的tick
Mido
一、使用指导:
通过pip命令安装:

pip install mido

推荐使用清华镜像源:

pip install mido -i https://pypi.tuna.tsinghua.edu.cn/simple

使用前import mido即可
二、打开
通过

mid=mido.MidiFile(“绝对路径或同目录下文件名”)

打开指定midi文件
每个音轨单独读取指令为`

track_n=mido.MidiTrack(mid.tracks[n])

(n从0开始)
track.name可直接获取音轨名称,每个消息可按照下标单个读取
同时MidiTrack()MidiFile()也可用作新音轨和新文件新建命令

三、遍历读取
示例代码:

import mido
mid = mido.MidiFile(“test.mid”)
for i, track in enumerate(mid.tracks):#enumerate():创建索引序列,索引初始为0print('Track {}: {}'.format(i, track.name))for msg in track:#每个音轨的消息遍历print(msg)

每个midi文件由多个音轨组成,mido称音轨为Track,其中Track 0 一般是全局音轨,其后跟随演奏音轨。
每个音轨包含若干条消息,消息可解释为相应音符,一般在全局音轨中放置元消息(mate massages)来指定mid文件的相关参数(速度/音轨数等)

mid.length=(以秒为单位的演奏总长度,float)
mid.type=(此midi文件类型)

.is_mate可以返回判定是否是元消息

消息相关:
Message(type,note=60,velocity=96,time=480)

消息设定代码(示例)

track.append(mido.Message(type,note=60,velocity=96,time=480))

type 这个参数确定信号的类型(str)。基本的为note_on作为音符开始,note_off作为音符终止。
note 这个参数确定音符的音高。60代表中央C,每增加12,音高升高一个八度。
velocity 这个参数确定音符的音量。0表示静音,127表示最大音量。
time 这个参数确定消息所在的时间。这个时间以tick为单位,而在mido的默认配置中,1拍中有480个tick。所以要想生成一个长度为1拍的音符,应该设置其time值为480,而不是1。
注:time用480*n来表示会比较省力
另注:time是指这条消息与上一条消息的时间差(结尾对结尾)
四、参数设置
A音色

track.append(mido.Message('program_change', program=1, time=0))

其中,program参数确定了这个音轨的音色。
另注:除了打击乐通道以外,音色的默认值为Piano 1。
B曲速

track.append(mido.MetaMessage('set_tempo', tempo=500000, time=0))

其中,tempo参数确定了乐曲的速度。
tempo 值的含义是每一拍为多少微秒。500000表示每一拍为0.5秒(1us=1e6s),即每分钟120拍。bpm和tempo的换算公式为

bpm=(6×10^7)/tempo

C设置音轨名称
音轨名称

track.append(mido.MetaMessage('track_name', name='Piano', time=0))

其中,name参数确定了音轨的名称。
五、文件保存

mid.save(‘路径’)

MIDI文件基础及使用Python库mido操作MIDI文件相关推荐

  1. python分析pcap文件_利用Python库Scapy解析pcap文件的方法

    每次写博客都是源于纳闷,python解析pcap这么常用的例子网上竟然没有,全是一堆命令行执行的python,能用吗?玩呢? pip安装scapy,然后解析pcap: import scapy fro ...

  2. python库——h5py读取h5文件

    h5py读取h5文件 h5文件像文件夹一样,可以在组里新建子组,最后子组里新建dataset 现在我们来读取h5文件中的各级组名称和dataset #打开文件 f = h5py.File('E:\PI ...

  3. python中读取文件内容-深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  4. python读取pdf文件_深入学习python解析并读取PDF文件内容的方法

    这篇文章主要学习了python解析并读取PDF文件内容的方法,包括对学习库的应用,python2.7和python3.6中python解析PDF文件内容库的更新,包括对pdfminer库的详细解释和应 ...

  5. python解压到指定文件夹_在Python中压缩和解压文件

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 如果你已经使用计算机一段时间,你可能遇到了.zip扩展名的文件.它们是可以保存许多其他文件,文件夹和子文件 ...

  6. python 文档操作_Python 文件操作

    一. Python 读写 创建文件 Python中对文件,文件夹(文件操作函数)的操作需要涉及到OS 模块和 shutil 模块 . 一) . OS模块 的基本操作 方法 功能 os.getcwd() ...

  7. python 文件上传下载,python实现上传下载文件功能

    最近刚学python,遇到上传下载文件功能需求,记录下! django web项目,前端上传控件用的是uploadify. 文件上传 - 后台view 的 Python代码如下: @csrf_exem ...

  8. python的写操作_Python—文件读写操作

    初识文件操作 使用open()函数打开一个文件,获取到文件句柄,然后通过文件句柄就可以进行各种各样的操作了,根据打开文件的方式不同能够执行的操作也会有相应的差异. 打开文件的方式: r, w, a, ...

  9. python的open打开中文文件_Python笔记 —— 使用open打开和操作txt文件

    打开:有两种方式 with open(r"data.txt", "r", encoding="utf-8") as f: f = open( ...

  10. python文件读写用到的库_python 读写txt文件并用jieba库进行中文分词

    python用来批量处理一些数据的第一步吧. 对于我这样的的萌新.这是第一步. #encoding=utf-8 file='test.txt'fn=open(file,"r")pr ...

最新文章

  1. android中文字中间有超链接的实现方法
  2. java lamdba表达式效率_java8新特性Lambda表达式为什么运行效率低
  3. 在linux系统JDK安装中文字体
  4. 前端工程构建工具——Yeoman
  5. JS之 if语句函数 对接事件动作 函数更改css css对接需要换妆的区id或class
  6. JavaScript学习随记——对象
  7. 天气预报API接口 : 城市对应码(中国天气网)
  8. python两个数组合并、找出中位数_leetcode刷题记录-找出这两个有序数组的中位数(python版本)...
  9. windows server 2008 r2 x64 enterprise service pack1中aspjpeg.dll安装
  10. 函数参数中的中括号代表什么
  11. 状态空间模型与传递函数的转换关系+例题
  12. 学习MyBatis-Plus
  13. QT修改QPushButton的背景色和文字颜色
  14. htb_Escape (mssql渗透,winrm)
  15. JAVA中 什么是方法签名?what is method signature in java
  16. 实验吧-密码学(三)
  17. 怎么把HTML文件拉出来,怎么把网页HTML格式的文件
  18. Microsoft Excel 教程:如何在 Excel 中使用 XLOOKUP 函数?
  19. 单片机多功能电子琴课设_基于51单片机的电子琴设计
  20. 一文读懂马云、马化腾、李彦宏、库克等互联网大佬们都在乌镇干了啥

热门文章

  1. SMA、SPI、LTE
  2. 异速联客户端可以删除服务器文件,异速联客户端怎么连接服务器
  3. 【云计算】云的七大分类定义说明
  4. MySQL数据库语句
  5. windows下批量更改文件后缀
  6. mysql的update条件语句_MySQL UPDATE语句介绍
  7. Java汽车销售系统
  8. Win7英文版安装中文语言包过程及方法总结
  9. steam加速_追梦加速器:Steam一周销量前十榜单,你的游戏排第几?
  10. vue相关插件及框架全家桶