概要
今回はライブコーディング環境ORCΛで使用可能なオペレータを26個(A〜Z)解説していきます。
ORCΛには他にも様々なオペレータがありますが、複雑な信号パターンを生成するために主に使用されるのがアルファベットA〜Zのオペレータです。
最近ORCΛで遊ぶことにハマっていたのですが、「よく分からないけど、なんとなくオペレータを組み合わせたら出来上がった」ということが多々ありました。
このままだと、実は意味のない&無駄な組み合わせだということに気づかずに過ごしてしまう可能性があるので、オペレータを1つずつ深く理解したいという自身の思いもあって、この記事を書くに至りました。
当記事ではA〜Zオペレータに1つずつ焦点を当てて、図や例を含めて解説していきます。
A – add

Aオペレータは入力された2つの値の合計を出力します。
下図でいうと、aとbの値の合計をcに出力します。

次に例を2つ解説します。

この場合は、2 + 5の合計である7を出力しています。

この場合は、3 + C(12)の合計であるF(15)を出力しています。
B – subtract

Bオペレータは入力された2つの値の差分を出力します。
下図でいうと、aとbの値の差分をcに出力します。

次に例を2つ解説します。

この場合は、3と7の差分である4を出力しています。

この場合は、3とG(16)の差分であるD(13)を出力しています。
C – clock

Cオペレータはフレームごとに数をカウントします。
1フレームは16分音符一つ分と考えると理解しやすいと思います。
下図でいうと、a=フレーム数、b=上限値、c=カウント数の出力先となります。

次に例を2つ解説します。
この場合は、フレーム数に1、カウント上限数に9が指定されています。つまり、1フレームごとに0〜8まで繰り返しカウントします。
この場合は、フレーム数に2、カウント上限数に9が指定されています。つまり、2フレームごとに0〜8まで繰り返しカウントします。2フレームとは、16分音符二つ分、つまり8分音符一つ分の長さなので、一つ目の例よりゆっくりしたスピード(半分の速さ)でカウントします。
D – delay

DオペレータはフレームごとにBangを出力します。
下図でいうと、a=割合、b=フレーム数、c=Bangの出力先となります。

次に2つ例を解説します。
この場合は、割合に1、フレーム数に4が指定されています。つまり、4フレーム(4フレーム x 1)ごとにBangを生成します。
この場合は、割合に2、フレーム数に4が指定されています。つまり、8フレーム(4フレーム x 2)ごとにBangを生成します。
E – east

Eオペレータは東方向に飛び、何かにぶつかり次第Bangを出力します。
この場合は、:オペレータ(MIDI信号を送る役割)にぶつかり、Bangを出力しています。
F – if

Fオペレータは、入力された2つの値が等しかった時にBangを出力します。
下図でいうと、aとbの値が等しかった場合、cにBangを出力します。

次に例を1つ解説します。
この場合は、左辺が2であるため、右辺が2になった瞬間、Bangが出力されます。
G – generator

Gオペレータは指定した位置に値を書き込みます。
それぞれの入力元と出力先の意味は以下の通りとなります。

a | e(書き込む位置)を東方向に動かす数 |
b | e(書き込む位置)を南方向に動かす数 |
c | d(書き込みたい値)の数 |
d | 書き込みたい値 |
e | 書き込む位置(出力先) |
次に例を2つ解説します。

この場合は、書き込む位置を東方向に7、南方向に1動かし、そこに書き込みたい値(2)を書き込んでいます。

この場合は、書き込む位置を東方向に3、南方向に2動かし、そこに4つの書き込みたい値(abcd)を書き込んでいます。
H – halt

Hオペレータは、南方向に入力された値を止めて固定します。
下図でいうと、aに入力された値を止めて固定します。

次に例を1つ解説します。
この場合は、飛んできたWオペレータを止めて固定しています。
I – increment

