发布于 2026-01-06 3 阅读
0

使用 Sonic Pi 生成音乐

使用 Sonic Pi 生成音乐

本文最初发表于 Twilio 博客,日期为 2018 年 5 月 17 日。

sonic-pi

Sonic Pi 是一个用于用 Ruby 编写音乐的集成开发环境 (IDE)。我使用 Sonic Pi IDE 编写 Ruby 代码,并用Audacity以 Messica Arson 的艺名将自己的尖叫声采样到代码上。我创作的声音深受噪音音乐的奇异音效以及我作为朋克乐队主唱时磨练出的嘶吼声的启发。

在本教程中,我们将一起学习如何创作这首歌

Sonic Pi是什么?

借助 Sonic Pi,我们可以像使用合成器一样与计算机进行交互。Sonic Pi 的底层是SuperCollider的一个 Ruby 封装。它内置了许多采样和合成器,您可以以无数种方式与之交互。您还可以添加自己的采样,就像我们将在本教程中演示的那样。

请先下载 Sonic Pi,然后再继续阅读本文。如果您使用的是旧版本的 Sonic Pi,请务必更新到最新版本(3.1 版)。要更新,请转到菜单help,然后点击“更新”按钮updatescheck now查看是否有最新更新。

循环是 Sonic Pi 的核心。

电子音乐建立在重复循环之上,因此理解循环的创建方式是有效使用 Sonic Pi 的关键概念。实时循环功能允许您即时进行修改。

Sonic Pi 中循环的基本语法如下:

live_loop :name_your_loop do
  synth :name_of_synth
  sleep 0.25
end

创建循环的第一步是给循环命名。之后,你可以调用你正在使用的合成器或采样。`sleep` 参数可以让你调整循环的时长。`sleep` 值越小,声音播放越快;值越大,声音播放越慢。需要注意的是,如果不添加 `sleep` 参数,循环将无法正常工作。

让我们一起开始创作一首歌吧。

现在我们已经了解了 Sonic Pi 中循环的基本语法,就可以在Buffer 0IDE 中编写第一个循环了。在 Sonic Pi 中,缓冲区是编写代码的地方。你可以在一个缓冲区中编写代码,然后在创作歌曲的过程中切换到另一个缓冲区继续编写代码,而无需中断创作。一些开发者选择在多个缓冲区中编写代码,以便更好地组织代码。Sonic Pi 共有 10 个缓冲区,编号从 0 开始。今天,我们将把所有代码都编写在一个缓冲区中。

让我们创建一个名为 start 的循环,它使用IDE 中的第一个缓冲区tri作为合成器:Buffer 0

live_loop :start do
  synth :tri
  sleep 0.25
end

要运行循环,请按Run按钮或alt/cmd R。要停止声音,请按alt/cmd S或停止按钮。三音合成器会发出悦耳动听的旋律,听起来像这样。Sonic Pi 的完整键盘快捷键列表可在此处找到。

在我们的歌曲中添加采样

现在我们可以向循环中添加一个名为 `sample` 的示例start。让我们使用我最喜欢的内置示例之一,名为 `sample` loop_safari。编辑你的循环,使其如下所示:

live_loop :start do
  synth :tri
  sample :loop_safari
  sleep 0.25
end

现在声音应该更有打击乐的元素,听起来像这样

添加第二个带低音的循环

目前为止,我们一直在使用一个循环,但如果添加另一个循环,就可以调整节奏。节奏由循环的间隔(sleep)决定,从而可以加快或减慢播放速度。为了让歌曲听起来更完整,我们将让低音部分比第一个循环更慢。

在现有循环的正下方,start我们添加第二个循环:

live_loop :second do
  sample :bass_thick_c
  sleep 0.5
end

正如你所听到的,低音使我们创造的声音听起来更加饱满。

添加效果

我们可以添加一些效果,比如失真。失真会增加声音的增益幅度,从而产生一种模糊的效果。我们将添加另一段旋律,并加入一个经过失真处理的钟声。让我们在名为“第二个”的循环下方添加第三个循环,该循环使用失真效果:

live_loop :distort_everything do
  with_fx :distortion do
    synth :pretty_bell
    sleep 0.75
  end
end

我们现在应该听到的是这些。

使用笔记

我们还可以通过在现有循环下方添加第四个循环来演奏一连串音符distort_everything。让我们添加这个循环:

live_loop :notes do
  use_synth :pluck
  n = (ring, :d3, :d1, :d2)
  play n
  sleep 0.15
end

我们刚刚添加了一个合成器,它听起来像是用d3、d1和d2这三个音符拨动吉他弦的声音。加上这个循环之后,我们的歌曲现在听起来是这样

添加音频样本

在本教程的这一步,您可以下载我使用的文件,也可以使用您选择的其他音频文件。您还可以录制自己的声音。为了录制自己的声音,我使用 USB 线连接的麦克风,在Audacity中录制了自己的尖叫声。我可以使用录音过程中创建的文件路径来创建一个循环,例如:

live_loop :my_own_voice do
  sample "/path/to/soundfile.wav"
  sleep 9
end

请务必将 替换path/to/soundfile.wav为您在 Audacity 中创建的音频文件路径或下载的文件路径。

这个循环位于我的代码底部,在notes1循环的下方。

完整代码

这首歌的完整代码如下:

live_loop :start do
  synth :tri
  sample :loop_safari
  sleep 0.25
end

live_loop :second do
  sample :bass_thick_c
  sleep 0.5
end

live_loop :distort_everything do
  with_fx :distortion do
    synth :pretty_bell
    sleep 0.75
  end
end

live_loop :notes do
  use_synth :pluck
  n = (ring, :d3, :d1, :d2)
  play n
  sleep 0.15
end

live_loop :my_own_voice do
  sample "/path/to/soundfile.wav"
  sleep 9
end

Sonic Pi 我最喜欢的功能

我刚开始接触 Sonic Pi 的时候,一行 Ruby 代码都没写过。这是我最喜欢的学习新编程语言的方式,因为我可以听到我的代码发出酷炫的声音。稍微修改一下代码,看看声音会发生什么变化,真的很有意思。你可以通过按键实时更新声音Runalt/cmd R即使你正在播放音乐也可以。

在 IDE 文档中

Sonic Pi 最棒的功能之一就是它把文档内置到了 IDE 里。我刚开始用 Sonic Pi 的时候,就直接用文档里的示例,然后自己修改,直到做出属于自己的声音。这个功能在你刚开始学习或者遇到问题的时候都非常实用。

现在你已经了解了我使用 Sonic Pi 创作歌曲的过程,希望这能给你带来灵感,让你也开始创作。你可以按下按钮录制你创作的歌曲Rec并保存.wav文件。请务必在 Twitter 上@JessicaGarson告诉我你用 Sonic Pi 创作出了哪些酷炫的声音。

文章来源:https://dev.to/jessicagarson/geneating-music-with-sonic-pi-57od