このシリーズの前回の記事では、ランダム化の力を探求し、それがライブコーディングされたトラックやパフォーマンスに多様性や驚きや変化をもたらすのを示しました。例えば、ある音階からランダムにピックアップした音符で、終わりのないメロディーを作りました。今日は、ランダム化をリズムに適用した新しいテクニック、確率的ビートについて学びます。
新しいビートやシンセのリズムを作り始める前に、確率に関する基本についてざっと見てみる必要があります。これは複雑で骨の折れるように聞こえるかもしれませんが、実際のところ、サイコロを振るのと同じくらい簡単です! 普通の6面のサイコロを振ると何が起きるでしょうか? そうですね。1, 2, 3, 4, 5, 6のいずれかが同じチャンスで得られるでしょう。実際、6面のサイコロであれば、(もしあなたが何度も何度も振れば)平均して6回に1回1の目が出るでしょう。これが1の目を出すのに1/6のチャンスがあることを示しています。Sonic Piでは、サイコロを振るのをdice
関数でエミュレートできます。では8回サイコロを振ってみましょう:
8.times do
puts dice
sleep 1
end
ちょうど実物のサイコロを振ったのと同じように、1から6の間の値をログに表示していることに注目してください。
では、あなたの目の前にドラムがあって、それを叩こうとするときにいつもサイコロを振るのを想像してみてください。もしあなたが1の目を出したらドラムを叩き、それ以外の目を出したら叩かないとしましょう。これであなたは、1/6の確率で動作する確率的なドラムマシーンを手に入れたことになります! どんな音がするか聞いてみましょう:
live_loop :random_beat do
sample :drum_snare_hard if dice == 1
sleep 0.125
end
全てが明確になるよう、各行をざっと見ていきましょう。最初に、:random_beat
という名前を付けたlive_loop
を作って、do
からend
までの2行を繰り返しています。ループ内の最初の行は、sample
を呼んであらかじめ録音された音(この場合は:drum_snare_hard
の音)を再生しています。しかし、この行には特別なif
の条件が末尾に付いています。これは、この行がif
の右側の条件式がtrue
であるときだけ実行されることを意味しています。この場合、条件式はdice == 1
です。dice
関数の呼び出しは、我々が既に見てきたように、1から6の値を返します。つづいて、等価演算子の==
を使って、この値が1
かどうかチェックしています。もし1
であれば、この条件式はtrue
となり、スネアドラムの音が再生され、1
でなければ、この条件式はfalse
となり、スネアドラムはスキップされます。ループ内の2行目は、次にサイコロを振る前に、単に0.125
秒間待っているだけです。
ロールプレイングゲームをプレイしたことがある人の中には、さまざまな範囲を持つ不思議なな形をしたサイコロに馴染みがあるかもしれません。たとえば、三角錐(正四面体)の形をした4面のサイコロや、正二十面体の形をした20面のサイコロがあります。サイコロの面の数はも1の目を出すチャンスや確率を変えます。面が少なければ、より1の目を出しやすくなり、面が多くなれば、より1の目を出しにくくなります。たとえば、4面のサイコロでは、1の目をだすのに1/4のチャンスがありますが、20面のサイコロでは、1の目をだすのに1/20のチャンスがあります。幸いにも、Sonic Piにはちょうどこれと同じことができる便利なone_in
関数があります。次をやってみましょう:
live_loop :different_probabilities do
sample :drum_snare_hard if one_in(6)
sleep 0.125
end
上のライブループを開始すると、馴染みのあるランダムリズムを聞くことができるでしょう。しかし、実行されているコードを止めないでください。そのかわり、6
を異なる値、たとえば2
とか20
に変更して、Run
ボタンを叩いてみてください。小さい数字はスネアドラムがより頻繁に再生され、大きい数字はスネアドラムがあまり頻繁に再生されないということを意味しているのに注目してください。これであなたは確率で音楽を作っていることになるのです!
複数のサンプルが異なる確率でトリガーされるのを組み合せると、本当に刺激的になります。例えば:
live_loop :multi_beat do
sample :elec_hi_snare if one_in(6)
sample :drum_cymbal_closed if one_in(2)
sample :drum_cymbal_pedal if one_in(3)
sample :bd_haus if one_in(4)
sleep 0.125
end
もう一度、上のコードを実行して、リズムを変更するために確率を変更してみてください。また、試しにサンプルを変更してみると、全く新しい感覚を生み出すでしょう。例えば、低音を追加するために、試しに:drum_cymbal_closed
を:bass_hit_c
に変更してみてください!
次に、我々にはすっかりお馴染みのuse_random_seed
を使って、8回の繰り返しの後に、ランダム・ストリームをリセットすると、規則的なビートを作ることができます。次のコードをタイプして、より規則的で再現可能なリズムを聞いてみましょう。一度ビートを聞いたら、シードの値を1000
から別なものにしてみましょう。異なる数字が異なるビートを生成することに注目してください。
live_loop :multi_beat do
use_random_seed 1000
8.times do
sample :elec_hi_snare if one_in(6)
sample :drum_cymbal_closed if one_in(2)
sample :drum_cymbal_pedal if one_in(3)
sample :bd_haus if one_in(4)
sleep 0.125
end
end
この種の構造で私がよくやるのは、よい感じの音がしたらシードを記録しておくことです。それにより、後で練習したりパフォーマンスしたりするときに、簡単にそのリズムを再生成することができます。
最後に、よい感じのメロディーを提供するランダムなベースを入れることができます。我々が新しく発見した確率的なシーケンスの方法は、サンプルと同じようにシンセに対しても同様に使用可能です。このコードをそのままにせずに、数字を操作して、確率の力であなた自身のトラックを是非作ってください!
live_loop :multi_beat do
use_random_seed 2000
8.times do
c = rrand(70, 130)
n = (scale :e1, :minor_pentatonic).take(3).choose
synth :tb303, note: n, release: 0.1, cutoff: c if rand < 0.9
sample :elec_hi_snare if one_in(6)
sample :drum_cymbal_closed if one_in(2)
sample :drum_cymbal_pedal if one_in(3)
sample :bd_haus, amp: 1.5 if one_in(4)
sleep 0.125
end
end