ライブコーディング

ここまでの章で、我々は実際に楽みながら演奏をする方法を十分に学んできました。この章では、これまでのすべての章から、どの様に作曲を開始し、ライブパフォーマンスに繋げるかを紹介していきます。そのために3つの主な要素が必要になります。

よーし、始めましょう。最初の音をライブコーディングしましょう。まず演奏したいコード含む関数が必要です。簡単なところから始めましょう。スレッドでその関数を呼び出すループもほしいところです。

define :my_loop do
  play 50
  sleep 1
end
in_thread(name: :looper) do
  loop do
    my_loop
  end
end

もし上のコードが少し複雑に見える場合は、ファンクション(関数)とスレッドのセクションに戻って復習してください。既にこれらを頭に焼き付けているならば、それほど複雑ではないでしょう。

ここにあるものは、単にplay 50を演奏し、ビートのためにsleep 1を実行するファンクション(関数)です。そして、単に繰り返して定期的にmy_loopを呼び出す:looperという名前付きスレッドを定義しています。

このコードを実行すると、音符50を何度も何度も繰り返します。

変えてみる

ここからが面白くなるところです。コードを実行したままで、50を別の数値55に変更し、もう一度Runボタンを押してみましょう。わお! 音が変化しましたね! ライブ!

1つの名前に1つのスレッドしか実行されないので、新しいレイヤは追加されませんでした。また、ファンクション(関数)が再定義されることより、音が変化しました。:my_loopは新しく定義され、:looperスレッドが新しい定義を繰り返し呼び出します。

スリープ時間をや音符を変更し、再び試してみてください。use_synthを追加してみるのはどうでしょう? たとえば、次のように変更してみてください。

define :my_loop do
  use_synth :tb303
  play 50, release: 0.3
  sleep 0.25
end

かなり面白くなってきましたが、それをさらに盛り上げることができます。何度も何度も同じ音符を演奏する代わりに、和音を弾いてみましょう。

define :my_loop do
  use_synth :tb303
  play chord(:e3, :minor), release: 0.3
  sleep 0.5
end

和音からランダムな音符を演奏するのはどうでしょう。

define :my_loop do
  use_synth :tb303
  play choose(chord(:e3, :minor)), release: 0.3
  sleep 0.25
end

またはランダムなカットオフ値を使用してみましょう。

define :my_loop do
  use_synth :tb303
  play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
  sleep 0.25
end

最後に、ドラムを追加しましょう。

define :my_loop do
  use_synth :tb303
  sample :drum_bass_hard, rate: rrand(0.5, 2)
  play choose(chord(:e3, :minor)), release: 0.2, cutoff: rrand(60, 130)
  sleep 0.25
end

どんどんおもしろくなってきましたね!

しかしながら、ファンクション(関数)とスレッドを使ったライブコーディングにステップアップする前に、一息ついて、Sonic Piでのコーディングを劇的に変えてしまうかもしれないlive_loopについて次の章を読んでいきましょう。