Python3使用PySynth制作音乐的方法


Posted in Python onSeptember 09, 2019

本人虽然五音不全,但是听歌还是很喜欢的。希望能利用机器自动制作音乐,本我发现了一个比较适合入门的有趣的开源音乐生成模块 PySynth ,文我们主要讲解下如何Python3使用PySynth制作音乐。

乐理

  •  声音:物体振动产生,振动次数越多,音越高;振动次数越少,音越低
  • 可闻:人耳可以听到的声音在每秒16-2000此左右 乐音:振动规则产生,听起来高低明显
  • 噪音:振动不规则产生,听起来高低不明显
  • 音乐:将声音通过艺术形象表达人们的思想感情
  • 音阶:do、re、mi、sol、la、(do)
  • 调性:C、D、E、F、G、A、B

安装

pip3 install pysynth

示例

import pysynth
# 例1:C大调
song1 = [
['c',4],['d',4],['e',4],['f',4],['g',4],['a',4],['b',4],['c5',2],['r',1],
['c3',4],['d3',4],['e3',4],['f3',4],['g3',4],['a3',4],['b3',4],['c4',2],['r',1],
['c1*', 1], ['c2*', 1], ['c3*', 1], ['c4*', 1], ['c5*', 1], ['c6*', 1], ['c7*', 1], ['c8*', 1],

]
pysynth.make_wav(song1, fn = "linuxidc.com.wav")

在当前目录下生成linuxidc.com.wav文件。

Python3使用PySynth制作音乐的方法

在Linux终端输入以下命令试听一下

[linuxidc@localhost www.linuxidc.com]$ aplay -D plughw:0,0 linuxidc.com.wav

Python3使用PySynth制作音乐的方法

试下周杰伦的晴天,bmp是67下每分钟:

import pysynth
songx=(('e3',8),('d3',8),('f3',8),('e3',4),('c3',8),('g3',8),('b3',8),('c4',8),('b3',8),('c3',8),('c3',4),('c3',8),('a3',8),('a3',8),
('r',16),('a3',16),('g3',8),('g3',4),('g3',8),('f3',8),('e3',8),('d3',8),('e3',8),('f3',8),('e3',2.25),('e3',8),('f#3',8),('g#3',8),
('e3',4),('f3',8),('g3',8),('b3',8),('d4',8),('b3',8),('c4',8),('c4',6),('c4',16),('c4',8),('g3',8),('g3',8),('a3',8),('g3',8),('f3',8),
('a2',8),('b2',8),('c3',8),('d3',8),('e3',8),('d3',3),('e3',8),('c3',2))
pysynth.make_wav(songx, bpm=67, repeat=0, fn="linuxidc.wav")

Python3使用PySynth制作音乐的方法

随机生成中国风音乐旋律

import pysynth
import numpy as np
import re
#先限定音符12356 中国风五声调式 这样听起来比较自然
notes=np.array(["c4","d4","e4","g4","a4",])
#音符时值
durations=np.array([1,2,4,-2,-4,-8])
#随机生成音符 重音穿插其中
sn=[]
for t in range(16):
n=np.random.randint(0,len(notes))
note=notes[n]+"*"
sn.append(note)
for i in range(np.random.randint(3,5)):
note0=notes[np.random.randint(0,len(notes))]
sn.append(note0)
#随机生成音符时值序列 形成长短参差变幻的节奏
dn=[]
for i in range(len(sn)):
duration=durations[np.random.randint(0,len(durations))]
nn=sn[i]
dn.append(duration)
#将音符和时值合并成旋律
melody=tuple(zip(sn,dn))
print(melody)
#将乐谱合成到声音文件
pysynth.make_wav(melody,fn =r"linuxmi.com.wav")
print("ok")

备注:

'song' 是一个被定义的列表或元组,格式是这样 ['音', 长度]

音符是'a','g'这些; 升半音以 '#' 表示,降半音以 'b' 表示;以octave 结束 (默认为四分音符);asterisk 在最后代表重音; 'r' 是空.

