今天早上醒来,听了一会音乐。突然想到这样的问题,就是编程相对是很理性或者逻辑严谨的过程,从而产生相对固定化的程序。那么一首音乐的诞生(初期),是源于大脑产生的所谓灵感,还是有某些方法论,如编程般经过缜密的思维,而产生的结果? ◆◆◆◆◆ 01硬件所有的编程语言,真正想要学好,对于硬件的了解是少不了的。 音乐也是如此,在纸上记下的谱子,是要通过乐器或者人声这样的硬件才能表现出来的。就像我们讨论编程时,经常忽略硬件一样;在讨论音乐时,我们也常常忘记无论何种音乐流派和风格,都需要乐器这种硬件才能够表现。 骨笛 乐器的最早形态,如骨笛(管乐器)或者弓弦(弦乐器)等,表现能力(性能)着实有限,以这些简陋的硬件为基础,不会有,也不需要成体系的音乐创作。 人类最早发挥到极致的硬件,是自己的嗓音。这种硬件直到今天也无法进行标准化生产,其性能几乎80%取决于出厂时的状态。 这种硬件,以初始状态(童声)使用一段时间后,会发生一次不可逆转的功能分化(变声),这种分化的方向几乎是不可预期的。这个分化期后,一些硬件的性能会变得更强大(如高音歌唱家),更有可能会走向平庸。 不可否认,有相当一部分初始状态的硬件性能是非常优异的(以男童声为代表),为了防止这种硬件在分化期造成不可逆转的损失,一些人发明了一些方法(阉割),可以让这种硬件(阉伶歌手)在受控范围内进行演化(扩张音域)。 但这种做法会对硬件造成极大的伤害,及其惨无人道,这种硬件调优方法在现代已经被废止了。但是在及其巧合的情况下,也会有一些硬件自然演进出这样的性能(天生阉伶,如Vitas)。 天生阉伶,如Vitas 02机器语言这也是现在我们讨论编程时会忽略掉的一部分。机器语言是一组有意义的二进制编码,可以直接被CPU理解和读取,但人类理解起来却十分费劲。 在计算机发展的最早期,人类还是要通过机器语言与计算机打交道的,也没有什么输入输出设备,全靠用纸笔记录。 音乐发展的最早期更惨一些,因为音乐出现时人类连语言文字都还没有出现,更惘论纸笔。怎样演奏全靠师傅带徒弟口口相传的,以及演奏者对于乐器的把握和理解。 所以那时候音乐能够流传下来的可能性为0。我们都熟悉的一首中国古乐“高山流水”就属于那个时代的作品(中国最早的乐谱好像出现在唐代),所以今天大家听到的“高山流水”百分百不是伯牙演奏给钟子期听的那一首。 03汇编语言 计算机领域,直接用机器码跟硬件打交道的时代并没持续多久。很快人们就开发了原始的输入输出设备(I/O)以及存储设备,即打孔机与打孔带。 IBM打孔卡—早期的计算机外存储 汇编语言也开始出现了,比机器语言稍微人性化那么一点点。对于不同的硬件会有不同的指令集,在不同硬件间汇编语言并不通用。今天不写驱动不做最底层调优的话,实际上我们也不太会和汇编打交道。 之于音乐,当然也有输入输出及汇编语言。人们总有想把一次好的演奏记录下来的需求,口口相传显然无法满足这点。 原始的记谱法也就应运而生了(中国古琴的弦索谱,西方的奏法谱等),但这个阶段的记谱法,还是面向乐器,以记录乐器的演奏方式为主(面向硬件),如适用于琉特琴的谱子就无法应用于其它乐器,因此本质上这种记谱法还是一种低级语言。 琉特琴 这种记谱方式简单直接,形如“按住这里拨这根”这样,因此受限于乐器,不能够跨乐器(硬件)通用,这点与汇编语言不能跨设备也非常相像。 04高级语言 机器语言是完全不通人性的,汇编那一堆反人类的助记符号也好不到哪里去。 因此高级语言的出现几乎是历史发展的必然——用人类可以理解读懂的语言进行计算机指令的编写,这是计算机发展里程碑式的变革。 回到音乐上,则是音高记谱法(我并不太清楚这类记谱法的学名应该是啥,音高记谱法这个名词儿是我自己编的,如有误还望各位专家指正)的出现。 从纽姆记谱法到五线谱再到简谱,这种音乐高级语言基本脱离的硬件的限制,让音乐作品真正得以流传,也使大规模乐器合奏(乐团)作品的出现成为可能。 纽姆记谱法 试想一下,如果还是用奏法谱,那么一个作曲家就要真正了解每样乐器怎样演奏才能写出一份交响乐的总谱,这几乎是件不可能的事情;而有了音高记谱法,他只需要大概了解每种乐器的特色,然后给乐手一张分谱即可。 翻译成编程领域的语言,这个就是终于可以愉快的不考虑底层实现只考虑上层逻辑了。 也只有在这个层面,我们才可以真正开始讨论音乐创作的“灵感”。 05程序语言的基本结构 无论哪种编程语言,写完“HelloWorld”之后,学习套路也都差不太多。 最基础的,常量变量,数据类型——像什么int、double的取值范围什么的,在音乐领域,基本可理解成“律制”。数值类型是基于硬件环境的,如16位机器与64位机器数值类型的定义有所不同,而律制的最原始形态,也是基于乐器弦的长度。 就像64位环境下基本所有语言的int取值范围都是-2^32~2^32-1一样,我们听到的几乎所有音乐的律制都是“十二平均律”。 但也不排除一些语言会出现longint、shortint这种变化,某些音乐也会出现各种奇异的音律设置,如印度音乐。 再往下学就是控制流、循环什么的了,甭管学什么计算机语言,这些你都得学;就像甭管什么风格的音乐,也都得考虑节奏、旋律、和声。 06不同语言的区别 不同编程语言的区别,基本可对应音乐风格的区别。 在基本要素上,编程语言是没有什么区别的,再高级一点儿的层面,像什么异常处理的方式、有没有闭包什么的,还是有一些区别的。 因此关于Java、Python哪家强的争论也一直如火如荼的进行着。 对应于音乐,有相同之处,比如无论巴洛克、古典还是浪漫,你跑不脱节奏、旋律、和声这三要素;也有不同的地方,就是大家听音乐都是兼容并包的,基本不会出现“XX语言是不是总有一天会被XX语言代替”这样的争论。 07函数该讨论封装了。 对于一个优秀的程序员来说,相同的逻辑不写第二遍是基本的素质。 编程的时候,写个函数或方法封装起来,遇到就随时调用,轻松且愉快。 作曲也是一样,一些具备典型特征和规律的片段当然也可以封装,这个东西,叫做“曲式”。 比如说“回旋曲式”、“变奏曲式”等等,按照不同的创作需求传不同的参数就行了,bingo! 08架构模式完全不懂MVC、KVO、代理什么的,当然也能写代码。 但应对复杂大型项目或者与人合作开发时,不学习这些显然就行不通了。 音乐层面,架构模式可以大致对应于音乐体裁。 交响曲你就按4个乐章写,协奏曲那就3个;你非要多写或者少些也没人拦着你,但是听起来还是略显奇怪,最典型的问题是,你让人啥时候鼓掌呢…… 09框架和库写代码有个金科玉律,就是“不要重复造轮子”。 人家封装好的库,你按照你的需求调整一下直接用就行,甚至不调整也是可以的。 对音乐来说,这个就是音乐素材啦。 但每个程序员写代码时惯用的库可能会有区别,作曲家也是一样。 除了肖邦,基本很少有人调用“波罗乃兹(波兰舞曲)”或“玛祖卡”(都是波兰特色音乐)这两个框架;格什温《蓝色狂想曲》中调用的“爵士乐”这个框架,在那时的经典音乐作曲家的作品中也堪称冷门。 至于几乎是原样直接拿来用的,以李斯特的“帕格尼尼主题幻想曲”为代表,海顿写的弦乐四重奏的库也非常流行,特别是那首“皇帝”。 10natureornurture 不同程序员的编程风格相差很大,极具天赋的程序员写代码时可以一气呵成不加任何修改,代码整洁逻辑清晰的程度令人发指;没有天赋下苦功夫当然也是可以的,这意味着不停的修改调优和无数的注释。 至于音乐——莫扎特就是无可争议的天生的音乐家,作曲对他来说有如游戏信手拈来,debug对他来说完全没有存在的必要,他停笔的那一刻就是作品的最终形态。 莫扎特手稿 勃拉姆斯显然属于晚熟型,但勤奋刻苦的他对自己要求非常严格,每一部作品都要经过数次调优甚至重构后才最终发布。 勃拉姆斯手稿 可一定要比一比这两位究竟哪个更加伟大,显然是没有任何意义的。 就像讨论编程或者作曲究竟是灵感重要还是方法论重要——我只能说,都重要。 就像写代码一样,拥有清晰的思维和超人的理解能力那固然最好,如果没有,那就靠后天努力吧,毕竟熟能生巧。 至于灵感啥时候来,可以肯定的只有一点,没有充分的积累,它永远来不了。 ------------《转自知乎》 还有一点,健康很重要。 莫扎特的天赋当然无与伦比,但只要比他活的时间长,成名还是有望的。 希望这个世界温柔的对待你! 白癜风医院白癜风医院转载请注明原文网址:http://www.gzdatangtv.com/bcyyys/1326.html |