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实现的各种排序算法代码
Mar 04 Python
Python将阿拉伯数字转换为罗马数字的方法
Jul 10 Python
python中常用的九种预处理方法分享
Sep 11 Python
Python学习小技巧之利用字典的默认行为
May 20 Python
python中通过预先编译正则表达式提高效率
Sep 25 Python
Random 在 Python 中的使用方法
Aug 09 Python
使用python读取.text文件特定行的数据方法
Jan 28 Python
安装docker-compose的两种最简方法
Jul 30 Python
Python 3 判断2个字典相同
Aug 06 Python
pytorch多进程加速及代码优化方法
Aug 19 Python
Python 共享变量加锁、释放详解
Aug 28 Python
python实现梯度法 python最速下降法
Mar 24 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 数据库字段复用的基本原理与示例
2011/07/22 PHP
PHP数组传递是值传递而非引用传递概念纠正
2013/01/31 PHP
解析php file_exists无效的解决办法
2013/06/26 PHP
PHP基于GD库的缩略图生成代码(支持jpg,gif,png格式)
2014/06/19 PHP
php unlink()函数使用教程
2018/07/12 PHP
[对联广告] JS脚本类
2006/08/27 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
2011/03/25 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
解决jquery操作checkbox火狐下第二次无法勾选问题
2014/02/10 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
angularJS 中input示例分享
2015/02/09 Javascript
JQuery球队选择实例
2015/05/18 Javascript
详谈javascript异步编程
2016/02/21 Javascript
js仿支付宝填写支付密码效果实现多方框输入密码
2016/03/09 Javascript
Bootstrap模态框使用详解
2017/02/15 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
vue router下的html5 history在iis服务器上的设置方法
2017/10/18 Javascript
Vue 中的compile操作方法
2018/02/26 Javascript
基于vue实现移动端圆形旋钮插件效果
2018/11/28 Javascript
vue中获取滚动table的可视页面宽度调整表头与列对齐(每列宽度不都相同)
2019/08/17 Javascript
JavaScript中的this/call/apply/bind的使用及区别
2020/03/06 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
python tornado微信开发入门代码
2018/08/24 Python
Pytorch 卷积中的 Input Shape用法
2020/06/29 Python
美国翻新电子产品商店:The Store
2019/10/08 全球购物
自我鉴定书面格式
2014/01/13 职场文书
运动会四百米广播稿
2014/01/19 职场文书
英语国培研修感言
2014/02/13 职场文书
《与朱元思书》的教学反思
2014/04/17 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
小学四年级学生评语
2014/12/26 职场文书
2015年试用期工作总结范文
2015/05/28 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书
【海涛dota解说】一房久违的影魔魂守二连发
2022/04/01 DOTA