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 08 Python
Python迭代用法实例教程
Sep 08 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
Python中的并发处理之asyncio包使用的详解
Apr 03 Python
从numpy数组中取出满足条件的元素示例
Nov 26 Python
Python实现word2Vec model过程解析
Dec 16 Python
Python关于反射的实例代码分享
Feb 20 Python
Python解释器及PyCharm工具安装过程
Feb 26 Python
python实现图像全景拼接
Mar 27 Python
浅析python 定时拆分备份 nginx 日志的方法
Apr 27 Python
Python通过zookeeper实现分布式服务代码解析
Jul 22 Python
详解MindSpore自定义模型损失函数
Jun 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
php判断终端是手机还是电脑访问网站的思路及代码
2013/04/24 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
php计算数组不为空元素个数的方法
2014/01/27 PHP
PHP实现简单实用的分页类代码
2016/04/08 PHP
js技巧--转义符"\"的妙用
2007/01/09 Javascript
javascript编程起步(第五课)
2007/01/10 Javascript
jquery乱码与contentType属性设置问题解决方案
2013/01/07 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
JS中判断null、undefined与NaN的方法
2014/03/26 Javascript
node.js中的fs.appendFile方法使用说明
2014/12/17 Javascript
深入分析Cookie的安全性问题
2015/03/01 Javascript
javascript中Array()数组函数详解
2015/08/23 Javascript
Bootstrap零基础学习第一课之模板
2016/07/18 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
Vue实现购物车功能
2017/04/27 Javascript
对象不支持indexOf属性或方法的解决方法(必看)
2017/05/28 Javascript
angularJS利用ng-repeat遍历二维数组的实例代码
2017/06/03 Javascript
vue实现动态添加数据滚动条自动滚动到底部的示例代码
2018/07/06 Javascript
vue 基于element-ui 分页组件封装的实例代码
2018/12/10 Javascript
函数式编程入门实践(一)
2019/04/20 Javascript
弱类型语言javascript中 a,b 的运算实例小结
2019/08/07 Javascript
[01:51]2018年度CS GO最具人气外援-完美盛典
2018/12/16 DOTA
Python用GET方法上传文件
2015/03/10 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
Python稀疏矩阵及参数保存代码实现
2020/04/18 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
Wallis官网:英国女装零售商
2020/01/21 全球购物
UNIX文件类型
2013/08/29 面试题
领导调研接待方案
2014/02/27 职场文书
健康教育评估方案
2014/05/25 职场文书
个人年度总结报告
2015/03/09 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
三十年同学聚会感言
2015/07/30 职场文书
实习报告怎么写
2019/06/20 职场文书
Sentry的安装、配置、使用教程(Sentry日志手机系统)
2022/07/23 Python