hengfu.png

yinpinkaifabianchengzhinan.png

前言

如果你对音频开发编程感兴趣,但又不知道从哪里开始学?以下是我的给大家的建议。如有不足之处,请大家批评指正!

总而言之,你需要:

  • 学习C++

  • 开发环境/IDE

  • 音频框架

  • 数学知识

  • 数字信号处理(DSP)知识

音频编程很有趣,但它需要一些专业知识,可能需要一段时间才能掌握。不过,学习也是乐趣的一部分嘛!

学习C++

音频开发者首选的语言是 C++,发音为“C plus plus”。既让人讨厌又让人喜欢,是唯一的一种用于编写实时音频软件的实用语言。你可以使用其他语言编写程序的非音频部分,但 DSP 代码必须是 C++。

关于 C++,您需要了解的一些事项:

  • 它不是最容易学习的第一门语言,但只要有一本好的书,它肯定是可行的。如果你的目标是编写音频软件,最好直接学习 C++,而不要先浪费时间学习其他“更简单”的语言。

  • C++ 非常强大,但这也意味着它很复杂。不要觉得你需要使用所有功能——对于音频开发来说,掌握基础知识就足够了。

  • 你需要学习 C++11 或更新版本。如果你要购买相关书籍,请确保它是 2011 年或更新的版本,并且至少涵盖 C++的11版本。避免学习过时的知识。

关于 C++ 的书籍和在线教程有很多,有些比其他的好。权威 C++ 书籍指南和列表概述了最好的书籍。以下是我的建议:

书籍:C++ Primer (第 5 版),作者:Lippman、Lajoie 和 Moo。如果你完全没有编程经验,这通常是推荐的入门书。

书籍:C++ 之旅,作者:Bjarne Stroustrup,C++ 的发明者。对于刚接触 C++ 的中级程序员来说,这是一本不错的入门书。如果您很久以前就用 C++ 编程,并且想复习一下该语言的所有新功能,这本书也值得一读。

如果你更喜欢观看视频而不是阅读一些书籍,那么去YouTube上的The Cherno频道(点击此处进入),这里有关于如何学习 C++ 的一系列非常好的视频教程。

还有一个cppreference.com网站,这个不是教程网站,而是当你需要查找语言或标准库中的某些内容时必不可少的参考指南。建议收藏此网站!

同时我建议边学习 C++的时候还要搞一个音频编程的小项目,单凭学习 C++ 不会有特别好的成果,最好是立即将新学到的知识付诸实践,编写真正的音频代码,即使只是简单的项目也可以。

其他书籍呢,我推荐《音频插件开发完全初学者指南》和《使用 C++ 和 JUCE 创建合成器插件》,这两本书在编写真实音频插件的背景下解释了 C++ 的基础知识。如果你是软件开发新手,我建议你从这两本书开始。

3d-book.png

book-4.png

我可以使用其他我喜欢的语言代替 C++ 吗?

可能不行……因为其他语言通常不适合实时音频,它们无法保证时间一致。

你可以使用 C语言,但前提是你真的不喜欢 C++语言。请记住,音频开发生态系统中的几乎所有东西都希望在某个时候与 C++语言进行交互。

尽管如此,还是有许多有用的音频原型语言,例如:Max/MSP、Pure Data、Plug'n Script、REAPER's JSFX、Python、MATLAB。使用这些语言模拟新想法通常比使用 C++ 要快得多。

许多关于音频编程的资料都会有非 C++ 的代码示例。它们通常会使用 Python 或 MATLAB 或某种伪代码。我的建议是学习足够的 Python 和 MATLAB,以便您可以将这些示例转换为 C++。一旦您了解了 C++,学习新语言就不难了。

提示:无论如何,我都建议学习 Python 作为附加语言。它非常适合编写小脚本和辅助程序。

开发环境

要编写和编译 C++ 代码,你需要一个 IDE 或集成开发环境。具体选择哪个取决于你对操作系统和你自己的偏好。大多数 IDE 都可以免费下载。

适用于 MacOS 的Xcode,可从 Mac App Store 下载。

适用于 Windows 的Visual Studio。社区版是免费的,可以满足你的所有需求。

VSCode适用于任何平台。这是一个流行的编辑器,但它不是一个功能齐全的 IDE,如果你没有经验,让 C++ 编译器工具链工作起来可能会很棘手。

JetBrains的CLion适用于任何平台。这是一款付费软件,我没有用过,但很多开发者都非常喜欢它。

如果你是 C++ 或编程新手,我建议您从 Xode 开始(如果您使用的是 Mac)或从 Visual Studio 开始(如果您使用的是 Windows)。请注意,您需要的是常规的 Visual Studio,而不是“Visual Studio Code”(又名 VSCode)——它们是完全不同的产品!

