# ライブコーディング

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