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中enumerate的用法实例解析
Aug 18 Python
python编写暴力破解FTP密码小工具
Nov 19 Python
Python+tkinter使用40行代码实现计算器功能
Jan 30 Python
Python实现字典(dict)的迭代操作示例
Jun 05 Python
详解DeBug Python神级工具PySnooper
Jul 03 Python
解决python 文本过滤和清理问题
Aug 28 Python
Python List列表对象内置方法实例详解
Oct 22 Python
wxPython实现分隔窗口
Nov 19 Python
wxpython多线程防假死与线程间传递消息实例详解
Dec 13 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
解决pytorch下出现multi-target not supported at的一种可能原因
Feb 06 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
广播爱好者需要了解的天线知识
2021/03/01 无线电
需要注意的几个PHP漏洞小结
2012/02/05 PHP
php随机显示图片的简单示例
2014/02/15 PHP
php+memcache实现的网站在线人数统计代码
2014/07/04 PHP
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
在UpdatePanel内jquery easyui效果失效的解决方法
2010/04/11 Javascript
javascript instanceof 内部机制探析
2010/10/15 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
jquery创建一个ajax关键词数据搜索实现思路
2013/02/26 Javascript
JavaScript实现Fly Bird小游戏
2016/12/15 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
jQuery实现模糊搜索功能的方法分析
2018/06/29 jQuery
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
如何测量vue应用运行时的性能
2019/06/21 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
vue前端和Django后端如何查询一定时间段内的数据
2021/02/28 Vue.js
[01:32]DOTA2上海特锦赛现场采访:最想COS的英雄
2016/03/25 DOTA
Python过滤列表用法实例分析
2016/04/29 Python
python主线程捕获子线程的方法
2018/06/17 Python
python英语单词测试小程序代码实例
2019/09/09 Python
nginx搭建基于python的web环境的实现步骤
2020/01/03 Python
python利用paramiko实现交换机巡检的示例
2020/09/22 Python
python3排序的实例方法
2020/10/20 Python
C/C++程序员常见面试题二
2015/11/19 面试题
int *p=NULL和*p= NULL有什么区别
2014/10/23 面试题
三年级科学教学反思
2014/01/29 职场文书
体操比赛口号
2014/06/10 职场文书
工作目标责任书
2014/07/23 职场文书
运动会稿件100字
2014/09/24 职场文书
2014年员工工作总结范文
2014/11/18 职场文书
2014年环境整治工作总结
2014/12/10 职场文书
邀请函怎么写
2015/01/30 职场文书
保送生自荐信
2015/03/06 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
运动会广播稿100字
2015/08/19 职场文书
基于python的matplotlib制作双Y轴图
2021/04/20 Python