見出し画像

非プログラマーなトラックメーカー向けライブコーディング講座#1 - KURAYAMIとライブコーディング

KURAYAMIがトラック制作やライブパフォーマンスにTidalcyclesというライブコーディング言語を導入して、かれこれ三年半が経ちます。その間にもTidalcyclesは0.7から1.7と進歩しましたが、なにせ海外のコミュニティが中心になって開発しているオープンソースソフトウェアの為、導入から運用まで一貫した日本語の情報が、なかなか見つからないのが現状です。

その状況を打開する!とも、一石を投じる!とも言いませんが(笑)Tidalcyclesとライブコーディングについて自分の書ける範囲で、興味を持った人が導入しやすくなるように、なるべくテーマごとに区切って書いていきます。

想定している読者ターゲットは

・DAWやハードでそれなりにトラックを作ったり、ライブをやったりしている。
・DAWのピアノロールやパターンベースのシーケンサでの音楽制作に限界を感じている。
・PCは使えるがプログラミングに関する知識はない。

つまり自分と同じような人です(よく勘違いされますが、自分は職業的なIT系の人間ではありません)。初回は体験談的に、自分とTidalcyclesの関係について振り返ります。

Tidalcyclesを使い始めたきっかけ

画像1

この画像は、 自分が初めてTidalcylesを知った時のスクショです。

…ちょっと衝撃的じゃないですか?これで音楽をコントロールしているのを見ちゃったら。

この画面を埋め尽くすコードを改変しながら演奏していたのは、Daniel M Karlsoonというアーティストでした。スクショの帯をご覧の通り、配信していたのはDommuneで、この回はスウェーデンにあるEMSという有名な電子音楽スタジオからのライブ中継でした。

Dommuneはアーカイブ視聴が会員制なので、このときの動画は貼れないんですが、自分がこのコードと似たテクニックを使って収録した動画があります。30分と長いので、飛ばして後半を見た方が雰囲気は近いです。

まぁめちゃくちゃなんですが(笑)一応”めちゃくちゃさの度合い“を関数で制御して構成しています。

このように「プログラミング言語を使って、一聴すると支離滅裂に聴こえるが、指向性を持って確率がコントロールされている音楽を生成できる」ことに非常に興味を持ちました。配信を見ながらすぐ調べて、Tidalcyclesという音楽生成用プログラミング言語である(この説明は少し違いますが、この時の自分の認識です)ことを突き止めます。

入門、そして本格的な学習へ

最初はちょっと試してみるか、程度の軽い気持ちでダウンロードし、鬼門とされる(のは後で知った)インストールはすんなりスムーズでした。当時は総本山であるTidalcycles.orgと、日本のトップライブコーダーの一人である田所敦先生のブログを参考にした気がします(勝手に宣伝させてもらうと、今は田所さんが書いた本があるので、今すぐ始めたかったらそれを買うと一番早いです)。

インストールの一時間後くらいにはすっかり夢中になってました。最初は当然まったくわからないんですが、公式のチュートリアルもそこそこに、いきなり人のコードを読んでみることに。

当時Daniel M KarlsoonがBandcampとVimeoで曲とソースコードを公開していた(残念ながら今はない)ので、それを片っ端から読んで、公式のちょっと乱雑なリファレンスと突き合わせて解読し続けました。たとえばこんなの

d1 $ slowspread density [3,3,5,7,6,7,5] $ slowspread density [3,3,4,5,5,5,6,7,7,6,5,5,5,5,4] $ randcat [
s "808" # cutoff (density 8 $ choose[20000, 10000, 5000, 2500, 1250]) # cut "1" # pan (choose[0,0.125,0.25,0.375,0.5,0.675,0.75,0.875,1]) # n "1" # gain "3.5",
s "808" # n (choose[1,3,4,5,7]) # pan (density 21 $ scale 0 1 $ rand),
s "dx/3" # n (choose[0,6]) # cut "2" # up (density 8 $ choose[12,0,2,3,5,-5,-7,-9]) # attack "0" # release "0.15" # gain "0.9" # cutoff (scale 20 20000 $ rand),
s "dx/2" # n "15" # cut "3" # up (choose[12,0,2,3,5,-5,-7,-9]) # attack "0" # release "0.2" # gain "1.3" # hcutoff (scale 20 2500 $ rand) # pan (density 31 $ scale 0.25 0.75 $ rand),
s "dx/5" # n "16" # attack "0" # release "0.3" # up (choose[12,0,2,3,5,-5,-7,-9]) #hcutoff "1250" # gain "4" # pan (density 21 $ scale 0 1 $ rand),
s "sh9" # n (density 8 $ choose[0,1,4,5,6,8,13,20,24,29,30,32,33]),
s "303/13" # n "7" # cut "4" # up (density 8 $ choose[12,0,2,3,5,-5,-7,-9]) # attack "0" # release "0.4",
s "dr110/4" # n "3" # attack "0" # release "0.1" # gain "1.3" # pan (density 31 $ scale 0 1 $ rand)
] # gain "1.5"

