请一定要在这一篇掌握一点计算机音乐基本概念,因为它很简单,而且会非常有帮助,不管是对理解音乐分析,还是对音乐和声音本身的理解。欢迎评论区一起交流学习!
这一篇我们接触一点点live coding,这是一种用代码敲音乐(是不是又崩溃又好奇)的音乐创作方式和现场演奏方式。这里我用的是Sonic Pi而不是“更加Professional”而且大多数live coder用的ixi lang或Overtone,因为它最重要的应用是提供更直观易懂的计算机教育,当然反过来也可以用来做音乐教育。
每个人都可以创造音乐。
用Sonic Pi理解MIDI
MIDI
在正式开始live coding之前,我们还是看看书上那些话都是怎么说的看完了你就知道有一些行话在讲什么了。我搬一下我之前看《现代音乐人编曲手册——传统管弦乐配器和MIDI音序制作必备指南》的笔记,外加一点点解释。
MIDI全称是Music Instrument Digital Interface乐器数字接口,也可以理解成是一种音频数字化的标准,它不包含任何音频内容或片段,但是用数字信息去储存音频的信息。怎么用数字表示音频就是MIDI解决的问题。
一般会用MIDI控制器来给电脑输入MIDI,很多DJ用的都是MIDI控制器,通常是键盘或者打击垫,弹几个音,但是输入到电脑里,可以通过改参数来改变声音的方方面面。
MIDI信息主要分两类:通道信息和系统信息。
系统信息
系统信息基本上是于计算机本身相关的信息,包括系统实时信息、系统通用信息、系统专有信息。这里不是我们的重点,就直接略过了。
通道信息——关于演奏的信息
通道声音信息,是关乎演奏的信息。一共分为6类:
音符开 Note On
涉及到音高,编码范围是0-127,也就是C2-G8,这是一个音域范围。可以参考后面的大谱表与钢琴键盘对照表。这里有一个可以做参考的MIDI音符代码表(1995年由MMA修订)。
音符关 Note Off
离键速度参数,几乎不用。
触后 Aftertouch / 压力
击键以后再稍使劲向下按一下,常用来做颤音效果。
弯音 Pitch Bend
一般由键盘的弯音轮控制,数值范围不是128级,而是0-16,因为弯音就是一个音往高或往低有轻微光滑变化,类似于吉他的推弦。
程序改变 Program Change
改变分配给某一MIDI通道的音色:
synthesizer内存中储存了一系列程序,也叫音色、预置、乐器/声音。对每个MIDI通道,分配一个音色,用来回放发送给通道的所有MIDI数据。可以通过面板进行音色改变,也可以通过控制器或音序器发送程序改变。
数值范围同样是0-127。
音色程序用库是一种组织形式,每个库最多存放128个音色。
控制改变 Control Change (CC)
对某一MIDI通道的特定参数进行控制。MIDI标准中一共有128个控制改变信息,即CC#0到CC#127。每个CC信息的数值范围也都是0-127。
最常用的是这几个:CC#1调制,CC#7音量(击键强度),CC#10声像,CC#64延音踏板。
有MIDI音频音序器以及合成器,你一个人就可以制作出有相当完整度的音乐了。
如果感觉还是没太懂,没关系,不要担心,继续往后走你会逐渐get the feeling。
Sonic Pi
一款免费的音乐编码软件,诞生于剑桥计算机实验室,Sam Aaron是它的创造者。Sam在各种论坛上有过诸多讲座,介绍Sonic Pi和它的潜能,影响特别深刻的一次,是在他简单示范如何使用这个软件,让电脑发出了声响,说:
……我们现在可以调整音高,可以控制时间,这就是大半个西方音乐系统!
Sonic Pi官网里有很多介绍,也有现成的代码示例和教程。in_thread社区里也有很多有趣的例子,如果觉得这里给你的例子还不够,欢迎到社区里去逛逛!
首先我们安装Sonic Pi,直接去官网http://sonic-pi.net/上找到你对应系统的版本下载安装就好了。安装程序不大,而且Sonic Pi的界面很好看:
还可以调整界面的透明度。
不推荐直接用Python的IDE来写,尽管可以这样做:Pypi的python-sonic网站里给的pip install python-sonic,我从来没试过,也不知道里面跑出来是什么样子。而且用python的话,有的代码可能会和我这里写的不太一样。
这一篇很多例子参考于官方文档和教程。
play 演奏起来玩起来
play和sleep
演奏第一个beep音:
play 60
然后Alt+R跑它。
这就是中央C。“60”你可以认为是钢琴上第60个键(包括黑键)。所以你的数值越低,它的音越低。现在我们换一个音:
play 70
再试试别的,比如75。
那如果我们写很多个play:
play 60
play 72
你听到的是两个音,middleC和C4,就是中间的中音do和高八度的高音do。数值上每隔12就是一个八度
play 72
play 75
play 79
你听到的是一个和弦!没错!是C和弦CEG,或者说是C大调的do mi sol。音和音之间的数值上距离其实和音乐上的“音数”的概念相似。你也可以用音名也就是CEG去表示,证明你的数值是对的。它相当于:
play :C5
play :E5
play :G5
60相当于C4中央C,相当于小字一组C。60+12=72。72相当于C5,C5是指第五组的C,相当于小字二组的C:
图片来源于https://power.baidu.