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实现提取谷歌音乐搜索结果的方法
Jul 10 Python
python基础知识小结之集合
Nov 25 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
selenium+python环境配置教程详解
May 28 Python
Python+opencv 实现图片文字的分割的方法示例
Jul 04 Python
Python进程间通信 multiProcessing Queue队列实现详解
Sep 23 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
flask框架url与重定向操作实例详解
Jan 25 Python
python IDLE添加行号显示教程
Apr 25 Python
Python模拟登录和登录跳转的参考示例
Oct 30 Python
Django框架实现在线考试系统的示例代码
Nov 30 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
DC漫画《蝙蝠侠和猫女》图透 猫女怀孕老爷当爹
2020/04/09 欧美动漫
php采集时被封ip的解决方法
2010/08/29 PHP
php获取Google机器人访问足迹的方法
2015/04/15 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
PHP设计模式之数据访问对象模式(DAO)原理与用法实例分析
2019/12/12 PHP
XP折叠菜单&仿QQ2006菜单
2006/12/16 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
基于JavaScript实现轮播图代码
2016/07/14 Javascript
VUE多层路由嵌套实现代码
2017/05/15 Javascript
微信小程序chooseImage的用法(从本地相册选择图片或使用相机拍照)
2018/08/22 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
Python的迭代器和生成器使用实例
2015/01/14 Python
Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
2017/07/20 Python
深入理解Python3 内置函数大全
2017/11/23 Python
centos6.8安装python3.7无法import _ssl的解决方法
2018/09/17 Python
对python 多个分隔符split 的实例详解
2018/12/20 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
PYTHON发送邮件YAGMAIL的简单实现解析
2019/10/28 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
基于django 的orm中非主键自增的实现方式
2020/05/18 Python
详解纯CSS3制作的20种loading动效
2017/07/05 HTML / CSS
html5中的一些标签学习(心得)
2016/10/18 HTML / CSS
新西兰演唱会和体育门票网站:Ticketmaster新西兰
2017/10/07 全球购物
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
网络、C以及其他硬件方面的面试题
2016/08/23 面试题
个人应聘自我评价分享
2013/11/18 职场文书
毕业生个人求职信范例分享
2013/12/17 职场文书
幼儿园教师备课制度
2014/01/12 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
师范大学生求职信
2014/06/13 职场文书
个人租房协议书样本
2014/10/01 职场文书
2015年元旦联欢晚会活动总结
2014/11/28 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang