鱼C论坛

 找回密码
 立即注册
查看: 2558|回复: 9

[技术交流] Python 小技巧 068:制作音乐

[复制链接]
发表于 2020-2-24 20:34:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 zltzlt 于 2020-2-24 20:36 编辑

Python 制作音乐


Python 可以做许多事,当然也能制作音乐。这篇帖子我教大家如何用 Python 制作简单的音乐。

准备材料

music_syn 第三方库(使用 pip 安装即可)

正式开始

例子:
from music_syn import pysynth as p

song = (('c4', 2), ('c4', 2), ('g4', 2), ('g4', 2), ('a4', 2), ('a4', 2), ('g4', 1),
        ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 2), ('d4', 2), ('c4', 1),
        ('g4', 2), ('g4', 2), ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 1),
        ('g4', 2), ('g4', 2), ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 1),
        ('c4', 2), ('c4', 2), ('g4', 2), ('g4', 2), ('a4', 2), ('a4', 2), ('g4', 1),
        ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 2), ('d4', 2), ('c4', 1))
p.make_wav(bpm=255, song=song, fn="E:/music.wav")

重点看 song 的定义:
song = (('c4', 2), ('c4', 2), ('g4', 2), ('g4', 2), ('a4', 2), ('a4', 2), ('g4', 1),
        ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 2), ('d4', 2), ('c4', 1),
        ('g4', 2), ('g4', 2), ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 1),
        ('g4', 2), ('g4', 2), ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 1),
        ('c4', 2), ('c4', 2), ('g4', 2), ('g4', 2), ('a4', 2), ('a4', 2), ('g4', 1),
        ('f4', 2), ('f4', 2), ('e4', 2), ('e4', 2), ('d4', 2), ('d4', 2), ('c4', 1))

song 为一个元组,保存着一串音符。其中每个音符为以二元组 (string, number)。

string 代表音符的位置和音调,以 'x[#]y' 表示。

x 是音符的音调,可以是 a (6)、b (7)、c (1) 、d (2) 、e (3) 、f (4) 、g (5)。

# 号是可选的,相当于五线谱中的升记号。

y 是音符所在的区域,如图:

1.png

'c#4' 代表以下音符:

1.png

'a5' 代表以下音符:

1.png

number 代表音符的持续时间(不以秒为单位)。一般 number 越大,音符持续时间越短。

最后一行是生成 .wav 音频文件。

bpm 参数指定音频的节拍,bpm 越高音频节奏越快。

song 参数指定乐曲(也就是之前定义的一串音符 song)。

fn 参数指定音频的保存路径,这里设置为 E 盘的 music.wav 。

运行程序,打开生成的 wav 音频。有没有听出来呢,音乐旋律为《小星星》

合成器

music_syn 提供了多个音频合成器,可以在这里查看 --> https://mdoege.github.io/PySynth/#m

1.png

利用不同的合成器生成的音频也不一样,例如:
from music_syn import pysynth_b as p

song = (('c#4', 2), ('c#4', 2), ('g#4', 2), ('g#4', 2), ('a#4', 2), ('a#4', 2), ('g#4', 1),
        ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 2), ('d#4', 2), ('c#4', 1),
        ('g#4', 2), ('g#4', 2), ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 1),
        ('g#4', 2), ('g#4', 2), ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 1),
        ('c#4', 2), ('c#4', 2), ('g#4', 2), ('g#4', 2), ('a#4', 2), ('a#4', 2), ('g#4', 1),
        ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 2), ('d#4', 2), ('c#4', 1))
p.make_wav(bpm=255, song=song, fn="E:/music.wav")
from music_syn import pysynth_c as p

song = (('c#4', 2), ('c#4', 2), ('g#4', 2), ('g#4', 2), ('a#4', 2), ('a#4', 2), ('g#4', 1),
        ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 2), ('d#4', 2), ('c#4', 1),
        ('g#4', 2), ('g#4', 2), ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 1),
        ('g#4', 2), ('g#4', 2), ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 1),
        ('c#4', 2), ('c#4', 2), ('g#4', 2), ('g#4', 2), ('a#4', 2), ('a#4', 2), ('g#4', 1),
        ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 2), ('d#4', 2), ('c#4', 1))
p.make_wav(bpm=255, song=song, fn="E:/music.wav")
from music_syn import pysynth_s as p

song = (('c#4', 2), ('c#4', 2), ('g#4', 2), ('g#4', 2), ('a#4', 2), ('a#4', 2), ('g#4', 1),
        ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 2), ('d#4', 2), ('c#4', 1),
        ('g#4', 2), ('g#4', 2), ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 1),
        ('g#4', 2), ('g#4', 2), ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 1),
        ('c#4', 2), ('c#4', 2), ('g#4', 2), ('g#4', 2), ('a#4', 2), ('a#4', 2), ('g#4', 1),
        ('f#4', 2), ('f#4', 2), ('e#4', 2), ('e#4', 2), ('d#4', 2), ('d#4', 2), ('c#4', 1))
p.make_wav(bpm=255, song=song, fn="E:/music.wav")

……

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-24 20:46:48 | 显示全部楼层
看看。 学习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 01:16:08 From FishC Mobile | 显示全部楼层
大佬,这些都是闻所未闻的库,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 01:54:11 | 显示全部楼层
先膜拜一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-25 17:59:30 | 显示全部楼层
这也太秀了吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-27 17:45:54 | 显示全部楼层
你有没有自己封装过类似的 API?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 14:58:12 | 显示全部楼层
一个账号 发表于 2020-2-27 17:45
你有没有自己封装过类似的 API?

我想是不太可能的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 17:47:19 | 显示全部楼层
python竟然没有自带的音乐模块

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-12 20:18:54 From FishC Mobile | 显示全部楼层
玄……
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-10-8 14:15:05 | 显示全部楼层
这是啥乐器》声音好古怪。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-25 14:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表