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统计列表中的重复项出现的次数的方法
Aug 18 Python
python使用socket远程连接错误处理方法
Apr 29 Python
Python实现数通设备端口使用情况监控实例
Jul 15 Python
利用Python中SocketServer 实现客户端与服务器间非阻塞通信
Dec 15 Python
python urllib urlopen()对象方法/代理的补充说明
Jun 29 Python
python学习--使用QQ邮箱发送邮件代码实例
Apr 16 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Python自动生成代码 使用tkinter图形化操作并生成代码框架
Sep 18 Python
Django的ListView超详细用法(含分页paginate)
May 21 Python
使用Python爬虫爬取小红书完完整整的全过程
Jan 19 Python
python多线程方法详解
Jan 18 Python
详解python的异常捕获
Mar 03 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
php输入数据统一类实例
2015/02/23 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
轻轻松松学习JavaScript
2007/02/25 Javascript
window.location.href = window.location.href 跳转无反应 a超链接onclick事件写法
2013/08/21 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
JS传递对象数组为参数给后端,后端获取的实例代码
2016/06/28 Javascript
Boostrap实现的登录界面实例代码
2016/10/09 Javascript
Javascript DOM事件操作小结(监听鼠标点击、释放,悬停、离开等)
2017/01/20 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
Java中int与integer的区别(基本数据类型与引用数据类型)
2017/02/19 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
vue实现Excel文件的上传与下载功能的两种方式
2019/06/28 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
解决Vue打包上线之后部分CSS不生效的问题
2019/11/12 Javascript
vue单元格多列合并的实现
2020/11/26 Vue.js
python实现从字典中删除元素的方法
2015/05/04 Python
Python迭代和迭代器详解
2016/11/10 Python
python实现简单中文词频统计示例
2017/11/08 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
Python3 中sorted() 函数的用法
2020/03/24 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
2021/03/02 Python
高中历史教学反思
2014/02/08 职场文书
购房意向书
2014/04/01 职场文书
作文评语大全
2014/04/23 职场文书
行政专员求职信范文
2014/05/03 职场文书
爱护公共设施的标语
2014/06/24 职场文书
企业挂职心得体会
2014/09/10 职场文书
关于工作经历的证明书
2014/10/11 职场文书
学生打架检讨书
2014/10/20 职场文书
店面出租协议书范本
2014/11/28 职场文书
网络管理员岗位职责
2015/02/12 职场文书
会计求职信怎么写
2015/03/20 职场文书
2015年公司行政后勤工作总结
2015/05/20 职场文书
《当代神农氏》教学反思
2016/02/23 职场文书