Live Programming環境のORCΛを試してみる①基本操作編

ライブコーディング環境、SonicPiやFoxDotやTidalCycles等色々あるけど、結局どれが一番いいかな？と迷っている内に、また新たな選択肢が増えてしまいました。
というわけでORCΛです。

![preview.jpg](https://qiita-image-store.s3.amazonaws.com/0/250171/368093f8-effe-c98c-d18b-ad9ae59899e0.jpeg)

マインスイーパー的でマトリックス的でライフゲーム的なヴィジュアルかつミニマムでかわいらしい、このUIの魅力は動画で見た方がわかりやすいと思うので、まずはインスタやtwitterに#ORCΛタグであがっている作品をチェックしてみることをおすすめします。

###ORCΛの導入

まずは以下からインストール。

https://github.com/hundredrabbits/Orca

驚くのがマニュアルの簡潔さです。というか、~~実質的なチュートリアルはすべて動画に丸投げしている感なので、一旦[この動画](http://www.youtube.com/watch?v=RaI_TuISSJE)をみて使い方の雰囲気を掴んでみるのがいいです。~~ 
→[公式チュートリアル](https://github.com/hundredrabbits/Orca/blob/master/TUTORIAL.md)充実してきました！特に[ワークショップ用の解説](https://github.com/hundredrabbits/Orca/blob/master/WORKSHOP.md)を一通り試してみるのが入門に良いとおもいます。Craftwifeさんによる日本語訳記事もあります。(2019/06/01追記)

[ORCA workshop 翻訳](https://qiita.com/Craftwife/items/1626b52d8d159aa0ae32)



動画を見るだけでも操作の大枠はつかめると思いますが、日本語の解説記事もまだ出ていなかったため、この記事では自分の理解の整理も含め、ごく基本的な動作についてまとめていきたいと思います。

###基本コンセプト

ORCΛでは、いわゆるトリガーとか発火のタイミングのことをbangと言っています。
ORCΛをSonicPiやTydalCycles的な演奏用途で使う場合、最終的にはこのbangのタイミングでMIDIまたはOSC信号を音源ソフト側に送信するという流れになると思います。
つまり、いかに思った通りに（または思いもしなかったような）bangのパターンを生成するか、というのが目標になりますが、ORCΛではいくつかの「オペレーション」を組み合わせることによってこれを実現します。

###オペレーションを使ってみる

ORCΛではアルファベット1文字が個別の「オペレーション」です。各々のアルファベットには異なる役割のオペレーションが割り当てられていますが、大きく分けるとそれはbangを生成するものと、そうではないものです。
例としてbangを生成するオペレーションの中で一番基本的な「<font color="MediumSeaGreen">D</font>(delay)」を使ってみます。
ORCΛ上の任意のグリッドに<font color="MediumSeaGreen">D</font>と打ってみると、その下に「＊」マークがちょいちょい出てきますが、これが定期的にbangを生み出してる状態なわけですね。
<font color="MediumSeaGreen">D</font>は左右に1グリットずつ入力をとり、入力の数値によってbangするタイミングを変えます。
例えばこんな感じ
![スクリーンショット 2019-04-07 11.46.42.png](https://qiita-image-store.s3.amazonaws.com/0/250171/f7bd866d-8c66-6497-2c66-629498d8efeb.png)

ここからORCΛの独特なところなのですが、この入力の2とか4とかの数値を、他の音楽系ソフトのように2分音符とか4分音符とか、ビートに対する分数…1拍のdurationを分割する（1/2,1/4）ようなイメージで考えてしまうと躓きます。
<font color="MediumSeaGreen">D</font>への入力は数字が大きくなるだけビートが細かくなるのではなく、むしろその逆です。
マニュアルに”Bangs on a fraction of the runtime frame.”とあるように、ビートではなくframeに対するbang発生の割合になっているのです。

例でいうと、まず右側の入力に4と置いてみると、<font color="MediumSeaGreen">D</font>は4frameごとに1回の割合でbangを生成するということになります。
デフォルトのBPMは120、frameは1ビートあたりに4進むので、この場合はちょうど4frameごとに1回=1ビートあたりに1回bangが生成されることになります。
さらに<font color="MediumSeaGreen">D</font>の左側の入力に2と置くと(画像のような2<font color="MediumSeaGreen">D</font>4の並びにする)、1/4の割合のさらに1/2の割合、ということで1/8の割合(8frameごとに1回＝2ビートに1回)でbangが発生します。
このように、ORCΛでは大文字アルファベットのオペレーターたちはビートではなくframeを基準に実行される、ということを意識するとわかりやすくなります。

これで単純なbangの生成はできるようになったので、冒頭に貼ったサンプル画像を参考に、もっとシーケンサーっぽいものを組み立てていきます。

<font color="MediumSeaGreen">D</font>の次によく使われているオペレータが<font color="MediumSeaGreen">C</font>(clock)です。これはその名の通りframeごとに数値をカウントアップするオペレータです。<font color="MediumSeaGreen">C</font>の出力はbangではなく数値という点に注目してください。つまりこれは主に他のオペレータに接続してモジュレーションするために使用することになります。
<font color="MediumSeaGreen">C</font>も左右に２つの入力をとります。左側の入力はクロックのrateを設定でき、例としてここを2にすると、2frame進むごとに1カウントアップされる…という風にスピードを変化できます（<font color="MediumSeaGreen">D</font>の入力と同じ考え方です）。右側の入力はカウントアップの上限です。

続けてずぱりシーケンサーっぽい機能をもった便利なオペレーターの<font color="MediumSeaGreen">T</font>(track)です。これでドミソラドミソラ(CEGACEGA)…と繰り返すような単純なシーケンスを作ってみます。
まずシーケンサーでいうところのステップ数を決めたら(4<font color="MediumSeaGreen">T</font>)、各ステップのnoteを置いていきます。(4<font color="MediumSeaGreen">T</font>CEGA)
これでシーケンサーの基盤は完成で、あとは4の左隣のグリッドでステップの番号を指定すればアウトプットとして選ばれたnoteが出てきます。
ここでステップ番号の指定を規則的に0,1,2,3…と繰り返すために、さっきの<font color="MediumSeaGreen">C</font>を活用します。
文章だとわかりにくいですが、試してみると簡単です。

![スクリーンショット 2019-04-07 20.36.46.png](https://qiita-image-store.s3.amazonaws.com/0/250171/30833c54-e644-5d20-c416-0ee359e035ab.png)


###OSCで情報を送信する

さて、これだと単にORCΛの画面上にnoteを出力しているだけのことですから、この情報をMIDIかUDPかOSC信号で音源ソフト側に送ってあげる必要があります。ここでは(自分にMIDIの環境がないので…)OSCを使います。

OSC信号を送るには「=」を使い、=のあとにOSCのアドレスとメッセージを続けるような形にします。=a123なら/aのアドレスに1,2,3というメッセージを送るようになります。

bangのタイミングでOSC信号を送信するようにしたいので、ここで<font color="MediumSeaGreen">D</font>を登場させ、bangと=を接続します。
さらに、さっき<font color="MediumSeaGreen">C</font>と<font color="MediumSeaGreen">T</font>で作ったシーケンサーの出力をnote情報として送信するため、このように組み合わせます。

![スクリーンショット 2019-04-07 20.35.13.png](https://qiita-image-store.s3.amazonaws.com/0/250171/db26b5b8-09d2-41f1-0d0d-500d80876b5e.png)


急に<font color="MediumSeaGreen">J</font>というのが出てきましたが、これは上側のグリッドの数値を下側にワープさせるオペレーションで、複数のオペレーションを組み合わせる時の配置の調整などに使えます。
これでbangのタイミングでC,E,G,Aというnote情報をループして送るモジュールが完成しました。

というわけで自分もまだまだ初心者なので、今回は初歩的なところまで。

次回は~~SuperColliderと通信して実際音を鳴らしてみるところを書こうと思います。~~
→[公式連携シンセのPILOTを使って音を出してみる編を更新しました。](https://qiita.com/rucochanman/items/a4ae74c9933f37912885)