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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
pygame学习笔记(6):完成一个简单的游戏
Apr 15 Python
web.py在SAE中的Session问题解决方法(使用mysql存储)
Jun 24 Python
一步步教你用Python实现2048小游戏
Jan 19 Python
django 常用orm操作详解
Sep 13 Python
Python编程之gui程序实现简单文件浏览器代码
Dec 08 Python
Python使用字典的嵌套功能详解
Feb 27 Python
Django框架视图函数设计示例
Jul 29 Python
Python字典dict常用方法函数实例
Nov 09 Python
python实现KNN近邻算法
Dec 30 Python
python中time.ctime()实例用法
Feb 03 Python
Django如何与Ajax交互
Apr 29 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对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
jQuery使用手册之 事件处理
2007/03/24 Javascript
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
基于jquery实现的可以编辑选择的下拉框的代码
2010/11/19 Javascript
JavaScript输入邮箱自动提示实例代码
2014/01/13 Javascript
JavaScript作用域链示例分享
2014/05/27 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
AngularJS内建服务$location及其功能详解
2016/07/01 Javascript
BootStrap 超链接变按钮的实现方法
2016/09/25 Javascript
使用ReactJS实现tab页切换、菜单栏切换、手风琴切换和进度条效果
2016/10/17 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
jQuery插件FusionCharts绘制的2D条状图效果【附demo源码】
2017/05/13 jQuery
Vue2.0父组件与子组件之间的事件发射与接收实例代码
2017/09/19 Javascript
vue2里面ref的具体使用方法
2017/10/27 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
ES6对象操作实例详解
2020/05/23 Javascript
JavaScript实现简单动态表格
2020/12/02 Javascript
Python 操作MySQL详解及实例
2017/04/30 Python
Python实现正弦信号的时域波形和频谱图示例【基于matplotlib】
2018/05/04 Python
Django 外键的使用方法详解
2019/07/19 Python
在tensorflow中设置保存checkpoint的最大数量实例
2020/01/21 Python
Python urllib2运行过程原理解析
2020/06/04 Python
Python爬虫进阶之爬取某视频并下载的实现
2020/12/08 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
CSS3实现跳动的动画效果
2016/09/12 HTML / CSS
详解px单位html5响应式方案
2018/03/08 HTML / CSS
竞聘医务工作人员的自我评价分享
2013/11/04 职场文书
土木工程专业个人求职信
2013/12/05 职场文书
数学教研活动总结
2014/07/02 职场文书
银行授权委托书范本
2014/10/04 职场文书
酒店工程部经理岗位职责
2015/04/09 职场文书
维护民族团结心得体会2016
2016/01/15 职场文书
Pygame游戏开发之太空射击实战敌人精灵篇
2022/08/05 Python
输入框跟随文字内容适配宽实现示例
2022/08/14 Javascript