IDE 是一个复杂的工具,值得花一些时间学习如何使用它的工具,尤其是调试器。

音频框架

每个操作系统和插件格式都有自己的专有音频 API,而且这些 API 都不兼容。作为一名音频开发者,你需要专注于有趣的事情,而不必担心烦人的平台特定实现细节。理想情况下,你只需编写一次音频代码,即可在 Windows、Mac 和 Linux 以及所有不同的 DAW 上运行。

JUCE框架

我的建议是从 JUCE 框架开始,许多专业音频公司都在其产品中使用了这个框架。除了让编写音频代码变得容易之外,JUCE 还支持跨平台创建用户界面。它还附带一个现成的 DSP 组件库,例如滤波器、延迟器、混响等等。JUCE 的一个潜在缺点是,除非你制作的软件是开源的或供个人使用,否则您必须付费。网站:juce.com

iPlug2框架

这是另一个开源跨平台音频框架,但可能对初学者的友好程度不如 JUCE——文档不太好。iPlug2 可在闭源项目中免费使用,这就是为什么某些开发人员可能更喜欢它而不是JUCE。网站:iplug2.github.io

PortAudio 框架

一个流行的跨平台音频 I/O 库,适合制作独立应用程序,但不适合制作插件(JUCE 和 iPlug2 可以同时制作)。网站:portaudio.com

AudioKit框架

如果你主要想制作 iOS 应用,推荐使用。网站:audiokitpro.com

Wwise和FMOD。如果你对游戏行业的音频工作感兴趣,可以学习这些内容。

数学知识

音频编程涉及相当多的数学知识。你可以无需成为数学天才即可编写音频软件,但遇到一些方程式时不要惊慌失措,这是件好事。为了充分利用你的音频开发事业,你需要掌握算术、代数、三角学、微积分和线性代数的基本知识。如果你对人工智能和机器学习感兴趣,请添加统计和概率。音频编程世界中的一些黑暗角落需要微分方程等数学知识。

如果你在学校数学不及格,不要感到难过。在这里,你将用数学做一些真正有趣的事情:让你的电脑用声音做很酷的事情。

如果你需要复习其中任何内容,请查看以下内容:

《数学过头了!(成人基础数学)》作者:Colin W. Clark。这是一套两本书,从头开始解释数学的工作原理,适合想要学习数学的成年人。

FR Moore 的《数字信号处理数学导论》。这两篇文章于 1978 年发表在《计算机音乐杂志》上,但至今仍然具有现实意义。PDF 需要付费,但只要谷歌一下就能轻松找到。

Khan Academy提供出色的免费在线高中和大学数学课程 — — 以及其他几乎所有课程 。khanacademy.org

我建议先从下一节开始读几本书,如果你遇到困难,就升级你遇到问题的数学领域。不要单独学习数学,而是在数字信号处理的背景下学习。

数字信号处理 (DSP)知识

音频编程是 DSP 的一种形式,因此最好对数字信号处理的工作原理有扎实的了解。以下是精选的优质 DSP 书籍:

Allen B. Downey 著的《Think DSP》。有纸质版,但在线版也免费。这是对数字信号处理基本原理的精彩介绍。这本书是为初学者编写的,数学知识简单易懂。尤其棒的是,大多数示例都使用音频信号。如果您还没有学习过任何 DSP,我强烈建议您从这本书开始。它使用 Python 作为代码示例。

科学家和工程师的数字信号处理指南(dspguide.com),作者:Steven W. Smith。这是一本为 DSP 新手编写的精彩书籍。数学知识不多,但深入探讨了该主题。这本书是关于 DSP 的一般内容,不仅仅是音频,还包括您需要了解的所有内容。代码示例采用 BASIC 伪代码。这本书可以在线免费阅读,但我建议您下载 PDF并阅读。

Richard G. Lyons 的《理解数字信号处理》。另一本广受好评的 DSP 入门书。这本书涉及的数学知识更多一些,但无论如何,你终究还是得接触数学,这是不可避免的。读完以上两本书后,这是一本不错的书。

还有许多其他的 DSP 入门书籍。请注意,其中许多都是为大学生编写的教科书。这类书籍更适合在课堂上使用,而不是自学。

音频编程

一般的 DSP 书籍通常不涉及音频专用技术,但幸运的是,有许多资源涉及这些技术。我将从推销我自己的书籍开始:

Matthijs Hollemans撰写的《音频插件开发初学者完整指南》。如果您对软件开发一无所知,那么这本书就是为您而写的。它解释了从头开始创建音频插件的整个过程,包括 C++ 语言、设置开发环境 (IDE)、安装 JUCE 框架以及编写实际的 DSP 代码。本书的目的是降低开始制作插件的学习难度。本书的PDF 和 EPUB 版本可从 The Audio Programmer 购买,平装版可从 Amazon 购买。

