# コード化されたビート

現代の音楽における技術的な発展で最も刺激的かつ飛躍的なものの1つは、サンプラーの発明だったと言えます。サンプラーは、あらゆる音を記録し、操作し、そしてさまざまな方法でこれらのサウンドを再生することができる箱です。たとえば、もしあなたが古いレコードを持っていたとして、そこからドラムソロ（もしくはブレイク）を探しだし、サンプラーに記録して半分の速度で再生すれば、あなたの作品のビートの下地として利用可能です。これはどのように初期のヒップホップが生まれたかを示すものですが、今日の電子音楽でこのようなサンプルを含まないものを探すことは、ほぼ不可能でしょう。サンプルを使用することは、あなたのライブコーディングのパフォーマンスに、新しく面白い要素を簡単に追加する本当に素晴らしい方法です。

ではサンプラーはどこにあるのでしょう？ サンプラーは既にRaspberry Piの中にあります！ Raspberry Piに同梱されたSonic Piはとてもパワフルなサンプラーを内蔵しています。これで遊んでみましょう！

## アーメン・ブレイク

古典的でよく知られたドラムブレイクはアーメン・ブレイクと呼ばれるものです。アーメン・ブレイクは、Winstonsによって1969年に”Amen Brother”という曲で、ドラムブレイクの一部として演奏されました。しかし、それは初期のヒップホップミュージシャンによって80年代に発見されてサンプラーで使用された後、ドラムンベース、ブレイクビート、ハードコア・テクノ、ブレイクコアといった他の幅広いジャンルでも頻繁に使用されるようになりました。

アーメン・ブレイクがSonic Piにも内蔵していると聞いて、あなたがワクワクしてくれると思っています。Bufferをきれいにして、次のコードを入力してみてください。

    sample :loop_amen

Runを叩いて、ブーンとやってみてください！ ダンスミュージックの歴史で最も影響力のあったドラムブレイクの1つを聞くことができるでしょう。しかし、これは1回限りで演奏されることよりも、ループとして演奏されることで有名です。

## ビートを引き延ばす

先月のチュートリアルで紹介した、我々にはもうお馴染みの`live_loop`を使って、アーメン・ブレイクをループしてみましょう。

    live_loop :amen_break do
      sample :loop_amen
      sleep 2
    end

ループはしていますね。でもループする度に不快な無音部分がありますね。これは、`2`拍sleepするように指示しているのに、`:loop_amen`のサンプルは、デフォルトのBPM60で`1.753`拍しか持続しないからです。したがって、`2 - 1.753 = 0.247`拍の無音が発生していしまいます。その時間は短くはありますが、容易に気づくことができます。

この問題を解決するのに、`beat_stretch:`オプションを使うことができます。このオプションは、指定した数値の拍に合うようにサンプルを引き延ばす（あるいは縮める）ことを、Sonic Piに指示します。

Sonic Piの`sample`と`synth`関数は、`amp:`や`cutoff:`、`release:`といったオプション引数によって、数多くの操作を提供しています。しかし、オプション引数という言葉は言いにくいので、単純にするためにオプションと呼ぶようにします。

    live_loop :amen_break do
      sample :loop_amen, beat_stretch: 2
      sleep 2
    end

これでダンスできますね！ だけど、おそらく雰囲気に合わせてこのサンプルを速くしたり遅くしたりしたいと思うのではないでしょうか。

## 時間に合わせて演奏する

では、オールドスクールのヒップホップやブレイクコアのスタイルに変更したい場合にはどうしたら良いでしょう。それを実現する簡単な方法は、時間に合わせて演奏することです。言い換えると、テンポを操作するということです。これは、Sonic Piではとても簡単です。`use_bpm`をライブループに入れるだけでよいのです。

    live_loop :amen_break do
      use_bpm 30
      sample :loop_amen, beat_stretch: 2
      sleep 2
    end

この遅いビートでラップしている間に、BPM30であっても2拍sleepして全てが時間通りであることに気がつくと思います。全てがただ時間通りに動くように、`beat_stretch`オプションが現行のBPMと協調して動作しているのです。

ここからが面白くなるところです。ループが動作している状態のまま、`use_bpm 30`の`30`を`50`に変更してみましょう。ワオ、全てが、時間通りのまま速くなりました！ もっと速く、80や、120、そしてもっとクレイジーになって200を打ち込んでみましょう！

## フィルタリング

サンプルをライブループできるようになったので、`sample`で提供されている楽しいオプションを見ていきましょう。最初は、`cutoff:`です。これはサンプラーのカットオフ・フィルタを操作します。このオプションはデフォルトでは無効になっていますが、簡単に有効にできます。

    live_loop :amen_break do
      use_bpm 50
      sample :loop_amen, beat_stretch: 2, cutoff: 70
      sleep 2
    end

続いて`cutoff:`オプションを変更してみましょう。たとえば100に変更後Runを叩いて、どう音が変化するかループの終わりまで聞いてみてください。50のような小さい値はメロウで低音が強調され、100や120といった大きい値は、より幅広い音が聞こえ、ザラザラとしていることに気付くでしょう。これは`cutoff:`オプションが、ちょうど草刈機が芝生を刈るように、高い周波数の部分を削り取るからです。`cutoff:`オプションは長さの設定（どれだけ芝生を残すか）のようなものです。

## スライスする

もう1つの遊んでみるべき凄いツールは、スライサー・エフェクトです。これは音をブツ切り（スライス）にします。`sample`の行を次のようにスライサー・エフェクトで包んでみましょう。

    live_loop :amen_break do
      use_bpm 50
      with_fx :slicer, phase: 0.25, wave: 0, mix: 1 do
        sample :loop_amen, beat_stretch: 2, cutoff: 100
      end
      sleep 2
    end

音が弾むように聞こえるようになったのに気付くでしょう（`mix`オプションを`0`に変更することで、エフェクトの掛かっていない元の音を聞くこともできます）。では、`phase:`オプションで遊んでみましょう。これは、スライサー・エフェクトの（ビートに対する）レートです。`0.125`といった小さい値は速くスライスし、より大きな`0.5`といった値はより遅くスライスします。`phase:`を半分にしたり倍にしたりすると、良い感じに聞こえるでしょう。最後に、`wave:`オプションを0, 1, 2のいずれかにして、音の変化を聞いてみましょう。これらは波形の形で、0はノコギリ波、1は矩形波、2は三角波です。

## まとめ

最後に、今月の例として、時代を遡って初期のブリストルのドラムンベースシーンを再訪してみましょう。あまり上記の意味するところは気にせずに、ただコードをタイプして実行し、オプションの値を変更してライブコーディングを開始して、どのような音になるか聞いてみましょう。そして、あなたの作ったものを是非共有してください！ ではまた。

    use_bpm 100
    live_loop :amen_break do
      p = [0.125, 0.25, 0.5].choose
      with_fx :slicer, phase: p, wave: 0, mix: rrand(0.7, 1) do
        r = [1, 1, 1, -1].choose
        sample :loop_amen, beat_stretch: 2, rate: r, amp: 2
      end
      sleep 2
    end
    live_loop :bass_drum do
      sample :bd_haus, cutoff: 70, amp: 1.5
      sleep 0.5
    end
    live_loop :landing do
      bass_line = (knit :e1, 3, [:c1, :c2].choose, 1)
      with_fx :slicer, phase: [0.25, 0.5].choose, invert_wave: 1, wave: 0 do
        s = synth :square, note: bass_line.tick, sustain: 4, cutoff: 60
        control s, cutoff_slide: 4, cutoff: 120
      end
      sleep 4
    end