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模拟登陆实现代码
Jun 14 Python
使用python获取csv文本的某行或某列数据的实例
Apr 03 Python
对python numpy数组中冒号的使用方法详解
Apr 17 Python
opencv python 2D直方图的示例代码
Jul 20 Python
Python实现Event回调机制的方法
Feb 13 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
Jun 13 Python
Python3分析处理声音数据的例子
Aug 27 Python
pytorch 数据处理:定义自己的数据集合实例
Dec 31 Python
在PyCharm中实现添加快捷模块
Feb 12 Python
Python爬虫设置Cookie解决网站拦截并爬取蚂蚁短租的问题
Feb 22 Python
解决hive中导入text文件遇到的坑
Apr 07 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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文件向另一个地址post数据,不用表单和隐藏的变量的
2007/03/06 PHP
详谈php ip2long 出现负数的原因及解决方法
2017/04/05 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
Javascript 兼容firefox的一些问题
2009/05/21 Javascript
Extjs学习笔记之二 初识Extjs之Form
2010/01/07 Javascript
JS 实现导航栏悬停效果
2013/09/23 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
运用js教你轻松制作html音乐播放器
2020/04/17 Javascript
详解利用jsx写vue组件的方法示例
2017/07/17 Javascript
用Vue-cli搭建的项目中引入css报错的原因分析
2017/07/20 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
详解EasyUi控件中的Datagrid
2017/08/23 Javascript
vue使用iframe嵌入网页的示例代码
2020/06/09 Javascript
Mac下安装vue
2018/04/11 Javascript
nodejs使用node-xlsx生成excel的方法示例
2019/08/22 NodeJs
微信小程序如何实现精确的日期时间选择器
2020/01/21 Javascript
如何在微信小程序中使用骨架屏的步骤
2020/06/12 Javascript
JS数组reduce()方法原理及使用技巧解析
2020/07/14 Javascript
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
python3 selenium 切换窗口的几种方法小结
2018/05/21 Python
基于python及pytorch中乘法的使用详解
2019/12/27 Python
python 连续不等式语法糖实例
2020/04/15 Python
keras K.function获取某层的输出操作
2020/06/29 Python
详解python os.path.exists判断文件或文件夹是否存在
2020/11/16 Python
python中翻译功能translate模块实现方法
2020/12/17 Python
python 实现图片裁剪小工具
2021/02/02 Python
日本7net购物网:书籍、漫画、杂志、DVD、游戏邮购
2017/02/17 全球购物
BannerBuzz加拿大:在线定制横幅印刷、广告和标志
2020/03/10 全球购物
计算机专业自我鉴定
2013/10/15 职场文书
微笑服务标语
2014/06/24 职场文书
四风剖析查摆对照检查材料思想汇报
2014/09/24 职场文书
幼儿园园长新年寄语2015
2014/12/08 职场文书
解约证明模板
2015/06/19 职场文书
导游词之黄帝陵景区
2019/09/16 职场文书
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
在 Python 中利用 Pool 进行多线程
2022/04/24 Python