前段时间接触了一个叫 Sonic Pi 的音乐制作工具,喜欢音乐的童鞋们了解一下。
简单来说,Sonic Pi 就是一个用代码写音乐的工具,引用官网介绍 — “The Live Coding Music Synth for Everyone“。它目前是由Sam Aaron主持的一个开源项目,使用ruby开发,面向音乐与计算机教育工作者,对零编程基础者来说,入门门槛较低,支持 Windows / macOS / Raspberry Pi 平台。它的界面长这样:
个人觉得还是不错的!与GarageBand相比,由于是通过代码来演奏音乐,显而易见,优点是有更多的可操作性和即刻调整音乐的能力,但缺点是创作所花费的时间比较多。
使用play指令可以弹奏指定的音符,如弹奏音名[:c4]或音符号[60],弹奏的都是中音C,play指令还可以调整各个参数对音符进行控制,如上图中的amp(音量), attack(递增), sustain(持续), release(衰减)。
play :c4, attack:1, sustain:1, release:1
以上指令弹奏中音C,音符在1s达到最大音量,持续1s,并在1s衰减。
sample ambi_choir
以上指令播放一段唱诗班的吟唱小样。 — ## 使用 Fx 效果器! 作为一个弹了三年吉他还没用过效果器的人,Sonic Pi真是大大的满足。它提供了许多可用的效果器,只需要在乐段外使用以下指令包裹就能使用对应的效果器了,而且,效果器还可以嵌套使用。下面我们定义一个函数,弹奏使用效果器的Em7, Bm7, D7和G7和弦分解。
define :rhythm do
with_fx :slicer do
with_fx :echo do
with_fx :pan do
# I'm in SAPCE !
play_pattern_timed chord(:e3, :minor7), 0.5
play_pattern_timed chord(:b2, :minor7), 0.5
play_pattern_timed chord(:d3, :major7), 0.5
play_pattern_timed chord(:g3, :major7), 0.5
end
end
end
end
我最喜欢的效果器有 echo(回音), pan(声道) 和 slicer(切片) 这几个,这几个效果器配合起来能制造出太空漫游、迷幻的感觉,对于我这个PinkFloyd迷来说真是再好不过了。 — ## 使用 Synth 合成器! 合成器用于合成特定的音色,而前面说到的效果器是用来修饰音色的。由于合成器直接改变音色,所以没有嵌套这个说法,弹奏应用的是最后一次使用的合成器。另外需要注意的是,执行 use_synth
指令后,指令所在线程和子线程都会继承这一音色,除非它们执行了 use_synth
使用了新的合成器音色。
use_synth :blade
rhythm
让我们为刚刚的旋律添加上一个合成器! — ## 创作自己的电音! Sonic Pi 展示了许多范例,风格多样 — 迷幻、古典、庞克…
puts 'Part n'
puts 'The Observer becomes the Observed'
#
# My turn...
#
# Coded by Todd Tang in Sonic-Pi
#
# Lots of functions defined here
# Base thread part n
in_thread(name: :mypart) do
# sync mypart, receive the signal cued from part3.
sync :mypart
# thread bell
in_thread(name: :beat) do
live_loop :bell do
# bell beats here
end
end
sleep 8
# thread rhythm
in_thread(name: :rhythm) do
live_loop :blur do
# blur rhythm here.
end
end
sleep 8
# thread lead
in_thread(name: :lead) do
# lead riff here.
end
end
很明显,*thread part n* 由三个thread构成, 分别是:
beat(鼓点), rhythm (节奏), lead(主音)
其中beat与rhythm线程控制鼓点与节奏声部,其中都有一个live_loop循环一直进行着;而lead线程则是一串riff(重复乐段)作为主音声部在后面加入。在根线程里,sync :mypart
先同步一下第三章代码段的末尾的结束信号 cue :mypart
,这对指令专门用来协同各个线程间的工作,在Sonic Pi中还可以使用*sleep*指令来完成各线程的协同工作,如在beat与rhythm之间的 sleep 8
就用来控制两个线程的工作时间。 了解音乐的朋友都知道上面提到的三个子线程的声部是构成乐队的基本元素,而我们用 *Sonic Pi* 轻松地创作了一个有完整声部的音乐,超酷的!完成了这段创作后,最大的一个感受就是:**这个创作过程(多任务合作)和多线程编程很像嘛!**
附上完整音乐,其中2分30秒前的部分是原作者Sam完成的 Intro->Part2->Part3, 2分30之后是我创作的Part n.
**Sonic Pi 还有很多特性与模块我没有介绍,感兴趣的童鞋们可以戳文末的链接继续探索~** — ## 仍需完善的地方 + stop指令只能关闭stop指令所在的thread或是关闭当前正在运行的thread,无法停止特定thread,且关闭thread后,没有指令可以继续被停止的thread.Thanks to Sonic Pi Team
Sonic-Pi @Github
Sonic-Pi @Homepage
Sonic-Pi @Community
原文戳这里,转载请声明出处。