再次是的《使用 C++ 和 JUCE 创建合成器插件》。这本电子书逐步讲解了如何创建完整的软件合成器插件。您将学习合成器工作原理以及如何在 C++ 中实现底层 DSP 算法。本书提供PDF、EPUB 和平装本。源代码位于 GitHub 上,因此您已经可以查看完成的合成器项目。

音频程序员如果您通过观看视频来学习效果最好,我诚挚地推荐Joshua Hodge 的 YouTube 频道。他解释了如何使用 JUCE 制作音频效果和合成器。在这里,您还可以找到每月聚会的视频和直播,Josh 和他的联合主持人会采访音频开发领域的专家。

Will C. Pirkle 编写的《用 C++ 设计软件合成器插件》和《用 C++ 设计音频效果插件》。这些书包含大量相关信息,尽管有时解释令人困惑(您可能想先阅读一本普通的 DSP 书籍),而且我不喜欢这种编码风格。就我个人而言,我发现第一版合成器书比第二版更容易阅读,但无论哪一版都绝对值得一读。这里有很多好东西!

Curtis Roads 的《计算机音乐教程》。这是一本讨论计算机音乐各个方面(包括合成方法和音频处理)的巨著。它不是一本编程书,但确实详细描述了算法。对于任何与计算机音频相关的内容来说,这都是一本很好的参考书,而且非常易读。每次打开它,我都会学到一些新东西。(提示:您可能需要等几个月才能购买这本书;新版本将于 2023 年晚些时候推出。)

Eric Tarr 的Hack Audio。音频处理算法的简单介绍。代码示例在 MATLAB 中,但 Python 版本可以在 GitHub 上找到。您还可以在Eric 的网站上找到有用的视频教程。

音频效果:理论、实施和应用,作者 Joshua D. Reiss 和 Andrew McPherson。这是一本很好的实用书,解释了各种音频效果。代码采用 C++ 编写。涵盖的内容与 Pirkle 的音频效果书和 Hack Audio 大致相同,但同样值得添加到您的书架中。

Gareth Loy 的《Musimathics I & II》。不是编程书籍,但仍然很有趣。第 1 卷解释了音乐和声音的数学基础。第 2 卷介绍了数字音频和 DSP 背后的数学。

有用的技能

使用 DAW。这么说似乎有点傻,但你需要对音乐制作、音频编辑、声音设计、作曲等有一定的了解。这就是业内所谓的“领域知识”。如果你不知道音频世界的工作原理或对术语感到困惑,那么编写音频软件会很困难。(例如:你知道“侧链”是什么吗?)

乐器设计。音频编程不仅仅是实现 DSP 算法。您需要决定使用哪些构建块以及如何将它们组合成有意义的东西。这需要了解效果和乐器通常如何工作——无论是内部还是外部。

UI 设计。优秀的软件使用起来简单直观,制作出色的用户界面本身就是一门技能。您可能拥有世界上最出色的 DSP,但如果 UI 一团糟,人们就不会使用它。

知道如何寻求帮助。网上有很多经验丰富的人愿意帮助新手,但前提是你让他们能轻松地帮助你。阅读此文

其他学习资源

音频程序员社区。Discord服务器,里面有聪明友好的人,他们喜欢整天谈论音频开发。这个 Discord 对新手非常欢迎,但也有成员在您熟悉和喜爱的音频公司工作。快来加入吧,它是免费的,你会学到很多东西。

JUCE 网站有教程和 API 文档。如果你还没有看过教程,那你一定要看看。它们不仅解释了如何使用 JUCE,还解释了如何进行实际的音频编程。还可以查看JUCE 论坛。不要忘记示例文件夹中 JUCE 附带的示例项目(也可以从 Projucer 访问)。

学术论文。音频领域的许多知识都以学术论文的形式发表在AES Journal等期刊和DAFX等会议上。您通常可以通过谷歌搜索标题在网上找到这些论文的 PDF 格式。有时这些论文需要付费阅读。一旦您掌握了音频开发的基础知识,开始阅读论文是个好主意。

很棒的列表。社区成员收集了他们最喜欢的音频 DSP 链接。请在此处查看:

olilarkin/awesome-musicdsp

BillyDM/Awesome-Audio-DSP

jareddrayton/音频插件开发资源

sudara/awesome-juce

音频开发者大会 (ADC)。在音频领域,会议和组织都偏向学术方面,但ADC是每年举办的盛会,专注于代码和实用解决方案。它由 JUCE 背后的人员组织。您可以在JUCE YouTube 频道上找到以前 ADC 演讲的视频。