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将html转成PDF的实现代码(包含中文)
Mar 04 Python
深入浅析Python字符编码
Nov 12 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
python编程测试电脑开启最大线程数实例代码
Feb 09 Python
Win8下python3.5.1安装教程
Jul 29 Python
python3 中文乱码与默认编码格式设定方法
Oct 31 Python
python pands实现execl转csv 并修改csv指定列的方法
Dec 12 Python
Django文件存储 自己定制存储系统解析
Aug 02 Python
Python Opencv中用compareHist函数进行直方图比较对比图片
Apr 07 Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 Python
使用python爬取抖音app视频的实例代码
Dec 01 Python
python 用递归实现通用爬虫解析器
Apr 16 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循环语句 for()与foreach()用法区别介绍
2012/09/05 PHP
10个超级有用的PHP代码片段果断收藏
2015/09/23 PHP
phpStorm+XDebug+chrome 配置详解
2019/04/01 PHP
sina的lightbox效果。
2007/01/09 Javascript
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
js获取div高度的代码
2008/08/09 Javascript
JavaScript 对象模型 执行模型
2010/10/15 Javascript
Bootstrap+jfinal退出系统弹出确认框的实现方法
2016/05/30 Javascript
jQuery Easyui 下拉树组件combotree
2016/12/16 Javascript
详解puppeteer使用代理
2018/12/27 Javascript
vue实现搜索过滤效果
2019/05/28 Javascript
layui使用数据表格实现购物车功能
2019/07/26 Javascript
js 将多个对象合并成一个对象 assign方法的实现
2020/09/24 Javascript
python将html转成PDF的实现代码(包含中文)
2013/03/04 Python
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
python进阶教程之异常处理
2014/08/30 Python
python命令行参数解析OptionParser类用法实例
2014/10/09 Python
Python中分数的相关使用教程
2015/03/30 Python
python GUI实例学习
2017/11/21 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
2018/01/11 Python
python脚本作为Windows服务启动代码详解
2018/02/11 Python
python将字符串以utf-8格式保存在txt文件中的方法
2018/10/30 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
OpenCV模板匹配matchTemplate的实现
2019/10/18 Python
Python高级特性——详解多维数组切片(Slice)
2019/11/26 Python
使用pyshp包进行shapefile文件修改的例子
2019/12/06 Python
Python求平面内点到直线距离的实现
2020/01/19 Python
深入解析HTML5使用SVG图像时的viewBox属性用法
2015/09/02 HTML / CSS
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
采购部岗位职责
2013/11/24 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
2015年春节标语口号
2014/12/09 职场文书
单位接收函范文
2015/01/30 职场文书
小升初自荐信范文
2015/03/05 职场文书
2015年新农合工作总结
2015/03/30 职场文书
2015年社区教育工作总结
2015/05/13 职场文书