ここまでで、このシリーズではサウンドをトリガーすることに焦点を当ててきました。我々は、play
やsynth
でSonic Piに組み込まれた多くのシンセサイザーを起動させることができ、sample
であらかじめ録音されたサンプルをトリガーする方法を見てきました。また、トリガーされたサウンドを、with_fx
コマンドを使ってリバーブやディストーションなどのスタジオ・エフェクト内にどのようにラップできるかを見てきました。これをSonic Piの信じられないほど正確なタイミングシステムと組み合わせると、広大なサウンド、ビート、リフを生成することができます。しかし、特定のサウンドのオプションを慎重に選択してトリガーすると、再生されている間にそのサウンドを変更することはできないでしょうか? それができるのです! 今日は、実行中のシンセをコントロールするとてもパワフルな方法を学びます。
はじめに、良い感じの簡単な音を作ってみましょう。Sonic Piを起動し、新しいBufferに以下のコードを打ち込んでください:
synth :prophet, note: :e1, release: 8, cutoff: 100
では、左上にあるRun
ボタンを押して、素敵な響きのシンセサウンドを聞きましょう。続いて、Run
ボタンを何度か押して、その音の感覚を掴みましょう。できましたか? では制御してみましょう!
play
, synth
, sample
といった関数が、実行中のサウンドを表象するSynthNode
と呼ばれるものを返却することは、Sonic Piで少し知られている機能かもしれません。これらのSynthNode
は標準的な変数に入れることができ、後で制御することができます。例えば、cutoff:
のオプションを1拍後に変更してみましょう。
sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
control sn, cutoff: 130
各行を順番に見ていきましょう。
最初に、:prophet
シンセをsynth
関数でいつものようにトリガーしています。しかし、その結果をsn
という変数に入れています。この変数はsynth_node
やjane
といった何か全く異なるものでも構いません。しかし、何か意味のある名前を選ぶことがあなたのパフォーマンスや後でこのコードを読む人々にとって重要でしょう。私は、シンセ・ノードのニーモニック(略名)が良かったので、sn
を選びました。
2行目では、標準的なsleep
コマンドを呼んでいます。これは何も特別なことはありません。次の行に進む前に1拍待つようコンピュータに指示しているだけです。
3行目はコントロールによって楽しくなるところです。ここでは、control
関数を使って実行中のSynthNode
にカットオフの値を130
に変更するよう指示しています。Runボタンを叩くと、:prophet
シンセが前と同じように演奏され、1拍後にそのサウンドが明るくなるのを聞くことができるでしょう。
調整可能なオプション
Sonic Piのシンセやエフェクトのオプションのほとんどは、トリガーされた後に変更できるかもしれません。しかし、これはすべてに当てはまるという訳ではないのです。例えば、エンベロープのオプション attack:
, decay:
, sustain:
とrelease:
は、シンセをトリガーするときだけ設定できます。オプションを変更できるどうかは簡単です。特定のシンセまたはエフェクトのドキュメントに進み、個々のオプションのドキュメントまでスクロールして、”May be changed whilst playing”(演奏中に変更可能です)か”Can not be changed once set”(一度設定されると変更できません)というフレーズを探すだけです。例えば、:beep
シンセのattack:
オプションのドキュメントは、それを変更できないことを明確にしています:
シンセが動作している間は、一度だけ変更することに限らず、何度でも自由に変更することができます。例えば、次のように:prophet
をミニ・アルペジエーターにすることができます:
notes = (scale :e3, :minor_pentatonic)
sn = synth :prophet, note: :e1, release: 8, cutoff: 100
sleep 1
16.times do
control sn, note: notes.tick
sleep 0.125
end
このコードスニペットでは、いくつか余分なものを追加しました。最初に、notes
という新しい変数を定義しました。この変数には、循環させたい音符が含まれています(アルペジエーターは音符のリストを順番に循環する何かに名前を付けたものです)。第二に、私たちは単一の呼び出しをcontrol
に置き換え、それを16回呼び出す反復で置き換えました。control
の呼び出しの度に、notes
のリングを順に.tick
していきます(Sonic Piのリングの素晴らしいパワーのおかげで、リングは末尾に達すると先頭に戻ります)。ちょっとした変化として、.tick
を.choose
で置き換えて、その違いを聞くことができるかどうか確認してください。
複数のオプションを同時に変更することもできます。コントロールの行を次のように変更して、その違いを聞いてみてください:
control sn, note: notes.tick, cutoff: rrand(70, 130)
SynthNode
をコントロールすると、正確に時間通りに応答し、ボタンを押したり、変更を要求するスイッチをフリックしたかのように、オプションの値を新しいものに即座に変更します。これは、特にオプションがのcutoff:
ような音色の1つをコントロールしている場合に、リズミカルでパーカッシブに聞こえることがあります。しかし、瞬間的に変更が発生することを望まないこともあります。その代わりに、スライダーやダイヤルを移動した場合のように、現在の値から新しい値にスムーズに移動したい場合があります。もちろん、Sonic Piでも_slide:
オプションを使うことで、これを行うことができます。
変更可能なオプションには、それぞれ対応する_slide:
という特別なオプションがあり、スライドの時間を指定できます。例えば、amp:
はamp_slide:
を、cutoff:
はcutoff_slide:
を持っています。これらのスライド・オプションは、次にそれらがコントロールされたときにどのように動作するかをシンセの音符に指示するという点で、他のすべてのオプションとは少し異なります。次のコードを見てみましょう:
sn = synth :prophet, note: :e1, release: 8, cutoff: 70, cutoff_slide: 2
sleep 1
control sn, cutoff: 130
この例がcutoff_slide:
を除いて先の例と全く同じであることに注目してください。これは、このシンセで次にcutoff:
をコントロールすると、現在の値から新しい値にスライドするのに2拍かかることを示しています。したがって、control
を使用したとき、カットオフが70から130までスライドするのを聞くことができるでしょう。これは、音に興味深いダイナミックな感触を作り出します。次に、 cutoff_slide:
の時間を0.5などの短い値や4などのより長い値に変更して、音の変化を確認してください。変更可能なオプションであれば、これと同じようにスライドできることを覚えておいてください。それぞれの_slide:
の値は完全に異なるので、あなたがやろうとすれば、カットオフをゆっくりとスライドしつつ、アンプは速くスライドし、パンをどこかの間をスライドさせることも可能です…
シンセがトリガーされた後にコントロールする力を実証する短い例を見てみましょう。エフェクトもシンセと同じようにスライドできますが、少し文法が異なることに注目してください。エフェクトのコントロールについての情報は、チュートリアルのセクション7.2をチェックしてみてください。
以下のコードを使用可能なBufferにコピーして聞いてみてください。そこで止めずに、そのコードで遊んでみてください。スライドの時間や音符、シンセ、エフェクトやスリープの時間を変更して、全く異なるものに変更できたことを確認してください!
live_loop :moon_rise do
with_fx :echo, mix: 0, mix_slide: 8 do |fx|
control fx, mix: 1
notes = (scale :e3, :minor_pentatonic, num_octaves: 2).shuffle
sn = synth :prophet , sustain: 8, note: :e1, cutoff: 70, cutoff_slide: 8
control sn, cutoff: 130
sleep 2
32.times do
control sn, note: notes.tick, pan: rrand(-1, 1)
sleep 0.125
end
end
end