もともとDTMをやってるので、シンセサイズ的な単語のほとんどは想像がつきます。cutoffとかpanとか。あとは関数と引数、前後の繋がりのルールがわかれば、鳴ってる音との関係がわかってきます。公式のチュートリアルも、今とはやや違いましたがそこそこわかりやすかったと思います。あと人のコードをコピペして、関数と変数いじったり。

白状すると、自分はプログラミングは出来ませんが、音楽制作の入り口がMSX BASICのMMLでした。音楽の言語的な表現に抵抗がなかったので、元々かなりライブコーダー向けなのかもしれません。仕事でなくてもこういうギークな技術に向いてるようです(笑)。2、3日いじってたら、一般的なリズムマシンのようなパターンならスラスラ組めるようになりました。

ライブシステムへの最初の実装

基本をある程度理解したところで、ライブ用のコードをゴリゴリ書きつつ、どうライブのシステムとして実装するかを考えてました。当時のバージョンのTidalcyclesはパートごとのパラアウトが実装されておらず、裏技的な方法はありましたがスマートとは言えず、結局すべての音を2ミックスで出すしかありませんでした。

Tidalcyclesは、めちゃくちゃ大雑把に言うとメモリに読み込んだwavサンプルを、指定したタイミングで、指定した加工をした状態で鳴らすだけのシステムです。概念としてはサンプラーに近い。それをさっきの動画のような、音域も質感もバラバラな音が同じチャンネルにまとめられてオーデオインターフェースから鳴らすと、ガチャガチャうるさい割に薄っぺらい音にしかなりません。そのままでライブをするのは音響系アーティスト(自称)としてはサウンドに納得がいかない。

画像2

このときは結局PCの内部ルーティングでNative InstrumentsのGuitar Rigというギター向けバーチャルエフェクターに送り、コンプやEQや歪み、MIDIコンでライブ操作ができる飛び道具エフェクトなどで音を整えました。コードを書く所作からステレオの出力までを、全体で一本の楽器と捉えることにしたんです。この発想はその場しのぎでしたが、悪くなかったと思います。ライブで用意したのはPC、MIDIコン、オーディオI/Fのみ。

トラブル対処と機能強化により進化していくライブシステム

その後は公式やフォーラムを調べながら、内部構造にもそれなりに精通していきました。出したい音の実現を目指す中で、いろいろな技術的問題(思ってたように動かないとか)やトラブル(アップデートの度に動かないなど)に何度もブチ当たりましたが、ほとんどは公式から誘導されるフォーラム(場所がよく変わる)かGithubのIssueに同じような事例があったので、翻訳して対処できました。

あとは本体のソースコードを雰囲気で読んで、気合で解決。製品ではなくオープンソースのツールなので、コーディングだけでなく自力で問題解決策を検索するスキルも重要です。0.xから1.xのアップデートで一部ファンクションの大幅な改訂があって、書き溜めてたコードが軒並み動かなくなったときは、マジで泣きそうだった…。

画像3

[iPadのミキサー画面がオーディオI/F内のデジタルミキサーのコントローラーで、tidalcyclesの音をパラアウトで受けています]

Tidalcycles自体も細やかにアップデートを繰り返して、標準化されたパラアウト、内蔵シンセの追加、標準エフェクトの追加、OSC、MIDI(一時外部ライブラリとしてあった)、コントロール入力、と出来ることが飛躍的に増えました。特にパラアウトは超嬉しかった…。出来ることが増えた分難しくなってる面もありますが、それ以上にユーザビリティも多少向上しているので、習熟の難度としてはやや易しくなってはずです。

[2018年8月、渋谷Contactでのライブです]

2021年4月現在のシステム

画像4

[2020年12月、秋葉原MOGRAでのパフォーマンス]

現在は、TIdalcyclesからステレオ13チャンネルのPC内部ルーティング+バーチャルMIDIをAbleton Liveで受けて、Live内でエフェクト処理したサンプルやMIDIトリガーしたソフトシンセを、オーディオI/F内のデジタルミキサーへマルチチャンネル出力、デジタルミキサーでハードシンセやエフェクターとミックス、という2段ミキシングの化け物じみたシステムで運用しています。

おわりに

正直書いてみたものの、まるで参考にならんとかめちゃくちゃハードル高いやんけ!とか思われても仕方ない。でも、もしここで挙げた動画や他での演奏に魅力を感じていれば、それが全てです。突き進みましょう(沼がコポコポいう音)。

音楽というのは見方を変えれば数学であり言語でもあります。DAWやシーケンサでどうもうまく作れないなぁ、という人は意外とライブコーディングで進捗が良くなるかもしれませんよ?リズムやメロディの思考法が全く変わるので、表現の幅が広がるのは間違いないです。

一応、他にもSonic PiやFoxdotなど(Tidalcyclesに比べれば)取っ付き易い音楽系ライブコーディング環境はありますが、そちらが良ければ他をお当たり下さい。オレはTIdalで行く!

というのも飛ばし過ぎなので、次回はTIdalcycles以外も含めた、ライブコーディングを俯瞰した概論を書いてみます。…と言ったもののちゃんと書けるかな(汗)。

では次回。

次回#2

この記事が気に入ったらサポートをしてみませんか?