数字音乐创作/声音制作
有几种方法可以数字生成声音。当然,所有这些技术所做的就是产生一系列代表声音样本的数字。这些数字通过前面描述过的数字-模拟转换过程转换为实际的可听声音。
计算机制作声音最直接的方法是录制或 *采样* 现有的声音来源(例如传统的非数字乐器)并回放录音。
当然,除了直接回放外,还可以应用创意技术,例如剪辑样本以更改其播放时间或顺序、过滤等等。因此,采样器 成为了一种非常合法的乐器。
另一种技术是从易于电子生成的简单周期性波形开始。大多数减法合成器使用六种不同的基本波形
- 正弦波:正弦波是最基本的波形。它听起来平滑干净,因为正弦波的声音仅由一个基频组成。由于减法合成通过去除谐波来工作,而正弦波没有谐波,因此这种波形在减法合成器中用途有限。
- 三角波:三角波具有奇次谐波,并且随着它们离基频越来越远而逐渐衰减。因此,它听起来比正弦波更清晰、更明亮。
- 锯齿波:锯齿波是最嘈杂的基本波形,包含大多数谐波。这使其成为减法合成的绝佳选择。
- 方波:方波包含奇次谐波,听起来比三角波更尖锐,但不如锯齿波尖锐。
- 脉冲波:方波的变体。它不像方波那样具有50%的占空比,而是具有其他占空比。这使得它听起来比方波更细。
- 白噪声:白噪声不使用每个周期重复自身的简单波形,而是为每个样本生成随机值。它包含各种频率的混合。合适的滤波可以将其转换为各种非旋律打击乐声音。
所选波形可以通过滤波器来衰减或去除选择的谐波,从而产生各种不同的音色。
与减法合成相反的方法是从一组对应于谐波频率的纯正弦波开始,然后以合适的幅度将它们混合在一起,以合成所需的音色。这可能需要调整许多谐波分量的幅度——16或32个或更多,这可能是一个非常繁琐的过程,并且结果难以预测。
一些音乐应用程序允许您在屏幕上手绘声音的波形。但是,通常很难提前预测特定的波形会发出什么声音。
也许产生逼真乐器模拟的最耗费计算资源的技术是在计算机上对乐器进行 *物理建模*。例如,要产生真实的弦乐声音,您可以制定数学方程来描述弦的行为,同时考虑其长度、质量、弹性、张力等,以及当它被弓或拨动时作用在其上的力。
此技术还可以扩展到模拟在现实生活中不可能构建的乐器的音色。例如,想象一下从小提琴的参数开始,然后将弦长增加到10米;那会是什么声音?
理论讲的够多了,让我们开始制作一些声音吧。在介绍典型Linux系统上如何处理声音的一些初步知识后,我们将熟悉以下步骤
- 配置JACK在音乐会话中的启动
- 为音乐应用路由音频
- 为音乐应用路由MIDI
- 结束音乐会话。
几乎所有Linux发行版都在最低层使用ALSA来管理声音硬件。此外,现在通常还会运行一个PulseAudio守护进程,为不同的应用程序提供单独的用户可设置音量控制。总而言之,此系统足以处理用户界面反馈声音、视频流和常见媒体播放器的常规声音播放需求。
但是,对于音乐制作工作,我们需要将JACK纳入等式。这为我们提供了一个“连接板”,我们可以在其中看到正在运行的不同音乐和音频应用程序(以及我们可用的系统硬件)公开的“端口”,并在这些端口之间运行虚拟“线”以建立音频和控制数据的连接。
它需要一些设置,但JACK和PulseAudio *可以*被说服同时工作。PulseAudio可以在JACK运行时将其自身转换为JACK客户端,并在JACK退出时恢复控制您的音频硬件。
实现此功能最简单的方法是下载我的pajackconnect脚本的副本。它包含在JACK启动时设置PulseAudio的命令,以及在JACK终止时重置PulseAudio的命令。为简单起见,将脚本安装到站点本地可执行文件的常用目录,即/usr/local/bin,这样它将通过您的PATH自动找到,您无需键入其完整路径名即可调用它。
JACK本身是一个后台 *守护进程*;它为其他应用程序提供服务,但本身没有实际的用户界面。但是,有各种GUI工具可用于控制它;在这里我将使用QjackCtl。
启动QjackCtl时,它将显示一个初始主窗口,如下所示。首先,单击“消息”按钮以调出一个显示各种日志消息的窗口;这通常会显示一行内容“jack服务器未运行或无法启动”。这现在没关系。**请勿立即单击“启动”按钮。**
另请单击“图形”按钮,将出现另一个窗口,显示JACK客户端应用程序之间的连接。它将有3个选项卡,分别标记为“音频”、“MIDI”和“ALSA”。“音频”选项卡将显示音频数据路由的连接,“MIDI”和“ALSA”选项卡将显示两种不同类型的MIDI数据路由连接。使用ALSA调用来管理其MIDI接口的应用程序将显示在“ALSA”选项卡下,而使用原生JACK调用的应用程序将显示在“MIDI”选项卡下。
不幸的是,这两种 MIDI 路由方式不兼容:您无法在其中一个选项卡上的端口与另一个选项卡上的端口之间建立连接。看起来“原生 JACK”调用是未来的首选方式,而旧的应用程序仍然使用“传统 ALSA”调用。幸运的是,有一种方法可以在这两个世界之间架起桥梁(如下所述)。
在每种情况下,数据源位于左侧,目标位于右侧,您会看到连接它们之间的线条(您可以控制),表示连接。最初,您在这些显示器中将看不到任何内容,因为 JACK 尚未(运行)。
接下来,点击“设置...”按钮。这将弹出一个窗口,您可以在其中设置实际运行 JACK 的选项。我们将关注“设置”和“选项”选项卡下的一些重要字段;暂时可以忽略其他字段。
在“设置”选项卡中,“服务器前缀”字段包含用于启动 JACK 守护程序的命令。默认值(“jackd”或“/usr/bin/jackd”)应该可以正常工作。
现在转到“选项”选项卡。您会看到在启动/关闭序列的各个点“执行脚本”的选项。我们需要设置其中两个。
首先,选中“启动后执行脚本”选项。我们需要在这里执行两个命令:一个用于运行pajackconnect脚本,另一个用于启动a2jmidid它将代理ALSA MIDI 连接到原生 JACK MIDI 选项卡。这两个命令可以在同一行输入,用分号分隔,如下所示
pajackconnect start; a2jmidid -e &
您首先需要确保已安装a2jmidid包。并注意a2jmidid命令末尾的“&”:这告诉 QjackCtl 启动命令并运行,而不是等待它终止。如果您忘记了这一点,QjackCtl 将挂起,直到您终止a2jmidid进程。此程序监视您所有 ALSA MIDI 连接,并自动在“MIDI”选项卡下显示相应的原生 JACK 端口,允许您在一个选项卡下在较新和较旧的应用程序之间建立连接。“-e”选项告诉它也为硬件 MIDI 接口创建 JACK 端口。
(请注意,我们不必在音乐会话结束时提供任何类型的命令来关闭a2jmidid;当它发现 JACK 停止运行时,它会自动终止。)
接下来,查找“关闭时执行脚本”选项:选中此选项,并在相应的命令字段中输入
pajackconnect stop
这告诉pajackconnect脚本在 JACK 终止后完成其恢复正常 PulseAudio 操作的过程。
完成上述所有更改后,单击“确定”按钮关闭 QjackCtl 设置窗口。
好的,现在您可以点击“启动”按钮启动 JACK 了。如果一切顺利,您应该会看到消息窗口中出现大量消息,表明 JACK 正在运行。为了进一步确认,在连接窗口中调出“音频”选项卡,以确认它看起来像右侧:左侧的“系统”条目表示您的声音输入硬件,右侧的另一个名为“系统”的条目是您的声音输出。PulseAudio 将在该窗口中注册自身,并自动互连,以便其客户端可以像以前一样继续播放和捕获声音。
在音乐会话期间保持 QjackCtl 运行。您需要使用它来管理 JACK 客户端应用程序之间的路由。 |
“音频”选项卡是否未包含如所示的 PulseAudio 连接?检查消息窗口中的错误。您是否看到
sh: 1: pajackconnect: not found
(您可能需要稍微向上滚动一下)?这意味着pajackconnect脚本在您的PATH中找不到。或者
sh: 1: pajackconnect: Permission denied
意味着脚本尚未获得可执行权限。您可以通过打开一个终端窗口并在 shell 提示符处键入以下命令来检查脚本是否可访问
pajackconnect
如果看到消息
Usage: pajackconnect start|stop
那么pajackconnect已正确安装。
现在,让我们启动一个可以实际使用 JACK 发出声音的应用程序。我们将从 ZynAddSubFX 开始,因为它是一个相当独立的软合成器应用程序,包含各种各样的声音合成方法。
ZynAddSubFX 集成了大量控件,一开始可能会让人感到困惑。我们将从一些非常简单的步骤开始。启动它时,您将看到一个类似于右侧的初始窗口。在“乐器”菜单下,选择“虚拟键盘...”(或单击背景为亮蓝色的“vK”按钮);这将弹出一个另一个窗口,显示音乐键盘的图像,您可以在其中单击琴键以发出声音。
如果您尝试点击此键盘,您将听不到任何声音。为什么?因为您还没有告诉 JACK ZynAddSubFX 的音频应该去哪里!要解决此问题,请转到 QjackCtl 的连接窗口;在“音频”选项卡中,您将看到出现了一个额外的源,标记为“zynaddsubfx”;将鼠标从这里拖到右侧的“系统”条目,它们之间应该会出现一条线。或者,您可以在各自的列表中选择这两个条目,然后单击“连接”按钮以使线条出现。
无论如何,现在如果您单击 ZynAddSubFX 的虚拟键盘,您应该开始听到声音。最初,这些声音不会很有趣,因为 ZynAddSubFX 生成的默认音调是纯 正弦波。虽然这有其用途,但还有很多更有趣的预设只需点击一下即可。
返回 ZynAddSubFX 主窗口中的“乐器”菜单,这次选择“显示乐器库...”。这将弹出一个窗口,显示所有加载的预设,以及许多按钮,包括未使用预设插槽的空白按钮。左上角有一个弹出菜单,用于在不同的预设类别中进行选择;选择其中一个,您应该会看到窗口显示更改为显示指定类别中的预设。单击带标签的按钮之一以更改声音。现在尝试单击虚拟键盘上的琴键,并听听声音。
现在我们将启动一个单独的虚拟键盘应用程序,称为vmpk],或“虚拟 MIDI 钢琴键盘”。当 ZynAddSubFX 已经包含一个键盘时,为什么要费心?因为此键盘应用程序不仅可以驱动 ZynAddSubFX,还可以驱动其他声音源,而这些声音源没有提供自己的键盘。
此应用程序应在应用程序菜单中以“虚拟 MIDI 钢琴键盘”的名称显示。启动此应用程序后,检查 QjackCtl 的“连接”窗口中的“ALSA”选项卡。从左侧的“VMPK 输出”到右侧的“ZynAddSubFX”运行一根线。
现在尝试点击新的虚拟键盘,您应该会像以前一样听到 ZynAddSubFX 发出声音。当然,它自己的键盘仍然可以工作。
现在,仅仅为了好玩,让我们尝试一个名为“JACK Keyboard”的应用程序(包名称为jack-keyboard)。它仅在“MIDI”连接选项卡(而不是“ALSA”)中显示其 MIDI 端口。ZynAddSubFX 仅执行“ALSA”。但是,因为我们有a2jmidid正在运行,您将在 MIDI 选项卡中看到标记为“a2j”的源和目标。单击右侧源部分中的一个旁边的“>”符号,您将看到 ZynAddSubFX 的条目。将其连接到 jack-keyboard 的目标,如所示,并尝试使用此键盘演奏音符。
如果您在 QjackCtl 中建立了错误的连接,或者只是改变了路由的想法,您可以通过在各自的列表中选择其源和目标,然后单击“断开连接”按钮来删除该连接。
如果您有真正的 MIDI 键盘,您可以使用 MIDI-USB 适配器将其连接到您的 PC。Linux 包含对这些设备的标准支持,因此它们应该会显示在 QjackCtl 的“连接”窗口的“ALSA”选项卡中,就像vmpk一样。并且a2jmidid也将它们路由到“MIDI”选项卡。
或者,ZynAddSubFX 和虚拟键盘应用程序都允许您在计算机键盘上演奏,就像它是一个音乐键盘一样。但是,您的键盘能够识别的同时按键数量可能有限,因此和弦中的音符最大数量也受限。
确保任何这些虚拟键盘窗口都处于活动状态——无论是 ZynAddSubFX 中内置的窗口,还是vmpk或 JACK Keyboard。尝试按下字母键的底行:Z、X、C、V、B、N、M 等应对应于从中央 C 向上的白键,下一行的 S、D 等构成相关的黑键。此外,Q、W、E 等为您提供了另一行从中央 C 上方的 C 开始的白键,字母数字 2、3 等是相应的黑键。这些只是默认设置;请注意 ZynAddSubFX 键盘中标记为“"qwer" Oct”和“"zxcv" Oct”的小控件:这些控件允许您更改这些键行的八度音程分配。较大的“Oct”控件会更改所有这些琴键以及窗口中可点击琴键的音调。
在vmpk中,“基本八度音程”控件允许您将所有内容向上或向下转置整个八度音程,而“转置”控件允许您对音调进行半音级别的更改。在 JACK Keyboard 中,“八度音程”控件仅更改计算机键盘上的琴键音调,而不是虚拟键盘窗口中的琴键音调。
在所有应用程序中,当您按下计算机键盘上的琴键时,您会看到虚拟键盘显示屏中相应的琴键高亮显示。
ZynAddSubFX可以同时接收多个MIDI通道的命令。请查看此处标记的设置。
默认情况下,仅启用通道1,窗口显示通道1的设置。点击通道指示器以显示通道2的设置,您会看到“启用”复选框未选中;选中它以启用通道2。检查窗口右侧的“MIDI Chn Rcv”弹出菜单;对于此通道,此菜单应默认为“Chn2”。此外,从乐器库中为通道2选择一个声音——与您从通道1中选择的有所区别。(您从乐器库中选择的任何乐器都将应用于当前在此指示器中显示的通道。)
现在,转到您的虚拟键盘应用程序,并将其切换为在通道2上发送MIDI命令。为了增加乐趣,可以打开两个键盘,一个在通道1上,另一个在通道2上(确保它们都连接到驱动ZynAddSubFX的MIDI输入),然后尝试依次点击每个键盘上的按键。
完成音乐制作后,请确保终止除QjackCtl之外的所有JACK客户端应用程序。然后点击QjackCtl主窗口中的“停止”按钮。将弹出一个对话框,警告您“某些客户端音频应用程序仍在活动并已连接”,即使您已退出所有应用程序;此对话框指的是PulseAudio,它会正确地自行清理,因此请点击“是”。您应该会看到消息窗口中出现大量消息,甚至可能有一些看起来像是错误的消息。不必过于担心这些;重要的是,“连接”窗口中的“音频”和“MIDI”选项卡现在为空(“ALSA”选项卡可能不是,但不用担心)。
现在您可以退出QjackCtl,并且您的系统声音仍可供非JACK客户端应用程序使用。