Lazuli

らずり

Sonic Pi を使って Ruby で音を楽しむ

Ruby Advent Calendar 2018 の12日目の投稿です。

Sonic Pi とは?

Sonic Pi は音楽を Ruby でライブコーディングできる IDE です。現時点での最新版は v3.0.1 です。
内部的には Super Collider という音響合成環境の Ruby ラッパーとなっています。

と、突然音楽用ライブコーディング IDE と言われても聞き慣れないものなのでイメージしにくいかもしれません。
どんなことが出来るのか、作者である Sam Aaronさんが実際にパフォーマンスをしている様子を YouTube に投稿しているので置いておきます。

www.youtube.com

めちゃくちゃかっこいいですよね!!そして頭がおかしい!

今回は、そんなSonic Pi の使い方を簡単に説明していきます。
音楽用語がいくつか載っていますが、今回それらについては説明しません。あしからず。

音を鳴らす

IDE の画面は以下の感じです。

f:id:app2641:20181211221110p:plain
Sonic Pi 画面

左側でコーディングして、右側に波形やログが表示されます。
メニューバーの Run ボタンを押してコードを再生するといった具合です。

まず、音を鳴らすには play メソッドを使います。
引数に鳴らしたい音名を渡します。

play :c

chord メソッドを使ってコードを鳴らすことも出来ます。

play chord(:c, :major)

play メソッドには音量を指定できる amp やパンニングを指定できる pan といったオプションもあります。

play :c, amp: 0.6, pan: -1
sleep 0.25
play :e, amp: 0.8, pan: 0
sleep 0.25
play :g, amp: 1, pan: 1

実行すると左スピーカーから右スピーカーへ徐々に音量を上げてアルペジオが流れます。
sleep は休符です。play は複数書いたとき同時に音を鳴らすようになっています。
ずらして音を鳴らすためには sleep でタイミングを変える必要があります。 sleep: 1 で 1 拍休みです。

ループで音を鳴らすには、鳴らす内容を live_loop にブロックで渡せば良いです。

live_loop :sample do
  chrod(:f, :M)
  sleep 1
  chrod(:d, :m7)
  sleep 1
  chrod(:g, :M)
  sleep 1
  chrod(:c :M)
  sleep 1
end

エフェクトを使う

音に味わいを出すために様々なエフェクトが使えます。リバーブやエコー、ディストーションを掛けられます。
エフェクトを使うには with_fx ブロックを使います。

# リバーブ
with_fx :reverb do
  play chord(:c, :major)
end

# エコー
with_fx :echo do
  play chrod(:c, :major)
end

with_fx には minroom といったオプションもあり、エフェクトのかかり具合が変更できます。
このあたりは実際に調整しながら遊んでみたほうが理解しやすいと思います。

with_fx :reverb, room: 1 do
  sample :loop_amen_full
end

with_fx :echo, mix: 0.3, phase: 0.25 do
  sample :loop_amen_full
end

Ruby の構文を使う

Sonic Pi は冒頭で述べたように Super Collider の Ruby ラッパーなわけですから、Ruby の構文ももちろん使えます。

10.times do
 play :c
 sleep 1
end

とか

notes = %w(c d e f g a b c5)

notes.each do |note|
  play note
  sleep 0.25
end

といったようなこともできます。

ちなみに、

class A
  def initialize
    play :c
  end
end

A.new

loop do
  `say "東京は夜の七時"`
  sleep 1
end

といったコードはエラーになってしまって実行できませんでした。ざんねんー
say をいい感じに使えたら面白くなりそうなのにな。

まとめ

基本的な使い方、なんとなくイメージできたでしょうか。
Sonic Pi で出来ることをなんとなくでも理解してもらえたら幸いです。
ドキュメントを見てもらうと分かりますが、Sonic Pi が秘めている能力はこんなものではないです。
かなり細かくチューニングできる仕様になっています。
気になった人は一度覗いてみると、さらに面白みが分かると思います。
Sonic Pi を使って Minecraft をやるとかいう謎の機能もあった気がする。

Ruby でコーディングして音を鳴らすのたのしいです 🍰