Sonic-Pi 初体验

简介

前段时间接触了一个叫 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样本,同样,sample也有许多参数可以用来控制样本。
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 展示了许多范例,风格多样 — 迷幻、古典、庞克…
我发现其中有一段名为Sonic Dreams,由Sonic Pi设计者Sam Aaron创作, 一首未完成的电音。它由以下的部分( *以下翻译纯属本人瞎扯* )组成:
**Intro – The Curved Ebb of Carpentry** ( 0:00 - 0:40 ) >序曲 : 木匠工艺的衰落 **Part 2 - Inside the Machine** ( 0:41 - 1:30) >第二章 : 步入机器时代 **Part 3 - Reality** ( 1:30 - 2:30 ) >第三章 : 现实 **Part n - The Observer becomes the Observed** ( uncompleted ) >第四章 : 长江后浪推前浪, 浮事新人换旧人 嗯,感受一下这个意境,嗯,很迷幻。[(音乐在这里)](#sonic-dream) 其中 *Part n* 内容为空,看起来Sam想让其他人来完善这个部分,于是我从这个部分入手完成我的Part n。说实话,刚开始接触这250行左右的Sonic-Pi Codes,实在让人摸不着头脑(fà),由于本人水(shì)平(gè)有(cài)限(jī),琢磨了许久才弄通里头的逻辑,到Part n之后,只有bass drums和drums线程在跑,所以我只需要跟着这个节奏写下去就好了。 好了!开始创作我的Part n部分,下面的代码只是部分代码,用来介绍我的创作思路,具体的实现过程没有贴上来。
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

原文戳这里,转载请声明出处。

你可能感兴趣的:(音乐,黑科技)