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正则表达式去掉数字中的逗号(python正则匹配逗号)
Dec 25 Python
python实现斐波那契递归函数的方法
Sep 08 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
Python初学时购物车程序练习实例(推荐)
Aug 08 Python
python实现发送邮件功能代码
Dec 14 Python
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
Apr 19 Python
使用APScheduler3.0.1 实现定时任务的方法
Jul 22 Python
python自动发微信监控报警
Sep 06 Python
利用python实现逐步回归
Feb 24 Python
Python-for循环的内部机制
Jun 12 Python
使用Python封装excel操作指南
Jan 29 Python
python实现图片九宫格分割的示例
Apr 25 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正则校验用户名介绍
2008/07/19 PHP
php imagecreatetruecolor 创建高清和透明图片代码小结
2010/05/15 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
php处理带有中文URL的方法
2016/07/11 PHP
laravel Validator ajax返回错误信息的方法
2019/09/29 PHP
PHP命名空间(namespace)原理与用法详解
2019/12/11 PHP
jquery 插件开发备注
2010/08/27 Javascript
JS操作Cookies的小例子
2013/10/15 Javascript
js控制淡入淡出示例代码
2013/11/12 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
Vue2.0 vue-source jsonp 跨域请求
2017/08/04 Javascript
Angular2监听页面大小变化的解决方法
2017/10/09 Javascript
vue自定义表单生成器form-create使用详解
2019/07/19 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
2020/04/10 Javascript
Vue使用自定义指令实现拖拽行为实例分析
2020/06/06 Javascript
基于vue+element实现全局loading过程详解
2020/07/10 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
简单介绍Python的轻便web框架Bottle
2015/04/08 Python
Python中的模块和包概念介绍
2015/04/13 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
pytorch 把MNIST数据集转换成图片和txt的方法
2018/05/20 Python
python下PyGame的下载与安装过程及遇到问题
2019/08/04 Python
tensorflow 模型权重导出实例
2020/01/24 Python
Python for循环通过序列索引迭代过程解析
2020/02/07 Python
从0到1使用python开发一个半自动答题小程序的实现
2020/05/12 Python
用HTML5制作一个简单的弹力球游戏
2015/05/12 HTML / CSS
西班牙用户之间买卖视频游戏的平台:Wakkap
2020/03/21 全球购物
幼儿园新学期寄语
2014/01/18 职场文书
教研处工作方案
2014/05/26 职场文书
中国梦演讲稿5分钟
2014/08/19 职场文书
2015年人事工作总结范文
2015/04/09 职场文书
入伍通知书
2015/04/23 职场文书
股东大会通知
2015/04/24 职场文书
学校远程教育工作总结
2015/08/11 职场文书
redis requires ruby version2.2.2的解决方案
2021/07/15 Redis