FoxDotによるLiveCoding方法 基礎編

LiveCodingをご存じでしょうか？

<blockquote class="twitter-tweet" data-lang="ja"><p lang="ja" dir="ltr">∀RroWsの次のライヴの一部は音楽と映像Wでライヴコーディングしようと言うことになったので、どっちもいけるようにしておかないと。音楽はFoxDotものにしないと。映像はTouchDesignerでやるかな。 <a <blockquote class="twitter-tweet"><p lang="ja" dir="ltr">コードで奏でるメロディーは、また違っていい。曲の変化のさせ方が分かってきた、ライヴの三日前。練習あるのみ。<a href="https://twitter.com/hashtag/FoxDot?src=hash&amp;ref_src=twsrc%5Etfw">#FoxDot</a> <a href="https://t.co/tvck3aowzL">pic.twitter.com/tvck3aowzL</a></p>&mdash; Tomoya@∀RroWs (@snufkinliberty) <a href="https://twitter.com/snufkinliberty/status/1159664812680343553?ref_src=twsrc%5Etfw">August 9, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 
要はプログラミングでコードを書きながら、リアルタイムに音楽や映像を作るパフォーマンスをすることを言います。
音楽の場合、PythonによるLiveCoding環境としてFoxDotがあります。
他にもTidalCyclesなどありますが、なじみのPythonでできるのがいいなとFoxDotを始めました。

FoxDotのサイトのTopPageのYouTubeのパフォーマンスがかっこいいです。
https://foxdot.org/

僕は[∀RroWs](https://www.arrowsofficial.com/)という電子音楽とデジタルアートのユニットをやっており、ぜひ次回のライヴでLiveCodingに挑戦したいということで、学んだことを随時、本記事にまとめていきたいと思います。

# インストール方法
以下の4つをインストールします。
①Python(anacondaでもOK)
②SuperCollider+PlugIn
③Git(SuperColliderでFoxDotをインストールするのに必要)
④FoxDot(SuperColliderとPythonでそれぞれインストール)
Ver.や環境もあるため、本家サイトを参照してインストールするのが良いです。

本家サイトのインストールガイドはこちら
https://foxdot.org/installation/
日本語でまとまっているのは、下記の記事が参考になります。
https://qiita.com/Hulc_0418/items/ba3e94633e465f7201d0

# FoxDotの立ち上げ方法
Windowsの場合ですが、
①SuperColliderを立ち上げて、左の入力欄に**FoxDot.start**を入力して、**Ctrl+Enter**
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/a7781d1d-a084-5780-b857-b481775d827b.jpeg)

②コマンドプロンプトを立ち上げて、**python -m FoxDot**を入力、**Enter**すると開始できる。
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/0951179e-6199-6d89-310f-6abf6dc3a311.jpeg)
![3.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/9f3e7af1-3aba-aef2-1d8a-7b16ea32fcb4.jpeg)

#音の再生と停止
　再生：例えば**p1 >> pluck()**を入力し、**Ctrl+Enter**で音が鳴ります。
　　　　もし、行が連続している場合、これらがまとめて実行されます。
　停止：**p1.stop()**でp1が停止します。
　全停止　**Clock.clear()**

#曲の設定
　**テンポ**：**Clock.bpm = 175**
　**スケール**（デフォルト：major）：**Scale.default.set = "minor"**など
　　　　と指定。スケールはprint(Scale.names())で確認できる。
　**オクターブ**：**p1.oct = 5**とp1など個別に音域を数値で指定

#演奏の基本1 シンセ(メロディ)
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/7ac88c79-6480-4894-4da7-444fe206206e.jpeg)

