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的SimPy库简化复杂的编程模型的介绍
Apr 13 Python
python操作ssh实现服务器日志下载的方法
Jun 03 Python
python3音乐播放器简单实现代码
Apr 20 Python
python数据结构之链表详解
Sep 12 Python
Python爬虫番外篇之Cookie和Session详解
Dec 27 Python
Pandas数据离散化原理及实例解析
Nov 16 Python
python GUI库图形界面开发之PyQt5信号与槽的高级使用技巧装饰器信号与槽详细使用方法与实例
Mar 06 Python
jupyter notebook 恢复误删单元格或者历史代码的实现
Apr 17 Python
Python如何使用正则表达式爬取京东商品信息
Jun 01 Python
python基本算法之实现归并排序(Merge sort)
Sep 01 Python
Python jieba结巴分词原理及用法解析
Nov 05 Python
Django用户认证系统如何实现自定义
Nov 12 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/03 冲泡冲煮
PHP常用特殊运算符号和函数总结(php新手入门必看)
2013/02/02 PHP
Zend Framework框架Smarty扩展实现方法
2016/03/22 PHP
PHP5.4起内置web服务器使用方法
2016/08/09 PHP
javascript中文本框中输入法切换的问题
2013/12/10 Javascript
设置jsf的选择框h:selectOneMenu为不可编辑状态的方法
2014/01/07 Javascript
JS中使用sort结合localeCompare实现中文排序实例
2014/07/23 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
js带缩略图的图片轮播效果代码分享
2015/09/14 Javascript
JS实现很实用的对联广告代码(可自适应高度)
2015/09/18 Javascript
基于javascript制作微信聊天面板
2020/08/09 Javascript
关于session和cookie的简单理解
2016/06/08 Javascript
js重写方法的简单实现
2016/07/10 Javascript
聊一聊jQuery插件uploadify使用方法
2016/08/24 Javascript
jQuery常见的选择器及用法介绍
2016/12/20 Javascript
webpack配置导致字体图标无法显示的解决方法
2018/03/06 Javascript
JS严格模式原理与用法实例分析
2020/04/27 Javascript
python 参数列表中的self 显式不等于冗余
2008/12/01 Python
python之PyMongo使用总结
2017/05/26 Python
Python中矩阵库Numpy基本操作详解
2017/11/21 Python
利用python在大量数据文件下删除某一行的例子
2019/08/21 Python
Python3直接爬取图片URL并保存示例
2019/12/18 Python
python对一个数向上取整的实例方法
2020/06/18 Python
python 最简单的实现适配器设计模式的示例
2020/06/30 Python
网页切图的CSS和布局经验与要点
2015/04/09 HTML / CSS
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
高校生生产实习自我鉴定
2013/09/21 职场文书
保卫科工作岗位职责
2014/03/01 职场文书
光信息科学与技术专业职业生涯规划
2014/03/13 职场文书
四年级评语大全
2014/04/21 职场文书
高二学年自我鉴定范文(2篇)
2014/09/26 职场文书
高三语文复习计划
2015/01/19 职场文书
试用期旷工辞退通知书
2015/04/17 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
关于mysql中string和number的转换问题
2022/06/14 MySQL