LiveCodingをご存じでしょうか?
要はプログラミングでコードを書きながら、リアルタイムに音楽や映像を作るパフォーマンスをすることを言います。 音楽の場合、PythonによるLiveCoding環境としてFoxDotがあります。 他にもTidalCyclesなどありますが、なじみのPythonでできるのがいいなとFoxDotを始めました。∀RroWsの次のライヴの一部は音楽と映像Wでライヴコーディングしようと言うことになったので、どっちもいけるようにしておかないと。音楽はFoxDotものにしないと。映像はTouchDesignerでやるかな。
コードで奏でるメロディーは、また違っていい。曲の変化のさせ方が分かってきた、ライヴの三日前。練習あるのみ。#FoxDot pic.twitter.com/tvck3aowzL
— Tomoya@∀RroWs (@snufkinliberty) August 9, 2019
FoxDotのサイトのTopPageのYouTubeのパフォーマンスがかっこいいです。
https://foxdot.org/
僕は∀RroWsという電子音楽とデジタルアートのユニットをやっており、ぜひ次回のライヴで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
②コマンドプロンプトを立ち上げて、python -m FoxDotを入力、Enterすると開始できる。
#音の再生と停止
再生:例えば**p1 >> pluck()**を入力し、Ctrl+Enterで音が鳴ります。
もし、行が連続している場合、これらがまとめて実行されます。
停止:**p1.stop()**でp1が停止します。
全停止 Clock.clear()
#曲の設定
テンポ:Clock.bpm = 175
スケール(デフォルト:major):**Scale.default.set = "minor"**など
と指定。スケールはprint(Scale.names())で確認できる。
オクターブ:p1.oct = 5とp1など個別に音域を数値で指定
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 など
なお、音程を記述する[]の中で()で指定すると複数の音を指定すると同時になる。この例の場合4拍目で0と3の音が鳴ります。これで和音を作れます。
もうひとつ和音の作り方として、(0,2,4)と足すと、[]の中の音を基準に、0,2,4の間隔で和音が鳴ります。[] の音全部を同じように和音にしたい場合はこの方法が有効です。
代わりに[]の中で[]で複数の音を指定すると、内側の[]内の音が、順番に繰り返される度に変わります。この例の場合、0,1,2,3,0,1,2,0の順で鳴ります。
また、最後に[0,2,4] で足した場合は、[0,1,2,3] の音が、0,3,6,3,2,5...と0,2,4 の順で足し算された音が鳴ります。
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ビート
Xがバスドラ、Iがスネア、=がハイハットオープン、-がハイハットクローズド、スペースが休符
まずは、このようにパート毎に書くとDTMなどで打ち込みをやっている人には分かりやすいです。ただし、LiveCodingとしては、これを入力するのに時間がかかるので短く書く必要があります。
短くする方法の例:繰り返しは省略する
("")の中は繰り返されるので、Xは拍の頭だけ鳴らすなら"X "と1拍分だけで良いです。
Iは2,4拍目なので、" I "で2拍分書けば良いことになります。
"(=-)---"は"=-------"と同じ。つまり、ドラムの場合は()を付けると、1回目は1番目の=が鳴り、2回目は-が鳴るを繰り返します。
()と使うことで、よくある4小節の頭だけハイハットをオープンにするとか短く記述できるます。
シンセ系(メロディ)の場合と挙動が違うので注意。
音を細かくする
ドラムで音を入力最小単位以上に細かくするには**[]**で囲います。
d3の最後が[--]になっていますが、ここは本来-が1の個のところ、--が2鳴ります。つまり音が2分割される。例えば[---]とすると3分割され、3連符になります。細かくリズムを刻む際に使えます。
シンセ系(メロディ)の場合と挙動が違うので注意です。
ランダムに選ぶ
**{}で囲むと、これは{}の中に複数入力すれば、どれか1つがランダムに繰り返す度に選択されます。
図だと{-=}**が最後にあり、-か=かが繰り返す度に変化します。
#組み合わせ
(), [], {}を組み合わせると複雑なリズムパターンを作ることができます。
慣れないと、すぐにはパターンのイメージがわかないかもしれませんが、これらを使いこなせればLiveCodingゆえの面白いパターンを生み出せると思います。
毎日書いて慣れていこう!
実践編へ続く。