一个基本的基于文本的录音室
无论您喜欢金属、爵士、噪音、巴洛克还是介于两者之间的任何风格,艺术家们不仅担任作曲家和表演者的角色,而且还担任录音工程师、制作人甚至自己作品的分销商的角色,这种情况正变得越来越普遍。
Linux 音频应用程序的功能和质量都非常好,并且在不断提高。对高端和低端声卡的支持也一直在改进。它是否会成为该领域的主导平台在很大程度上是无关紧要的——对于我们这些发现 Linux 和开源工具的灵活性非常有价值的人来说,现在拥有了一个适合创作高质量音轨的平台。
本文概述了一种简单的方法,可以基于此方法构建分层、多轨录音。为了秉承 Linux 的传统,在本文中,我们讨论了许多小型命令行工具,这些工具可以非常好地执行非常特定的任务。然后,我们将这些工具中的每一个的功能组合成一个数字音频工作站。正如您将看到的,以这种方式使用这些工具,可以克服其中一些工具中的(罕见)缺点。
我们在此处介绍的工具是 Ecasound 和 JACK。还简要提到了 Hydrogen 鼓机。我们没有直接使用任何 ALSA 或 OSS 特定的功能,两者都可以。事实上,对于那些迷失方向并偏离启蒙之路(开玩笑)的人来说,这些工具和技术在 Mac OS X 上的 CoreAudio 下也适用。
图 1 显示了数据如何在这些组件之间以高层级流动。
对于本文中概述的示例,任何声卡都可以。我甚至使用我的 Linux 笔记本电脑之一中的板载 Intel i8x0 声卡进行了一些相对可接受的录音。然而,低端音频控制器和中高端音频控制器之间的差异非常明显。
我们还需要一个 Linux 发行版。如果您的发行版难以获取 JACK 和 Ecasound,请尝试 AGNULA live 发行版。如今,大多数发行版都附带相关的软件包。
混音器是理想的。使用小型(读作:廉价)混音器可能会给您带来更大的灵活性和获得更好声音的机会。您也可能会发现直接注入盒或麦克风前置放大器就足够了。
请注意,图 2 建议将耳机插入您的 Linux 电脑。大多数混音器允许将声卡插入信号返回端口,并允许耳机在信号发送到 Linux 电脑之前或之后接收音频信号。这也是可以接受的。
JACK,代表 JACK 音频连接工具包,是一个 API 和一项服务,可在许多符合 POSIX 标准的系统上的应用程序之间提供音频连接。 JACK 的设计考虑了低延迟通信。
本文中的许多示例即使没有 JACK 也可能同样有效。我个人在使用 JACK 并在实时优先级下运行的系统上比没有 JACK 的系统上遇到的音频中断更少,并且它对于互连音频应用程序(例如稍后讨论的 Ecasound 和 Hydrogen 示例)非常有用。
为了让应用程序使用 JACK,它们必须链接到 JACK API 库,并且必须启动名为 jackd 的 JACK 服务。随 JACK 附带的发行版通常已经链接了大多数应用程序到 JACK API。如果没有,请查阅给定应用程序的构建或编译说明。
要启动 JACK 服务,请执行类似于以下内容的命令
jackd -R -d alsa
-R 选项指示 JACK 尝试获得实时权限,-d alsa 指示 JACK 使用 ALSA 声音系统。对于仍然使用 OSS 声音系统的用户,-d oss 应该足够了,-d coreaudio 应该可以让 Mac OS X 用户开始使用。
每个驱动程序都支持一系列特定于驱动程序的选项。可以通过在 -d alsa 之后指定 --help 来查看这些选项。
在深入太多并开始录制音频之前,我强烈建议花一些时间来正确设置各种设置和电平。好消息是,这涉及将您选择的乐器插入混音器或将其放在麦克风前并进行演奏。
首先,使进入混音器的平均信号保持在 0VU 标记附近,并尽量避免信号过于频繁地进入红色区域。一旦混音器电平大致正常,将其连接到您的 PC 并检查输入电平和输出电平是否正常
ecasound -i jack_auto -o null -ev
-i jack_auto 命令行选项告诉 Ecasound 从 JACK 获取其输入。因为我们目前没有运行任何其他支持 JACK 的应用程序,所以 JACK 从声音设备获取此输入。-o null 告诉 Ecasound 将输出发送到天空中的巨大位桶。
-ev 选项告诉 Ecasound 跟踪幅度统计信息,-c 选项以交互模式启动 Ecasound。运气好的话,您应该会看到一些信息性消息,并且没有错误或警告。
任何打击乐声音(例如吉他上的闷音)都可能导致音频轨道出现峰值。在检查信号电平时,使用您打算稍后录制的任何这些技巧——这将在创意天才时刻避免令人讨厌的意外。要停止,请按 Ctrl-C。您应该看到类似于以下内容的输出
.... (audiofx) Peak amplitude, period: pos=0.30495 neg=0.26996. (audiofx) Peak amplitude, all : pos=0.30495 neg=0.26996. (audiofx) Clipped samples, period: pos=0 neg=0. (audiofx) Clipped samples, all : pos=0 neg=0. (audiofx) Max gain without clipping, all: 3.27926. (audiofx) -- End of statistics --------------------------------
首先,检查您是否没有削波样本(正或负)。其次,检查最大增益数字。这给出了该样本在开始削波之前可以(理论上)放大的百分比。根据您的硬件,您可能永远无法在听到可听失真之前达到几个百分点之内,因此在您熟悉硬件之前,最好给自己留一点空间。在测试时听。
在进行混音器调整后,再次尝试之前的几个步骤。
一旦您对输入电平感到满意,请将输出电平设置为您使用耳机监听的舒适电平。
Ecasound 是一个能够进行多轨录音等的命令行工具。使用 Ecasound 的基本概念是链。为了我们的目的,您可以将链视为类似于配线架中的跳线。信号从声源进入链的一端,并从链中退出到另一个组件。跳线只有一个输入源和一个输出目标,Ecasound 的链概念也是如此。
Ecasound 中链的源和目标通常是音频文件或音频控制器。拥有复杂的链集是很正常的。我们将录制的第一条音轨将看到 Ecasound 从正在运行的 JACK 实例中获取音频并将数据写回 JACK,并在 PCM 音频文件中保留一份副本。执行这些任务所需的两条链如表 1 所示。
这等同于以下 Ecasound 命令
ecasound -c -b:64 \ -a:1,2 -i jack_auto \ -a:1 -o jack_auto \ -a:2 -o track1.wav
一旦 Ecasound 初始化完成,它会提示您输入指令。使用 t 命令开始录制/播放,使用 s 命令停止。如果您犯了错误,您可以发出 stop (s)、setpos 0 命令,然后发出 t 再次开始。完成时,q 命令退出。无需发出任何类型的命令来保存结果——这会在您录制时发生。
上面的命令可以分解为以下功能
-c:不要立即开始处理,而是进入交互模式。
-b:64:将缓冲的样本数设置为尽可能小,从而减少延迟。
-a:1,2 -i jack_auto:创建两个链(1 和 2)并将它们的输入设置为来自 JACK。
-a:1 -o jack_auto:将链 1 的输出设置为 JACK。
-a:2 -o track1.wav:将链 2 的输出设置为 track1.wav。
此特定示例的总体结果是,链 2 将通过 JACK(因此可能是声卡)传入的任何内容录制到 track1.wav。链 1 允许您在录制时听到音频信号。
除非您要录制现场立体声音轨,否则您可能想要叠录其他音轨。可以使用 Ecasound 在录制(和收听)新音轨时收听您已录制的音轨。
要在录制第二条音轨时收听已录制的音轨,请创建三个 Ecasound 链(表 2)。
创建像这样的链设置会导致 track1.wav 的内容被发送到 JACK 进行播放,并且来自 JACK 的任何输入都被发送回 JACK 并保存到名为 track2.wav 的文件中。 track2.wav 将仅包含新音轨——而不是新音轨与旧音轨的混合。我们稍后会混合它们。
将此链设置转换为实际的 Ecasound 命令非常简单
ecasound -c -b:64 \ -a:1 -i track1.wav \ -a:2,3 -i jack_auto \ -a:1,2 -o jack_auto \ -a:3 -o track2.wav
录制更多音轨的过程类似。我们为我们已录制的每个音轨创建一个链,并将它们的输出设置为 JACK。我们还设置了两个链来从 JACK 获取输入并将其发送到一个文件并返回到 JACK,这样我们就可以听到它。表 3 中的链设置就足够了。
此链设置转换为以下 Ecasound 命令
ecasound -c -b:64 \ -a:1 -i track1.wav \ -a:2 -i track2.wav \ -a:3,4 -i jack_auto \ -a:1,2,3 -o jack_auto \ -a:3 -o track3.wav
我不是鼓手,但我录制的一些东西需要鼓。虽然 Hydrogen 鼓机可能是我在 Linux 上见过的最好的,但它尚未达到神奇的 1.0 版本号,并且还不完美。我在运行的快照中损坏的一个功能是导出到 PCM 音频 .wav 文件的能力。幸运的是,或者说是良好的设计,Hydrogen 可以使用 JACK 来输出数字音频。
要使用 JACK 和 Ecasound 录制音频应用程序(例如 Hydrogen)的输出,我们可以执行以下步骤
配置 Hydrogen 使用 JACK 作为其输出。
配置 Hydrogen 在歌曲模式下播放,而不是在模式模式下播放。
执行以下命令
ecasound -a:1 -i jack_auto -o drum_track.wav -G jack,ecasound,recv
单击 Hydrogen 中的播放按钮。
上面的命令在 Ecasound 中配置了一个链,该链从 JACK 获取输入并将输出发送到名为 drum_track.wav 的文件。 -G jack,ecasound,recv 指示 Ecasound 监听 JACK 的启动命令,该命令在我们单击 Hydrogen 中的播放按钮时作为名为 ecasound 的 JACK 客户端发送。
Ecasound 在接收到启动命令后可能需要一秒左右的时间才能启动和初始化,所以我喜欢在 Hydrogen 音轨的开头设置一段静音模式。
除非您有完美的时间感,否则您很可能会先录制任何软件源。将软件源(例如鼓机)与现有的人工录制音轨同步比围绕机器创建的音轨录制人工音轨更难。这包括您打算使用的任何 MIDI 音轨。
此时,我们有一系列 .wav 文件,它们对应于我们录制的每个音轨。如果需要,我们可以使用 Ecasound、SoX 甚至 Audacity 添加效果或对任何音轨进行小的更正或更改。一旦我们对各个音轨感到满意,我们就可以混合一个单一的母带音轨。
将我们的多个音轨转换为单个立体声母带音轨的过程非常简单。我们为每个音轨创建一个链,并将输出设置为 .wav 文件。
表 4. 将多个音轨转换为单个立体声母带
链 | 输入源 | 输出目标 |
---|---|---|
1 | track1.wav | all_tracks.wav |
2 | track2.wav | all_tracks.wav |
3 | track3.wav | all_tracks.wav |
Ecasound 提供了一种使此特定情况更容易的方法。 all 伪链名称可用于将我们所有音轨的输出重定向到一个地方,即一个名为 all_tracks.wav 的文件
ecasound -a:1 -i track1.wav \ -a:2 -i track2.wav \ -a:3 -i track3.wav \ -a:all -o all_tracks.wav
要收听结果,请输入
ecasound -a:1 -i all_tracks.wav -o jack_auto
也可以将母带直接写入声卡,而无需先写入文件
ecasound -a:1 -i track1.wav \ -a:2 -i track2.wav \ -a:3 -i track3.wav \ -a:all -o jack_auto
您还可以在每个链写入输出目标之前,为其附加一系列效果,包括混响、压缩和放大。甚至可以添加延迟和更改特定音轨的声像,甚至执行降噪;然而,这些主题超出了本文的范围。
正如我们所演示的,可以使用一些 Linux 音频工具创建一个简单的多轨录音。一旦我们启动 jackd,当我们录制初始音轨并叠录一系列后续音轨时,告诉 Ecasound 从哪里接收输入以及将输出发送到哪里就是一个简单的过程。
这些音轨中的每一个都已存储在其自己的单独的 .wav 文件中。这使我们可以使用任何其他声音文件编辑器来手动修改音轨,然后再混合最终音轨,然后也可以对其进行调整。用于处理音频文件的常用应用程序包括 Ecasound、SoX 和 Audacity。
我们实际上只是触及了这个庞大领域的特定方面的表面。幸运的是,它将构成一个坚实的基础,您可以在此基础上构建您的创意天才!
本文的资源: /article/9269。
Matthew Geddes 的爱好是音乐和 Linux。对他和周围的人来说幸运的是,它们也恰好是他的职业。当他不演奏自己的作品时,他会聆听从巴赫和 Son House 到 Rachel Singleton 和 A norexia Nervosa 的所有音乐。可以通过 lj@musicalcarrion.com 或通过 www.musicalcarrion.com 与他联系。