为什么是音乐与编程?
1 为什么是音乐与编程?
欢迎阅读《Python编程数字音乐入门:用代码学习音乐》。本书专为热爱音乐并对音乐与编程的交叉领域感兴趣的人而设计。也许你是一位有志的音乐家或音乐制作人,想更多地了解编程及其能力。或者你已经对编程有所了解,想要拓展自己的音乐创作视野。又或者你在两个方面都是完全的初学者。无论你的起点如何,本书都旨在让你将音乐和编程作为相互促进的技能来学习。代码为我们提供了一种优雅的语言来思考音乐创意,而音乐则为我们提供了一个代码能够发挥作用并立即产生效用的场景。两者结合,形成了一种强大的全新音乐创作方式,将与未来的数字制作工具紧密相连。
越来越多的代码被用于制作音乐、创作音乐,甚至为现场观众表演音乐。诸如 Logic、Reason、Pro Tools、FL Studio 和 Ableton Live 等数字制作工具都是复杂的软件应用程序,由庞大的软件工程师团队编写了数百万行代码而成。使用所有这些工具,你都可以编写代码来创建自定义插件和效果。除了制作工具,实时编码(live coding)也是一种新兴的音乐表演艺术形式,在这个信息时代的 DJ 们通过编写计算机代码为现场观众实时生成音乐。
在其他方面,我们仍处于用代码创作音乐方式的根本性变革的边缘。音乐创新的历史始终与技术革新交织在一起。无论我们谈论的是19世纪的弗朗茨·李斯特(Franz Liszt)——他基于钢琴的技术突破开创了现代音乐 virtuoso 的形象,还是20世纪的 DJ Kool Herc——他用两台唱机和一个装满放克唱片的板条箱开创了嘻哈音乐,技术都为音乐表达创造了新的机会,挑战了现状并催生了新的流派。我们还没有出现编程领域的弗朗茨·李斯特或 DJ Kool Herc,但未来的编程巨匠扩展音乐创作、制作和表演可能性边界只是时间问题。
1.1 什么是 Python?
在本书中,你将学习如何使用一种叫做 Python 的计算机编程语言来创建自己的数字音乐。如果你不熟悉编程语言,Python 是一种通用语言,首次发布于1990年代,现在已是世界上使用最广泛的语言之一。Python 的设计易于阅读和编写,这使其成为初学者的热门选择。它也功能完备且强大,使其成为数据科学、Web 开发、艺术和视频游戏开发等各个领域专业人士的良好选择。由于 Python 已经存在了数十年,它可以在所有主要的计算机操作系统上运行。本书中的示例甚至使用了直接在 Web 浏览器中运行的 Python 版本,无需安装任何特殊软件。
与许多其他常见初学者编程语言不同,Python 是”基于文本的”,这意味着你在编辑器中键入代码,而不是在计算机屏幕上拖动代码块。这使得 Python 比其他初学者语言稍微难学一些,但它也极大地扩展了你可以做的事情。当你读完本书时,你应该能够 comfortably 编写简短的 Python 程序,并拥有自己进一步探索所需的概念工具。
1.2 本书不是什么
在我们举一个具体的例子说明你可以用一点代码做什么之前,先简单说明一下本书不是什么。本书不是 Python 编程的综合指南。有许多为初学者设计的优秀书籍和教程,其中几个是免费的。本书也不是音乐理论或西方音乐记谱法的综合指南。我们将深入探讨节奏、和声、旋律和作曲背后的核心思想,但同样,对于想要深入学习的初学者来说,还有许多其他资源可用。我们提供的是一种不同的方法,将学习音乐和学习代码平等地结合起来。
1.3 本书是什么
我们要做的是让你对音乐和编程背后的基本概念有一个直观的理解。代码和音乐都是高度技术性的技能,充满了神秘的符号和术语,似乎几乎就是为了吓退初学者而设计的。在本书中,我们将立即使用核心概念来开始创作音乐。你可以按照自己的节奏尝试各种想法,并在将想法变为现实时获得即时反馈。我们现在跳过大部分技术术语和细节——那些可以稍后再学。相反,我们专注于培养你的信心和理解。重要的是,我们在本书中介绍的技能、工具和思维方式也将广泛适用于许多其他领域。你将使用 Python 代码工作,但变量、函数、循环、条件逻辑和类的核心结构在许多编程语言(包括 JavaScript、Java、C、C++ 和 C#)中都是相同的。在你学会一种编程语言后,每种额外的语言都更容易掌握。
1.4 TunePad 和 EarSketch
本书使用两个结合音乐和 Python 编程的免费在线平台。第一个叫做 TunePad (https://tunepad.com),由芝加哥西北大学的一个研究团队开发。TunePad 允许你创建短音乐循环,你可以使用简单的数字音频工作站 (DAW) 界面将它们分层组合在一起。第二个平台叫做 EarSketch (https://earsketch.gatech.edu),由亚特兰大佐治亚理工学院的研究人员创建。EarSketch 使用 Python 代码将采样和循环排列成完整长度的作品。两个平台都是基于浏览器的应用程序,所以你开始所需要的只是一台计算机(平板电脑或 Chromebook 也可以)、互联网连接和 Chrome 或 Firefox 等 Web 浏览器。外部扬声器或耳机也很好,但不是必需的。两个平台都已经存在多年,已被成千上万从中学到大学及以后的学生使用。TunePad 和 EarSketch 主要设计为学习平台,但如果你想更进一步,可以轻松地将你的作品导出到专业制作软件。
1.5 一个快速示例
这里有一个关于 Python 编码看起来像什么的快速示例。这个程序在 TunePad 中运行,创建一个简单的节拍模式,其变体实际上已被用于数千首歌曲,如 The Weeknd 的 Blinding Lights 和 SAINt JHN 的 Roses。
1 playNote(1) # 播放底鼓声音
2 playNote(2) # 播放军鼓声音
3 playNote(1)
4 playNote(2)
5 rewind(4) # 倒回 4 拍
6 for i in range(4):
7 rest(0.5)
8 playNote(4, beats=0.5) # 播放踩镲,持续半拍这八行 Python 代码告诉 TunePad 播放底鼓、军鼓和踩镲的模式。大多数行都是 playNote 指令,你可能已经猜到,这些指令告诉 TunePad 播放括号内数字指示的音乐声音。这个示例还包括第6行称为循环(loop)的东西。现在不必太担心细节,但循环是一种轻松重复一组动作的方法。在这种情况下,循环告诉 Python 连续重复第7行和第8行四次。截图(图1.1)显示了这在 TunePad 中的样子。你可以用这个链接自己尝试示例:https://tunepad.com/examples/roses。

图 1.1 用于播放简单摇滚节拍的 TunePad 程序。
1.6 学习代码的五个理由
既然你已经看到了几行 Python 代码可以做什么的简单示例,如果你仍有疑问,以下是我们开始编程和音乐的前五个理由。
1.6.1 理由一:喜欢与否,音乐已经由代码定义
纵观现代音乐景观,很明显音乐已经由代码定义。几乎所有现代音乐(来自任何流行流派)的最大共同因素之一是,一切都被复杂的计算机软件编辑,如果不是完全创建的话。这种软件对21世纪音乐声音的塑造程度怎么强调都不为过。相对便宜的 DAW 应用程序和跨平台工作的无数无处不在的插件对音乐产业产生了颠覆性和民主化的影响。想想 autotune、混响等效果插件,或者在不改变速度的情况下改变采样音高的能力。这些效果都是用复杂的软件生成的。规模小到办公室大小、包含价值数十万美元设备的制作工作室,现在可以装在一台笔记本电脑的屏幕上,任何有热情、WiFi 连接和小预算的有志制作人都可以使用。向数字制作工具转变背后的原因显而易见。计算机已经达到了足够便宜、足够快、足够充裕的程度,可以进行实时音频编辑。我们可以将声波转换为可编辑的数字信息,精度达微秒级,然后实时听到我们更改的效果。这些 DAW 并不是凭空出现的。它们是由庞大的软件工程师团队编写的代码构建的——数百万行代码。例如,TunePad 是使用超过150万行代码创建的,这些代码用 Python、HTML、JavaScript、CSS 和 Dart 等十几种计算机语言编写。无论你对现代音乐的数字性质有什么看法,它都不会消失。学习编码将帮助你更多地了解这一切在底层是如何工作的。更直接地说,制作人编写自己的代码来处理声音越来越常见。例如,在 Logic 中,你可以编写 JavaScript 代码来处理传入的 MIDI(音乐仪器数字接口)数据,以创建自定义琶音器之类的事情。学习编码可以让你获得更多控制并帮助扩展你的创作潜力(图1.2)。

图 1.2 典型的 DAW 软件。
1.6.2 理由二:代码是创作音乐的有力方式
我们并不总是这样想,但音乐本质上是一种算法——它充满了数学关系、逻辑结构和递归模式。巴洛克赋格曲的美部分反映了音乐背后数学和计算思想的美。我们称巴赫为天才,不仅因为他的音乐如此引人注目,还因为他能够在脑海中保持复杂的算法,然后使用我们称之为西方音乐记谱法的表示系统将它们转录到纸上。换句话说,音乐记谱法是一种记录作曲过程输出的语言,但不是一种捕捉作曲过程本身算法性质的语言。
另一方面,代码是专门设计用来捕捉数学关系、逻辑结构和递归模式的语言。例如,以断音踩镲模式为例,这是陷阱音乐(trap music)的定义特征之一。这里有几行 Python 代码生成随机的踩镲断音,可以让 otherwise 常规节拍充满活力的能量。
1 for _ in range(16):
2 if randint(6) > 1: # 掷骰子得到一个随机数
3 playNote(4, beats=0.5) # 播放八分音符
4 else:
5 playNote(4, beats=0.25) # 或者播放十六分音符
6 playNote(4, beats=0.25)或者,作为另一个示例,这里有一个两行的 Python 程序,播放 house、EDM 或流行音乐中常见的军鼓 riser 效果。你经常会在节拍 drop 之前听到这种技巧。这段代码使用衰减函数,使每个后续音符稍微短一些,产生逐渐加速的效果。现在不必担心这一切是如何工作的。我们会随着进展为你详细讲解。
1 for i in range(50): # 播放 50 个军鼓
2 playNote(2, beats=pow(2, -0.09 * i))这些效果很酷的地方在于它们是参数化的。因为代码描述了生成音乐的算法,而不是音乐本身,这意味着我们可以通过调整涉及的数字来创建无限的变化。例如,在 trap 踩镲代码中,我们可以通过增加一个数字来轻松尝试断音踩镲插入模式的频率。你可以把代码想象成某种像电钻的东西;你可以换不同的钻头来制作不同大小的孔。钻头就像参数,改变工具在每个特定实例中做的事情。同样,算法是极其通用的工具,可以通过改变输入参数来完成无数任务。
用代码创建军鼓 riser 显然与拿起两根鼓槌在真正的鼓上敲出模式是非常不同的事情。而且,需要明确的是,我们并不是提倡用代码取代学习如何用现场乐器演奏。但是,代码可以成为你音乐库中的另一个工具,用于生成重复模式、探索数学思想或播放太快或太复杂而无法手动演奏的序列。
1.6.3 理由三:代码让你构建自己的音乐工具包
成为任何领域的专业人士都是关于发展工具专业知识——获取设备并知道如何使用它。显然,这在音乐产业中是真的,但在软件中也是真的。专业软件工程师获取专门的设备和软件包。他们发展一系列编程语言和技术框架的专业知识。但是,他们也构建自己的专门工具,在各个项目中使用。在本书中,我们将向你展示如何建立自己的 Python 函数库。你可以把函数看作是你创建的用于执行不同音乐任务的专门工具。除了我们上面描述的示例之外,你可能会写一个函数来生成和弦进行或播放琶音,你可以在许多音乐项目中反复使用函数。
1.6.4 理由四:代码对无数其他事情有用
正如我们在本章前面提到的,Python 是世界上最强大、最多用途的语言之一。它被用来创建 Web 服务器和社交媒体平台,以及视频游戏、动画和音乐。它被用于研究和数据科学、政治和新闻。了解一点 Python 可以让你访问强大的机器学习和人工智能 (AI/ML) 技术,这些技术准备改变人类工作的大多数方面,包括音乐等创意领域。Python 既是脚本语言,也是软件工程平台——既是管道胶带,也是台锯——它能够从快速修复到耐用软件应用程序的一切。学习一点 Python 不会让你成为软件工程师,就像学习几个吉他和弦不会让你成为表演音乐家一样。但这是通往一条道路的开始。一扇以前关闭的门打开了,一种使用你心灵的新方式,一种思考音乐的新方式。
1.6.5 理由五:编码让我们更有人性
当我们想到学习编码时,我们倾向于想到经济回报。你会听到这样的论点:学习编码是简历的建立者,是高薪工作的途径。并不是这种观点是错的,但这可能是你学习编码的错误理由。就像善于音乐的人热爱音乐一样,善于编码的人往往热爱编码。构建软件的工艺可能是乏味和令人沮丧的,但它也可以是值得的。这是一种创造性地表达自己和从事工艺工作的方式。人们学习针织、烹饪或演奏乐器并不是为了这些追求开辟的 lucrative 职业道路——尽管这些追求当然可以导致 remarkable 的职业。人们学习这些东西是因为他们有热情。因为它们在个人上是有益的。这些热情将我们与数百年的传统联系起来;它们将我们与教师、学习者和从业者的社区联系起来;最后,它们让我们更有人性。所以当事情变得有点令人沮丧时——当你学习任何有价值的技能时,事情总是会变得有点令人沮丧——请记住,就像诗歌、文学或音乐一样,代码既是艺术,也是科学。而且,就像木工、针织或烹饪一样,代码既是工艺,也是工程学科。耐心点,给自己一个爱上编码的机会。
1.7 音乐与代码的未来
在我们继续本书之前,我们想留给你们一个关于技术、音乐和代码未来的简要思考。只要有人类在这个星球上,就有音乐。而且,只要有音乐,人们就创造了技术来扩展和增强他们的创作潜力。鼓是一种技术——一张动物皮 stretched across 一个空心原木并 tied in place。这是一项重大的成就,需要技能和工艺来制作的部件组装。必须知道如何准备动物皮,如何用植物纤维制作绳子,以及如何制作和 sharpen 工具。更重要的是,必须知道如何用鼓表演,与观众建立联系,通过情感和节奏与节拍的连接来吸引他们移动身体。技术将材料和工具与知识结合在一起。人们必须既有知识来制作 artifact,也要 wield it。而且,随着时间的推移——跨代——这种知识在从教师传递到学生时得到完善。它变得风格化和多样化。工具、artifact、知识和实践都变得更大。我们称之为文化的一些东西。
一次又一次,音乐世界被新技术颠覆、民主化并重新定义。嘻哈音乐是对音乐现状的反叛,由低成本技术(如可录音盒式磁带、唱机和808鼓机)推动。早期创新者粉碎了艺术表达的规范,在这个过程中重新定义了音乐、诗歌、视觉艺术和舞蹈。对技术的廉价访问与对新形式真实自我表达的需求相结合,点燃了种族和经济压迫的干火。
技术进步的 result,世界仍在变化的速度是很难夸张的。数字 artifact 和基础设施如此普遍,它们重新配置了社会、经济、法律和政治系统;彻底改变了科学研究;颠覆了艺术和文化;甚至 wormed their way into 我们个人和浪漫生活最亲密的方面。我们已经讨论了数字工具对21世纪音乐世界的变革性影响,但令人振奋(和可怕)的部分是,我们正处于另一波变革的边缘,在这场变革中,人类的创造力将被人工智能 (AI) 和机器学习 (ML) 重新定义。想象一下 AI 伴奏者可以与人类音乐家实时即兴创作和声或旋律。或者可以收听数百万首歌曲并在同一流派中创新音乐的深度学习算法。或者足够理解人类语言以创作复杂说唱歌词的硅诗人。或者具有数万亿晶体管突触的机器,其复杂性使它们开始”做梦”——倒置的机器学习算法 ooze 图像 unhinged enough to disturb 超现实主义画家的苦艾酒 slumber。现在,想象一下这不是推测性的科幻小说,而是我们今天世界的现实。这些事情现在就在这里,已经在挑战我们所说的人类创造力的含义。数字创意半机械人社会的含义是什么?
但关键是:我们一直是半机械人。西方音乐记谱法与 Python 代码一样都是一种技术。精通任何足够先进的表示系统都会深刻塑造我们思考和感知周围世界的方式。古典音乐记谱法、理论和实践塑造了贝多芬的心灵,就像他用它塑造音乐一样——以至于他在几乎完全聋的时候仍然能够创作他的许多最著名的作品。贝多芬是一个被西方音乐记谱法和理论技术增强的创意半机械人。区别在于,现在我们将许多认知过程外部化到与我们一起思考的机器中。而且,越来越多地,这些工具对每个人都可用。这如何改变作为一个创意人类的意义是任何人的猜测。
1.8 本书概览
我们很高兴你能和我们一起踏上这段音乐与代码之旅。以下是我们从 here 开始的小指南。第2章和第3章涵盖节奏、音高与和声的基础。这些章节旨在快速移动,让你尽早用 Python 编码。我们将涵盖 Python 变量、循环,它们都直接与音乐概念相关。第4、5 和 6 章使用 Python 列表、函数和数据结构涵盖和弦、音阶和调的基础。第7、8 和 10 章从音乐创作转向音乐制作,涵盖频率域、模块化合成和其他制作效果等主题。在第9章中,我们切换到 EarSketch 平台,讨论如何将各种音乐元素组合起来创作完整长度的歌曲。最后,第11章简要概述了音乐与代码的历史,并 glimpse 未来可能持有的一切。在每个章节之间,我们提供了一系列简短的间奏,就像一步一步的教程,介绍新的音乐和编码概念。
关于如何阅读本书的几条注意事项。只要我们包含 Python 代码,它就会以这样的编程字体显示:
playNote(60)有时我们会在带有行号的表格中编写代码,以便我们可以引用特定行。当我们介绍新术语时,我们会 加粗 这个词。如果你对 any 编程或音乐术语感到困惑,请查看附录,其中包含对所有重要概念的快速概述。我们会经常邀请你跟随在线示例。学习的最好方法是自己动手做,所以我们强烈鼓励你在阅读章节时尝试在线用 Python 编码。
注释
据说粉丝们对李斯特的钢琴”摇滚明星”地位如此痴迷,以至于在他的表演中争夺他的丝质手帕和天鹅绒手套。
我们推荐 https://www.w3schools.com/python/。