本文由小声团队出品,小声团队是一个专注于音频&音乐技术的初创团队,深度使用Flutter构建跨平台应用,希望与大家一起共同探索Flutter在桌面端&移动端的可能性。
什么是音乐?
在我们初学谭浩强的时候,他老人家总是在不停的定义什么叫做程序,比如程序 = 数据 + 算法 这样的概念,那么音乐则是 音乐 = 音高 + 时长 + 强弱。
音高,时长,强弱 也就是我们常说的音乐三要素。
什么是音高
我们都知道声音是由物体振动从而产生声音,既然是振动那么就一定会有振动频率,不同的振动频率也就产生了不同的音高。在唱歌中,低音则是声带处于松弛状态下的振动结果,高音则相反。
声音一定有频率,但是并不是所有的声音都是乐音。
在傅立叶体系中,自然界的声音所产生的频率往往不是单一的,而是由基频(音高)与泛音列叠加而成的,泛音列则主要影响的是我们听到的声音音色。
那么,我们对于音高的定义则是,有稳定的音高与稳定的泛音列的声音才叫做乐音。
在音乐中,我们并不是直接使用所有的频率,而是将频率通过不同的方式进行分组,常用的有十二平均律与五度相生两种算法,目前主流都是采用十二平均律来进行定音,钢琴中的琴键就是采用十二平均律进行定音的乐器。
通过这样的算法,我们将无限的频率压缩到了有限的序列来进行创作。
什么是时长
时长也就是声音发出的时间长短。声音的时长也是连续的,在音乐中我们一般会将时间进行量化,比如4分音符,8分音符等。
什么是强弱
声音发出的大小也就是强弱,同时长,音乐中也是采用不同的强弱等级来标记。ppp fff
也就是说,音乐也就是将音乐三要素进行有组织的编排得到的声音序列。
怎么编排音乐
在程序中,我们使用循环控制 变量 条件 函数 等不同的方式来组织我们的逻辑从而实现我们希望的功能,在音乐中也同样的会有类似的组件来帮助我们编排声音。
什么是调
我们经常吐槽一个人唱歌难听是五音无全,形容一个不靠谱的人是不着调。 这里说的五音 也就是中国的传统五声音阶形成的调式。
我们前面提到了钢琴是由十二平均律算法压缩而成的,十二平均律律体系中,一个八度有12个等距的频率组成,而所谓的调式则是在此基础上继续进行压缩,比如自然大调是7个音,中国调式是5个音。
不同的分组算法也就形成了不同的调式。
什么是节奏
调是对音高的一种组织形式,那么节奏就是对时长的组织形式。在音乐中,我们将时间量化到拍为单位,拍是一个相对时间,其绝对时间由速度来确定,即1分钟60拍的情况下,1拍就是1秒钟绝对时长,而1分钟120拍的情况下1拍就只有500毫秒的时长的。
作为程序员应该很容易想到使用相对时间来表达音乐的好处,在操作系统中,也是使用ticks的概念来进行线程调度,而操作系统可以在不同的情况下确定1tick = N 毫秒的方式来直接改变整个程序世界的调度规则而无需修改任何事情。
比如我们拿到一个钢琴谱,初学的时候我们可能采用1分钟60拍来演奏,到了熟练了可能就采用1分钟120拍来演奏,此时我们只需要变更节拍器的速度即可。
我们在节拍的基础上再进一步的进行抽象,就得到了节奏。节奏就是将节拍按照规律进行组织,然后确定每个节拍的强弱关系。 比如我们常说的44拍也就是1小节有4拍,每拍的时间为4分音符。其强弱关系规定为 强,弱,次强,弱(你可以默念几遍 动次打次就可以感受到了这种强弱变化)。
什么是和声
调式也好,节奏也好,它们都是横向的概念,即随着时间变化而变化的,那么纵向上的编排就是和声(不同的声音合在一起),交响乐团可能同时有数百人进行演奏,如果不按照某种理论进行编排则会是杂乱无章,纵向编排的音乐理论叫做和弦。
** 本文以编程为蓝本,简单的类比了音乐的组成部分**