　**p1 >> pluck()**：引数なしでは4つうち
　**degree**：音程は[ ]のみで指定する。
　例）　ドレミファソラシド **p1 >> pluck([0,1,2,3,4,5,6,7])**
　**dur**：音の長さ 1が1拍(4分音符)、1/2が1/2拍(8分音符)。
　**amp**：音量。
　**pan**：LRチャンネル-1でL:100%, 1でR:100%,0(なし)でCenter。
　**sus**：durで指定した長さで各音は鳴りますが、例えば、sus=1/2にするとその一音を短くできる。
　**音色**：print(SynthDefs)で確認できる。plunkの部分を例えば以下のように変更すれば良いです。
　Lead系
　　star, soft, quin, saw, varsaw, lazerなど
　Pad系
　　charm, prophet, pads, ambi, space, 
　　keys, klank, feel, glassなど
　ベース系
　　bass, jbass, sawbass, dbass, dirt, dab　など
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/880550ff-fae0-2ddd-015d-95114aca36e1.jpeg)
　なお、音程を記述する[]の中で()で指定すると複数の音を指定すると同時になる。この例の場合4拍目で0と3の音が鳴ります。これで和音を作れます。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/a54f6b76-596b-86dc-4808-4a6d83a8bcb6.jpeg)
　もうひとつ和音の作り方として、(0,2,4)と足すと、[]の中の音を基準に、0,2,4の間隔で和音が鳴ります。[] の音全部を同じように和音にしたい場合はこの方法が有効です。
![2.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/2457361f-dfae-4883-8194-013cbd52d8af.jpeg)
　代わりに[]の中で[]で複数の音を指定すると、内側の[]内の音が、順番に繰り返される度に変わります。この例の場合、0,1,2,3,0,1,2,0の順で鳴ります。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/8a9af1a8-a5f3-d613-b3c8-95f69a3f901e.jpeg)
　また、最後に[0,2,4] で足した場合は、[0,1,2,3] の音が、0,3,6,3,2,5...と0,2,4 の順で足し算された音が鳴ります。

#演奏の基本2 ドラム(リズム)
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/eeba83e7-290f-bc7e-380f-0a8e59d8c333.jpeg)

　**d1 >> play("")**
　""に以下を記述
　・休符は半角スペース
　・音色は print(Samples)で確認できます。
　・sampleで数値を変えると、それぞれの音が変わります。
　以下代表的な音色

　キック
　　'V': Hard kick, 'v': Soft kick, 
　　'X': Heavy kick, 'x': Bass drum, 
　　'A': Gameboy kick drum
　スネア
　　'O': Heavy snare, 'o': Snare drum, 
　　'I': Rock snare, 'i': Jungle snare
　　'D': Dirty snare, 'u': Soft snare, 
　　't': Rimshot
　ハット系
　　'-': Hi hat closed, '=': Hi hat open, 
　　':': Hi-hats, 'a': Gameboy hihat
　　'~': Ride cymbal, '#': Crash, 
　　'R': Metallic, 'r': Metal
　タム
　　'm': 808 toms, 'M': Acoustic toms
　クラップ
　　'*': Clap, 'H': Clap　など
　
# 基本の8ビート
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/1d5d3c09-6b41-00bb-0328-e66d2349f067.jpeg)
Xがバスドラ、Iがスネア、=がハイハットオープン、-がハイハットクローズド、スペースが休符
まずは、このようにパート毎に書くとDTMなどで打ち込みをやっている人には分かりやすいです。ただし、LiveCodingとしては、これを入力するのに時間がかかるので短く書く必要があります。

短くする方法の例：**繰り返しは省略する**
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/9830d924-679d-b63a-b3b2-23f592b6e021.jpeg)
("")の中は繰り返されるので、Xは拍の頭だけ鳴らすなら"X "と1拍分だけで良いです。
Iは2,4拍目なので、"  I "で2拍分書けば良いことになります。
"(=-)---"は"=-------"と同じ。つまり、ドラムの場合は()を付けると、1回目は1番目の=が鳴り、2回目は-が鳴るを繰り返します。
()と使うことで、よくある4小節の頭だけハイハットをオープンにするとか短く記述できるます。
シンセ系(メロディ)の場合と挙動が違うので注意。

# 音を細かくする
　ドラムで音を入力最小単位以上に細かくするには**[]**で囲います。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/79753656-30d0-0cfb-1e1d-b6dd4e384e74.jpeg)
d3の最後が[--]になっていますが、ここは本来-が1の個のところ、--が2鳴ります。つまり音が2分割される。例えば[---]とすると3分割され、3連符になります。細かくリズムを刻む際に使えます。
シンセ系(メロディ)の場合と挙動が違うので注意です。

# ランダムに選ぶ
**{}**で囲むと、これは{}の中に複数入力すれば、どれか1つがランダムに繰り返す度に選択されます。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/e83a6473-85b7-947d-cbf0-941cc5df5750.jpeg)
図だと**{-=*}**が最後にあり、-か=か*が繰り返す度に変化します。

#組み合わせ
(), [], {}を組み合わせると複雑なリズムパターンを作ることができます。
![1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/311653/423cb6c2-941d-ff88-da47-77051b5dab02.jpeg)
慣れないと、すぐにはパターンのイメージがわかないかもしれませんが、これらを使いこなせればLiveCodingゆえの面白いパターンを生み出せると思います。

毎日書いて慣れていこう！
[実践編](https://qiita.com/snafkinliberty/items/c9e2829fd496d5f0b89e)へ続く。