Make a song

ランダマイズを追加する

すごい!ここまでで、あなたの曲は着実なビートとベースの上にメロディーが乗って、良い感じにできたのではないでしょうか。では次に、とてもクールなことをやって、Sonic Piの真の潜在能力を解放していきたいと思います。トラックにジェネラティブな要素を追加して、我々のために作曲してもらうようにコンピュータにプログラムしてみましょう。

ダイスを振ってメロディーをトランスポーズする

トランスポーズとは、ピッチを上げたり下げたりして変更することです。所々でランダムにメロディーを少しトランスポーズすると、トラックに変化を加えられそうです。あなたは、ダイスを振ってメロディーのピッチを上げるかを決定することができるでしょう。以下が例です:

live_loop :melody do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end

ランダムなアシッドベースのトラックを作る

ベースのループで何か面白いことをしましょう。.chooseは、あるリストからその要素を1つランダムに選択する手軽なメソッドです。こんな感じです:

play [:c, :e, :g].choose

[:c, :e, :g]は、音のリストです(この例ではCメジャーの和音です)。.chooseはそれらの音からランダムに1つを選択します。音でなく何でもリストに入れることができます。例えば、sleepの値です:

loop do
  use_octave [0, 1].choose
  play [:c, :e, :g].choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

あなたは、どの和音にどの音が含まれているか覚えている必要はありません。Sonic Piがあなたに代わって何とかしてくれます。[:c, :e, :g]と書くかわりに、(chord :C, :major)を使うことができます。この記述が適切な音のリストを自動的に作ってくれます。次が例です:

loop do
  play (chord :c, :major).choose
  sleep [0.25, 0.25, 0.5, 1].choose
end

この魔法を使って、バブルなベーストラックを作ってみましょう。あなたの書いた:bassループは、後で使いたくなるときのために、別のBufferにコピーしましょう。そして次の:bassループのために現在のループの内容を削除しましょう。次の例のように、クラシックな:tb303シンセを使って、Cメジャーの和音からランダムな16分音符の音を鳴らしましょう:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose
  sleep 0.25
end

うわっ!そうではないですね。次のように、, release: 0.125をplayコマンドの末尾に追加してみましょう:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125
  sleep 0.25
end

良くなりました。でもまだ良くできそうです。これまでに、あなたはplayコマンドのattack:release:パラメータを使っているはずです。使用するシンセによりますが、利用可能なパラメータは非常にたくさんあります。例としてtb303シンセの場合は、45の異なるオプションを調整可能です。ここでは、cutoffというパラメータを使ってみましょう。カットオフはカットオフ周波数より上の周波数をすべて削除します。0から130までの数字を指定可能です。

せっかくランダムな値を使えるようになったので、固定のカットオフを使わずにやってみましょう!rrand(min, max)を使えば、範囲内のランダムな数を生成できます。試してみましょう:

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end

すごいね!いろんなことを試したり探索したりすることを忘れないでください。ここまでにやってきたことを総括した例が以下です:

use_bpm 120

live_loop :drums do
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
  sample :drum_heavy_kick
  sleep 1
  sample :drum_snare_hard
  sleep 1
end

live_loop :hihat do
  sample :drum_cymbal_closed
  sleep 0.25
  sample :drum_cymbal_pedal
  sleep 1
end

live_loop :bass do
  use_synth :tb303
  play (chord :C2, :major).choose, release: 0.125, cutoff: rrand(60, 110)
  sleep 0.25
end


live_loop :melody do
  if one_in(6)
    use_transpose 2
  else
    use_transpose 0
  end
  play_pattern_timed [:c4, :e4, :f4, :g4, :f4, :e4, :f4, :g4, :f4, :e4, :f4], [0.25, 0.25, 0.25, 1.5, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25], attack: 0, release: 0.2
end