什么是MIDI

博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的。我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深度学习写歌词已经实现了,之后会分享给大家),本文我们主要聊下如何写曲。

说到用代码写曲子,有一个东西大家一定要了解就是MIDI。MIDI是一种乐器数字接口,是编曲界最广泛的音乐标准格式。MIDI并不是真正意义上的音乐文件,大家可以把它理解成乐谱,需要有环境编译MIDI文件,才可以生成音乐。这个关系有点像代码和编译器的关系。市面上可以解析MIDI文件的软件有很多种,本文将用到MuseScore2的软件,以下就是这个软件的截图,界面中的五线谱就是MIDI文件的呈现。这个乐谱是可以播放的,并且可以导出为MP3格式的音乐文件。 

下面我们就介绍下生成MIDI文件所使用的Python库。

python-midi库介绍

市面上差不多有十多种python库可以编写MIDI格式的文件,本文会推荐大家使用PYTHON-MIDI。我觉得python-midi的优势是不光可以自己写程序生成MIDI,而且还可以对MIDI文件进行解析。这样的功能配合机器学习算法,或许可以帮助我们实现机器的自动编曲,当然这是后话。先来看下如何安装python-midi。

1.首先进入https://github.com/vishnubob/python-midi#Installation,将整个项目克隆下来。

2.在程序目录下执行以下命令安装,

python setup.py install
  • 1

  • 1

3.如果想执行某个以mid为后缀的MIDI文件,只要执行以下命令即可:

mididump.py test.mid
  • 1

  • 1

接下来介绍下如何写代码生成midi文件。

实操

在python-midi库中,每个乐谱用Pattern对象表示,乐谱中的每个音轨(通常音乐都有很多轨道组成,每种乐器是一个轨道)用Track对象表示。每个音符的开端用midi.NoteOnEvent表示,结束用midi.NoteOffEvent表示,可以在参数中定义每个字符的音长和音高。示例代码如下:

生成的是一个简单的音阶: 

更多有趣的音乐生成代码和样例可以关注我的微信公众号进行下载,进入公众号,输入“music”显示下载链接,谢谢。 

如何用PYTHON代码写出音乐的更多相关文章

  1. [置顶] 如何用PYTHON代码写出音乐

    如何用PYTHON代码写出音乐 什么是MIDI 博主本人虽然五音不全,而且唱歌还很难听,但是还是非常喜欢听歌的.我一直在做这样的尝试,就是通过人工智能算法实现机器自动的作词和编曲(在这里预告下,通过深 ...

  2. (转)Python新手写出漂亮的爬虫代码2——从json获取信息

    https://blog.csdn.net/weixin_36604953/article/details/78592943 Python新手写出漂亮的爬虫代码2——从json获取信息好久没有写关于爬 ...

  3. (转)Python新手写出漂亮的爬虫代码1——从html获取信息

    https://blog.csdn.net/weixin_36604953/article/details/78156605 Python新手写出漂亮的爬虫代码1初到大数据学习圈子的同学可能对爬虫都有 ...

  4. CSS代码写出的各种形状图形

    做网页设计时经常要用到各种形状的图形,对于规则的图形很简单,但是对于不规则的图形,一般我们都是用图片,今天就在这里教大家怎样用css代码写出各种规则不同的图形 1.正方形 #square {width ...

  5. 教你用CSS代码写出的各种形状图形

    做网页设计时经常要用到各种形状的图形,对于规则的图形很简单,但是对于不规则的图形,一般我们都是用图片,今天就在这里教大家怎样用css代码写出各种规则不同的图形 1.正方形 #square {width ...

  6. 程序员面试京东前端,现场JavaScript代码写出魔方特效

    程序员面试京东前端,现场JS代码写出魔方特效,成功搞定20K月薪 今天小编我逛论坛,看到了一位程序员小伙子,因为是有了两年工作经验,然后去京东面试前端岗,一面二面轻松就过了,到了技术面这一块,小伙干脆 ...

  7. 用最简单的代码写出banner图轮播效果

    以下视频是由[赵一鸣随笔]博客提供的“用最简单的代码写出banner图轮播效果”. 查看全屏高清视频,请点击链接:http://www.zymseo.com/58.html

  8. JS函数 编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数。

    编程练习 使用javascript代码写出一个函数:实现传入两个整数后弹出较大的整数. 任务 第一步: 编写代码完成一个函数的定义吧. 第二步: 我们来补充函数体中的控制语句,完成函数功能吧. 提示: ...

  9. python 之路,200行Python代码写了个打飞机游戏!

    早就知道pygame模块,就是没怎么深入研究过,恰逢这周未没约到妹子,只能自己在家玩自己啦,一时兴起,花了几个小时写了个打飞机程序. 很有意思,跟大家分享下. 先看一下项目结构 "" ...

随机推荐

  1. 玲珑杯#20 C 漆黑的太阳——莫队

    题目:https://www.ifrog.cc/acm/problem/1155 题解:https://www.ifrog.cc/acm/solution/28 1.如何不重复计算一个值 自己想的是对 ...

  2. Mark Zuckberg: A letter to our daughter

    转自:   http://www.fastcompany.com/3054120/fast-feed/read-mark-zuckerbergs-letter-to-his-newborn-daugh ...

  3. Linux的环境配置文件----.bashrc文件

    .bashrc文件主要保存个人的一些个性化设置,如命令别名.路径等.也即在同一个服务器上,只对某个用户的个性化设置相关.它是一个隐藏文件,需要使用ls -a来查看. .bash_history   记 ...

  4. mkdir:创建目录

    mkdir:命令 1.命令详解 [功能说明] mkdir命令是“make  directories”中每个单词的粗体字母组合而成,其功能是创建目录,默认情况下,如果要创建的目录已经存在,则会提示此文件 ...

  5. Spring Cloud 各个组件介绍

    从上图可以看出 Spring Cloud 各个组件相互配合,合作支持了一套完整的微服务架构: Eureka 负责服务的注册与发现,很好地将各服务连接起来. Hystrix 负责监控服务之间的调用情况, ...

  6. 多层下firebird自增长字段的处理

    使用unidac可以解决自增长字段处理的问题. 对于多层就是一个比较烦人的事情,解决办法:cliendataset中自增长字段的处理:id:自增长字段.在client中的处理方法:clientdata ...

  7. 2018ICPC南京

    可能上一次秦皇岛拿了银,有了偶像包袱? 打的时候感觉状态不是很好. 第一题,让你每次将连续一段区间的石头都拿掉.. 然后让你做个博弈. 橘子一顿分析,认为k+1的倍数都是输. 这时,我们以及默认i+1 ...

  8. 部署项目到tomcat时 访问项目404的问题总结

    使用tomcat服务器运行项目之前  需要把项目发布到(部署)tomcat上,然后启动服务器  运行项目 今天把以往正常运行的项目发布之后,运行时   竟然出现404  关键还不是我路径写错了   而 ...

  9. SSH框架下单元测试的实现

    SSH框架下单元测试的实现 实现的功能 实现了部门的增删改查 对Action进行了单元测试 对Service 进行了单元测试,通过mock的方式实现. 实现的步骤 一.对Action层的单元测试实现 ...

  10. Wireshark中的一些SNMP相关的过滤器

    Wireshark中的一些SNMP相关的过滤器 转自 http://linmingren2003.blog.163.com/blog/static/567510032011419825097/   由 ...