音的长度用数字表示:1=全音符; 2=二分音符; 4=四分音符, 等.

浮点音符写法:

1.33 = -2 = 二分浮点音符

2.66 = -4 = 四分浮点音符

5.33 = -8 = 八分浮点音符

一些参数:

节奏:每分钟节拍数;  bpm = 95

八度转变 (neg. 降八度; pos. 升八度); transpose = 0

音符间停顿 (0. = 连音 ;  0.5 = 断音); pause = 0.05

Volume boost:音量变高 (1. = 音量无变化);  boost = 1.2

Output file name 输出文件名;fn = 'pysynth_output.wav'

其他参数:

Influences the decay of harmonics over frequency. Lowering the value eliminates even more harmonics at high frequencies.

Suggested range: between 3. and 5., depending on the frequency response  of speakers/headphones used

harm_max = 4.

总结

以上所述是小编给大家介绍的Python3使用PySynth制作音乐的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
Python中获取对象信息的方法
Apr 27 Python
深入浅析python定时杀进程
Jun 06 Python
python爬虫实现教程转换成 PDF 电子书
Feb 19 Python
Python实现改变与矩形橡胶的线条的颜色代码示例
Jan 05 Python
Python实现的用户登录系统功能示例
Feb 05 Python
使用Windows批处理和WMI设置Python的环境变量方法
Aug 14 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
Django中的模型类设计及展示示例详解
May 29 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
Keras自定义IOU方式
Jun 10 Python
python运行脚本文件的三种方法实例
Jun 25 Python
python智联招聘爬虫并导入到excel代码实例
Sep 09 #Python
python 的 openpyxl模块 读取 Excel文件的方法
Sep 09 #Python
pymysql模块的使用(增删改查)详解
Sep 09 #Python
Django之模板层的实现代码
Sep 09 #Python
Django模板语言 Tags使用详解
Sep 09 #Python
Python中turtle库的使用实例
Sep 09 #Python
Django之路由层的实现
Sep 09 #Python
You might like
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
PHP获取当前url的具体方法全面解析
2013/11/26 PHP
PHP实现创建一个RPC服务操作示例
2020/02/23 PHP
Mootools 1.2教程 输入过滤第一部分(数字)
2009/09/15 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
AngularJS中的指令全面解析(必看)
2016/05/20 Javascript
jQuery实现拖拽页面元素并将其保存到cookie的方法
2016/06/12 Javascript
JavaScript 中调用 Kotlin 方法实例详解
2017/06/09 Javascript
JS实现批量上传文件并显示进度功能
2017/06/27 Javascript
基于hover的用法实例(推荐)
2017/07/04 Javascript
JQuery实现ajax请求的示例和注意事项
2018/12/10 jQuery
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
vue + node如何通过一个Txt文件批量生成MP3并压缩成Zip
2020/06/02 Javascript
如何实现echarts markline标签名显示自己想要的
2020/07/20 Javascript
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
Python中的choice()方法使用详解
2015/05/15 Python
10 行 Python 代码教你自动发送短信(不想回复工作邮件妙招)
2018/10/11 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
python yield和Generator函数用法详解
2020/02/10 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
利物浦足球俱乐部官方商店(美国):Liverpool FC US
2019/10/09 全球购物
大学生毕业求职简历的自我评价
2013/10/24 职场文书
追悼会主持词
2014/03/20 职场文书
《风娃娃》教学反思
2014/04/19 职场文书
大班亲子运动会方案
2014/06/10 职场文书
小学生竞选班干部演讲稿(5篇)
2014/09/12 职场文书
反四风对照检查材料
2014/09/22 职场文书
社区党支部承诺书
2015/04/29 职场文书
小鞋子观后感
2015/06/05 职场文书
创业计划书之废品回收
2019/09/26 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
mongodb清除连接和日志的正确方法分享
2021/09/15 MongoDB