Iオペレータはステップ数ごとに増加させて値を出力します。
下図でいうと、a=ステップ数、b=上限値、c=出力先となります。

次に例を1つ解説します。
この場合は、2ステップごとに8(8は含めない)まで値を増加させて出力します。
J – jumper

Jオペレータは、北方向の入力値をそのまま南方向に出力します。
下図でいうと、aの値をbに出力します。

次に例を1つ解説します。

この場合は、北方向にある4という値を南方向に出力しています。
K – konkat

Kオペレータは1つ以上の変数の値を出力します。
下図でいうと、a=値を出力させたい変数の数、b=値を出力させたい変数名となります。

次に例を2つ解説します。

この場合は、2つの変数(a, b)に格納されている値を、それぞれの変数名の下に出力しています。

この場合は、4つの変数(a, b, c, d)に格納されている値を、それぞれの変数名の下に出力しています。
L – less

Lオペレータは左辺と右辺の値を比べて、低い方の値を出力します。
下図でいうと、aとbの値を比較し、低い方の値をcに出力します。

次に例を2つ解説します。

この場合は、2と8を比較し、低い方の2を出力しています。

この場合は、b(11)とx(33)を比較し、低い方のb(11)を出力しています。
M – multiply

Mオペレータは左辺と右辺の値を掛け算した結果を出力します。
下図でいうと、a × bの結果をcに出力します。

次に例を2つ解説します。

この場合は、2 × 5の結果であるa(10)を出力しています。

この場合は、a(10) × a(10)の結果であるs(28)を出力しています。
ORCΛで扱える数字は0〜Z(35)の36個となっており、それ以上の値は再び最初の0に戻ります。つまり100になる場合は、2週(72)した後、最初から28番目ということになるのでs(28)になります。
N – north

Nオペレータは北方向に飛び、何かにぶつかり次第Bangを出力します。
この場合は、:オペレータ(MIDI信号を送る役割)にぶつかり、Bangを出力しています。
O – read

Oオペレータは、指定した位置の値を読み取って出力します。
それぞれの入力元と出力先の意味は以下の通りとなります。

a | c(読み取る位置)を東方向に動かす数 |
b | c(読み取る位置)を南方向に動かす数 |
c | 読み取る位置 |
d | 読み取った値(出力先) |
次に例を2つ解説します。

この場合は、読み取る位置を右に2つ、下に1つ動かし、その位置の値(空っぽ)を出力しています。

この場合は、読み取る位置を右に2つ、下に3つ動かし、その位置の値(a)を出力しています。
P – push

Pオペレータは東方向にある値を指定した位置に出力します。
それぞれの入力元と出力先の意味は以下の通りとなります。

a | どこに書き込むか指定する数 |
b | d(書き込む位置)を増やす数 |
c | 書き込みたい値 |
d | 書き込める位置 |
説明が難しいので下記2つの例を用いて説明していきます。

この場合は、書き込める位置を7つに増やし、最初の地点(0)から東方向に5つずらした位置に、aという値を書き込んでいます。

この場合は、書き込める位置を4つに増やし、最初の地点(0)から東方向に5つずらした位置に、aという値を書き込んでいます。
しかし、最初の地点(0)から東方向に1つずらした位置にbが書き込まれています。これはなぜかというと、書き込める位置が4つしかなく、5つずらすとはみ出してしまい、再び最初の地点から数え直すからです。
つまり、3つ右にずらすと、次の4つ目は最初の地点(0)に戻って、そこからまた数えていくわけです。
Q – query

Qオペレータは、指定した1つ以上の位置にある値を読み取って出力します。
それぞれの入力元と出力先の意味は以下の通りとなります。

a | d(読み取る位置)を東方向にずらす数 |
b | d(読み取る位置)を南方向にずらす数 |
c | e(読み取った値)の数 |
d | 読み取る位置 |
e | 読み取った値(出力先) |
次に例を2つ解説します。

