ここまでの章で、我々は実際に楽みながら演奏をする方法を十分に学んできました。この章では、これまでのすべての章から、どの様に作曲を開始し、ライブパフォーマンスに繋げるかを紹介していきます。そのために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
について次の章を読んでいきましょう。