この場合は、2つの読み取る位置を東方向に1つ、南方向に1つ動かし、その位置にある値(空っぽ)を出力しています。

この場合は、5つの読み取る位置を東方向に2つ、南方向に2つ動かし、その位置にある値(a,b,c,d,d)を出力しています。
R – random

Rオペレータは指定された範囲内のランダムな値を出力します。
下図でいうと、a=最小値、b=最大値、c=出力先となります。

次に例を1つ解説します。
この場合は、8, 9, a, b, c, d, eの範囲内でランダムな値が出力されます。
S – south

Sオペレータは南方向に飛び、何かにぶつかり次第Bangを出力します。
この場合は、:オペレータ(MIDI信号を送る役割)にぶつかり、Bangを出力しています。
T – track

Tオペレータは、東方向にある値を読み取って出力します。
それぞれの入力元と出力先の意味は以下の通りとなります。

a | どこを読み取るか指定する数 |
b | c(読み取る位置)を増やす数 |
c | 読み取る値 |
d | 読み取った値(出力先) |
次に例を2つ解説します。

この場合は、4つの読み取る値の中にある1つ目の値(C)を出力しています。

この場合は、7つの読み取る値の中にある5つ目の値(C)を出力しています。
U – uclid

UオペレータはユークリッドリズムでBangを出力します。
E(3, 8)ならば、下記のように指定します。
The Euclidean Algorithm Generates Traditional Musical Rhythmsを参考にし、E(3, 8)のユークリッドリズムを求めると、以下のようになります。
10010010
1にBangが出力されることになるので、タンンタ、ンンタンというリズムになります。
V – variable

Vオペレータは左辺の変数に右辺の値を代入します。
下図でいうと、変数aにbという値を代入していることになります。

次に例を1つ解説します。

この場合は、変数aに2を代入しています。
Vオペレータは1つ注意するべきことがあり、それはKオペレータで参照するとき、Kオペレータよりも上に設置していなければならないということです。
W – west

Wオペレータは西方向に飛び、何かにぶつかり次第Bangを出力します。
この場合はWオペレータを入力し、西方向に飛ばしています。
X – write

Xオペレータは東方向にある値を指定した位置に書き込みます。
それぞれの入力元と出力先の意味は以下の通りとなります。

a | d(書き込む位置)を右方向にずらす数 |
b | d(書き込む位置)を下方向にずらす数 |
c | 書き込みたい値 |
d | 書き込む位置(出力先) |
次に例を1つ解説します。

この場合は、書き込む位置を東方向に2つ、南方向に2つ動かし、Gという値を書き込んでいます。

この場合は、書き込む位置を東方向に5つ、南方向に2つ動かし、bという値を書き込んでいます。
Y – jymper

Yオペレータは西方向の値を東方向に出力します。
下図でいうと、aの値をbに出力しています。

次に例を1つ解説します。

この場合は、西方向にある5という値を東方向に出力しています。
Z – lerp

Zオペレータは、ターゲット数の変化前後の推移を出力します。
下図でいうと、a=割合、b=ターゲット数、c=出力先となります。

次に例を1つ解説します。
この場合は、ターゲット数が9から2に変化した時、2ずつ減少した値(7, 5, 3, 2)を出力します。
逆にターゲット数が2から9に変化した時は、2ずつ増加した値(4, 6, 8, 9)を出力します。
最後に
今回はORCΛで使用されるA〜Zまでのオペレータを全て解説してみました。
こうやってまとめてみると、ORCΛの仕組みをより一段階深く理解することができたように思えます。
しかし、オペレータの意味は把握できたものの、それらをどう組み合わせれば面白いパターンになるかは、まだ研究不足です。
なのでTwitterの#ORCΛをチェックし、先人達がどのようにオペレータを組み合わせているのか研究して、自分なりの引き出しを増やしていこうと思います。
最後に、間違っている箇所があれば遠慮なく指摘していただけると幸いです。
Comments