yoppa.org


Tidalでライブコーディング! – 応用編 : SuperColliderとの連携

前回の「Tidalでライブコーディング! – 実践編」に引き続いて、応用編です。

Tidalは、基本はDirtというサンプルファイルを再生する専用のプログラムでサンプルを再生しています。しかし、TidalにはOSC (Open Sound Control) を送出する機能があります。このOSC機能を利用することで、SuperColliderやMax/MSP、Pdなど様々な外部の音源を使用してTidalで作成したパターンを再生することが可能です。

今回は、TidalをSuperColliderを連携してみます。

基本: 簡単なサンプル

まずは簡単なサンプルで試してみます。Sin波を生成する楽器をSuperCollider側に作成します。

ここで1つ注意すべき点は、Tidalから演奏する楽器は一度鳴らし始めると自動的に停止することはありません。ですので、あらかじめエンベロープを設定しておき、一定の時間で音が終了するよう、doneAction:2を設定したエンベロープを適用しておく必要があります。

SynthDefの作成が完了したら、SuperColliderをBootして、作成したSynthDefを実行しておきます。

これに対応するTidal側のプログラムを作成します。まず、SuperColliderで作成した楽器と連携する準備をします。まず楽器 “scsine” を定義して、引数の初期値を設定しています。その上で、SuperColliderに渡すTidal側の変数を定義します。

あとは、変数を使用してパターンを作成していきます。

応用: 2つの楽器を定義して演奏

少し複雑なサンプルをみてみましょう。まず2つの楽器 “schh” と “scbass” を用意します。

この楽器を演奏するためのTidal側のプログラムは以下のようになります。


TidalをWindowsでセットアップする

Window環境でのTidal

Tidalは基本的にはUnixベースの環境を前提としているため、Windowsで動かすには、いろいろ設定が必要です。

TidalをWindowsで動かすために、まずCygwinという、Windowsオペレーティングシステム上で動作するUNIXライクな環境をインストールし、そこに必要なライブラリーをインストールした後、Tidalの環境を構築します。

Cygwinのインストール

下記のリンクからダウンロードします。

  • https://cygwin.com/install.html
  • 64bitOSの場合は、setup-x86_64.exe をダウンロードして実行
  • 32bitOSの場合は、setup-x86.exe をダウンロードして実行

インストーラーでインストールを進めると、途中でパッケージを選択する画面になります。ここで、下記のパッケージをsearchから検索して、表示されたパッケージのバージョン番号をチェックをしてインストールする設定にします。

screenshot_594.png

Portaudioのインストール

Portaudioは、パッケージ化されていないので、ダウンロードして手動でビルドする必要があります。まずPortaudioのダウンロードページに行き、安定板(2016年4月現在はpa_stable_v19_20140130.tgz)をダウンロードします。ダウンロードしたpa_stable_v19_20140130.tgzをCygwinのホームにコピーします。その上で、下記のコマンドでPortaudioをインストールします。

Libioのインストール

OSCをやりとりするためのライブラリーlibioもapt-cygではインストールできません。libioのサイトのDownloadにある最新の安定版(2016年4月現在はliblo 0.28)をダウンロードして、下記の手順でインストールします。

Dirtのインストール

Tidalで使用するサンプラー、Dirtをインストールします。Dirtはgithubからクローンします。

ダウンロードしたら、ビルドします。

Haskellのインストール

Tidalのベースとなっているプログラミング言語Haskellをインストールします。まずHaskellのインストールページを開きます。

自動的にWindowsでのインストールのページが表示されます。使用している環境にあわせて、32bit版か62bit版のHaskellのインストーラーをダウンロードします。ダウンロードが完了したら、インストーラーを起動してHaskellをインストールします。

Haskellをインストールしたら、Cygwinを再起動してください。

Tidalのインストール

Cygwinを起動して、下記のコマンドでTidalをインストールします。

これで、完了です!

Atomの設定

Windows版でも、Atomをエディターとして使用可能です。OS X版と同様に、まずAtomをインストールした後、Tidalパッケージを追加します。

TidalパッケージのSettingを開きます。ここでghci.exeへのパスを正しいものに変更します。

  • 例: C:\Program Files\Haskell Platform\7.10.3\bin\ghci.exe

screenshot_596.png

あとは、テストでコードを実行させてみて音が鳴れば、設定完了です!!


Tidalでライブコーディング! – 実践編

Tidalリズムの基本

前回の「Tidalでライブコーディング! – セットアップ編」に引き続いて、こんどはいよいよ実践編です。

Tidalのリズムの組み方の基本はとてもシンプルです。例えば以下の例。

これをcommand-enterで評価すると、バスドラムが一定間隔のリズムを刻みます。この1行の命令にいくつかTidalの命令のポイントが詰まっています。

まず先頭の”d1″の”d”は、Dirtシンセサイザーを演奏するということを意味します。Tidalでは、d1〜d9まで8つのDirtシンセのためのトラックが用意されていて、それぞれ別個にパターンを組んだものをリズムを同期させて演奏することが可能となっています。次の”$sound”でDirtのサンプルを再生する意味になり、最後の”bd”がサンプル名になっています。

Dirtに格納されているサンプルは、Dirtをインストールいたフォルダ以下の”samples”に入っています。ここにフォルダに分かれて整理されていて、例えば”bd”の場合は、”bd”フォルダ内の最初のサンプルファイル”BT0A0A7.wav”が演奏されます。もし、bdフォルダ内の別のファイルを演奏したい場合はコロン「:」で区切って”bd:1, bd:2, bd:3…”と指定していきます。

screenshot_523.png

現在のリズムは、各小節の先頭、1拍目でbdが演奏されています。これを以下のように変更してみましょう。

すると、1拍目と3拍目に演奏されるようになります。つまり、1行に書いた楽器がその小節の中で均等な間隔で演奏される仕組みです。これと同じリズムを以下のように書くこともできます。

さらに

というようにどんどん分割していけるわけです。

もちろん複数の音を鳴らすことも可能です。バスドラムとスネアを交互に鳴らしてみます。

休符は ~ で表現します。

演奏している音を止めるときはsilenceを指定します。

リズムを分割、ネスト

もう少し複雑な例をみてみましょう。

ここで新たに大括弧 [] が出てきています。これは、分割されたリズムの中でさらに分割することを意味します。この例では2拍目でスネアを2回演奏することを意味します。さらにこれを入れ子状に複雑に組み合せていくことも可能です。

音を混ぜる

“stack”という命令を使うと、1つのトラックの中に複数のリズムを重ねていくことが可能です。

というように書いていきます。実際には、例えば以下のようになります。コンマで区切ってどんどんパターンを追加してMixしていけます。

トラックごとに、音量や定位(パン)を指定することも可能です。|+| という記号で繋いで指定していきます。最後のトラックはランダムにパンを指定しています。

モジューレーション

Tidalではパート全体に対して、様々な変化を加える関数が多数用意されています。これらを組み合わせるととても複雑なパターンが生まれます。例えば、jux という関数は左右で音をずらしたり反転させることで、複雑な定位を生成します。

gap や chop を使うと、音が細かくぶつ切りになります。

毎回モジュレーションをかけるのではなく、特定のタイミングのみで適用することも可能です。たとえば、毎回4小節ごとにchopをかけ、6小節ごとにgapをかけてみましょう。everyという命令を使います。

さらに、juxのずらし方をすこしずつ変化させてみます。iterという命令をつかうと、数が小節ごとに増加していき指定した数でサイクルします。例えば、iter 4と指定すると、0, 1, 2, 3, 0, 1, 2, 3… というパターンが生まれます。

基本から徐々に積み上げていき、最終的にはとても複雑なリズムが生成されました!

次回につづく! (予定)


Tidalでライブコーディング! – セットアップ編

Tidalとは?

Tidalは、Alex McLean氏によって開発されたHaskellを拡張したライブコーディング(Live Coding)環境です。

そもそもライブコーディングとは何かというと、ざっくりと言うと、プログラムをリアルタイムに実行しながらコーディングする行為自体をパフォーマンスするジャンルです。主に、音楽や映像を生成することが多いですが、Webや詩などその適用範囲は拡がっています。

Tidalは、こうしたライブコーディングの環境の中でも、リズムパターンの生成に特化した環境となっています。シンプルな文法で複雑なリズムパターンをリアルタイムに生成し変奏していくことが可能となっています。どんなことができるのか理解するには、まずはデモ映像を観てみるのが早いかもしれません。

Tidalは、Mac OS X、Linux、Windowsで動きます。

Tidalのインストール

ここでは、OS Xの環境に絞って説明します。その他のOSのインストール方法は、オフィシャルのドキュメントを参照してください。

OS XのインストールではHomebrewを使用します。Homebrewが入っていない場合はまずインストールします。(既にHomebrewを使用している場合は必要ありません)。

Tidalは、大きく分けて2つのパートから構成されています。1つはリズムを生成するTidal本体。これはHaskellのパッケージとしてインストールします。2つ目は“Dirt”というサンプラーです。様々なリズムやシンセサイザー、効果音などがプリセットされていてHaskellから呼び出されてサウンドを生成します。ここでは触れませんが、応用として、TidalはDirtを使わずに外部のMIDI音源やソフトシンセ、さらには、Max/MSPやSuperColliderなどの言語とOSCで連携することも可能です。

Dirtをインストールしていきます。まずは必要なライブラリーをインストール。

その後、TidalとDirtを連携するため、Jackをインストールします。

Dirtの本体をGithubからダウンロードしてインストールします。まずインストールしたいディレクトリに移動してから以下のコマンドでインストールします。

次にHaskellの実行環境を構築します。TidalではGHCというHaskellのコンパイラとインタプリタを利用します。これもHomebrewから。

次にGHCのパッケージ管理システムであるcabalを利用して、Tidalの本体をインストールします。

これでインストールの完了です!

エディターのインストール

しかし、まだこれだけではTidalを使うことはできません。Tidalでは既存のテキストエディターからHaskellのインタプリタを呼び出して使用する仕組みになっています。オフィシャルに対応しているテキストエディターは、現状では、EmacsとAtomです。(Haskellを動作させることができるエディターであれば他でも使用できるものがあるかもしれません。)

ここでは、導入が簡単なAtomを使用する方法を紹介します。

Atomエディターを持っていない場合は、下記からダウンロードします。

Atomを起動して、settings > install の検索欄で「Tidal」を検索します。おそらくトップにTidalのプラグインが表示されるので、インストールします。

screenshot_516.png

実行してみる!

では、いよいよ実行してみましょう!

まず、Dirtをインストールしたディレクトリに移動して、Jackのデーモンを起動します。

次にDirtを起動します。

これで、準備完了です。次にAtomで新規ファイルを開き「xxx.tidal」というファイル名で保存します。するとファイルタイプが「Tidal」になるはずです。

この状態で、メニューバーから Package > Tidal > Boot Tidal を選択します。

試しに以下のパターンを入力してみます。

d1 $ sound “909 ~ bass bass:2”

リズムパターンが再生されるはず!? (実践編につづく予定)


openFrameworks + ofxMSATensorFlow でディープラーニングを試してみる (OS X版)

ディープラーニングとofxMSATensorFlow

最近、何かと話題のディープラーニング(Deep Learning / 深層学習 / 機械学習)。TensorFlow、Chainer、Caffeなど様々な便利なライブラリもフリーで入手可能で、ずいぶんと敷居が下がってきた印象だ。

そんな中、イケメン天才アーティストのMemo Akten氏によって、openFrameworksでTensorFlowが使用できる、ofxMSATensorFlowというアドオンが公開された。早速、OS Xで動かしてみたので、設定方法をシェア。

※ 動作を確認したOSは、OS X 10.11 (El Capitan) のみです。

インストール

まずは、Githubからアドオンの本体をダウンロード。従来のアドオンと同様に、openFrameworksのルート/addons/ofxMSATensorFlow に配置する。

  • https://github.com/memo/ofxMSATensorFlow

本来は、C++でTensorFlowを動かすためにいろいろ設定が必要なのだが、様々なプラットフォームごとにTensorFlowが環境構築されたシェアードライブラリが配布されている(親切!!)。ありがたく、これを使用する。OS Xの場合は、下記のリンクから ofxMSATensorFlow_lib_OSX_2016_02_21_v0.7_CPU.zip をダウンロードして解凍する。

  • https://github.com/memo/ofxMSATensorFlow/releases

中には libtensorflow_cc.so というライブラリが入っている。ofxMSATensorFlowではこれをホームディレクトリ直下のlibフォルダに配置して使用するように設定されている。以下のように設定

Xcodeでサンプルを動かしてみる

MemoさんはQTCreatorで動かしているようなのだが、できることなら手に馴染んでいるXcodeで動かしたい。以下のように設定して無事サンプルを動かすことができた。まずは、基本サンプルの example-basic で試してみる。

ProjectGeneratorで、example-basicフォルダを選択してインポートする。自動的にaddonにはofxMSATensorFlowが入っているはずなので、そのままプロジェクトをUpdateする。(少し時間がかかる)

screenshot_254.png

TensorFlowのライブラリは既にシェアドライブラリとして持っているので、addonフォルダ内のものは必要ない。addons/ofxMSATensorFlow/libs/tensorflow をフォルダごと参照を削除。

Slice 1.png

また、このサンプルは、ofApp.hやofApp.cpp、main.cppを使用していない。srcフォルダ内で赤くなっているファイルを削除する。

screenshot_257.png

ここに、先程のライブラリを追加する。libsフォルダを右クリックして、”Add Files to …” を選択。ファイルダイアログから、libフォルダ内の libtensorflow_cc.so を選択する。結果以下のようになるはず。

screenshot_256.png

あとは、Buildするだけ。こんな感じのサンプルが実行される(はず)!!

screenshot_258.png

MNISTを試してみる

MNIST(Mixed National Institute of Standards and Technology) とは、28x28pxの60000枚の学習サンプル、10000枚のテストサンプルからなる手書き数字画像データベースで、機械学習の世界ではこれを使って手書きの数字を認識させるのが “Hello World” 的な定番サンプルとなっている。ofxMSATensorFlowでもMNISTのサンプル example-mnist があるので、試してみる。

ただし、まず学習データが必要。こちらは別途ダウンロードする

  • https://github.com/memo/ofxMSATensorFlow/releases/download/v0.0/example-inception3-data.tar.gz

解凍したフォルダ model-deep と model-deep の2つを、example-mnist/bin/data以下に配置する。

あとは、先程の example-basic と同じ手順でビルドできるはず。マウスで描いた数字を瞬時に判別する。ディープラーニングすごい!!

screenshot_252.png


openFrameworks、なんでポインタを使うのか?

openFrameworksをワークショップや授業などで教えていると、ポインタの概念にさしかかった時に突然抽象的になってしまい、挫折する人が出てきてしまう。自分のためのメモも兼ねて、なぜポインタを使うのか、抽象的な解説ではなくopenFrameworksでの分かりやすい実例をベースにして考えてみた。

ダメな例

例えば、以下のように画像をランダムな場所に表示するShowImageという簡単なクラスをつくったとする。

ShowImage.hpp

ShowImage.cpp

これを、ofAppから繰り返し生成して配列に格納し、表示していく。画像ファイルの読み込みはofAppで行い、ShowImageクラスに読み込んだ画像を代入していく。

ofApp.h

ofApp.cpp

これを実行するとどうなるか。画像のファイルサイズにもよるが、みるみるうちにメモリを消費していき、FPSも極端に落ちていく。実行しているマシンのメモリサイズにもよるが、ずっと起動していると最終的にはアプリごと落ちる。全然ダメダメなプログラムだ。

ポインタで指し示す

では、どのようにすればパフォーマンスが改善するのか? 「ダメな例」の最大の問題は、ShowImageにイメージを代入しているので、ShowImageクラスをインスタンス化して画像を代入する毎に画像ファイルの容量だけメモリを消費している。代入しているということは、つまりは画像のデータをそのままコピーしている状態になっている。

ここで、ポインタを活用する。ポインタのざっくりしたイメージは、データの実態ではなく、その参照先を「指し示して(Point)」いる機能だ。例えば、先程の例だと巨大な画像データの実態そのものをコピーしてくるのではなく、あそこに画像のデータがあるよと「指し示す」ことができる。

ShowImageから画像を描画する際には、imageは実態ではなくその参照先を指し示すポインタ *image になったので、以下のようにアロー演算子 “->” を使用するように変更する。このアロー演算子の形が、まさに指し示す矢印の形になっている。

ざっくりとしたイメージを図示するとこんな感じか?

pointer_image2.jpg

改良したプログラム

「ダメな例」を修正して、画像像を直接コピーするのではなく、ポインタとして指し示すように変更したプログラムは以下のようになる。

ShowImage.hpp

ShowImage.cpp

ofApp.h

ofApp.cpp

これで、ずっと起動していてもイメージ1個だけのメモリしか消費せず、ShowImageからはそのイメージのデータを参照しているだけなので、安定して稼動するプログラムになるはず! (とはいえ、永久にオブジェクトを複製し続けるので、ずっと起動してると落ちるかも…)

追記: 参照渡し

何人かの方から、この例ではポインタではなく参照をつかったほうが良いのではないかという指摘がありました。どちらが適切なのか、ポインタと参照のどちらをまず覚えるべきなのか、いろいろ難しい議論ですが、とりあえず、ポインタ渡しではなく参照渡しをして描画する例を掲載します。(間違いあればご指摘を)。

ShowImage.hpp

ShowImage.cpp

ofApp.h

ofApp.cpp

たしかに、参照渡しを使うほうが、わかりやすいような気もしてきた… C++は奥深い…


openFrameworks + GLSLでクロマキー合成

screenshot_199

(追記) : すぐに使えるように、addon化してみた! (openFrameworks 0.9.0 〜)

ちょっと仕事でプログラムしていた際に調べたコネタ。

画像やムービー素材を背景に合成して表示したい場合、もとの素材がPNG形式などでアルファ値で透明度が指定されている場合は問題ないのだけれど、背景が黒や緑などの単色ベタ塗りになっていたときには、いわゆる「クロマキー」的な処理をする必要がある。

Shader(GLSL)を知らなかった頃は、画像の全てのPixel情報をとり出して、特定のチャンネルを描画しないなどの力技でやろうとしてみたけど、CPUへの負荷が尋常でないので、大きな画像素材では現実的ではない。

そこで、openFrameworks + GLSLでクロマキー合成をする方法を調べてみた。

WebGL用に実現しているブログがとてもわかり易く理解できた。

こちらを参考に、openFrameworks用に移植してみた。

まずはShaderのソース。vertex shaderは、こんな感じ。

  • chromaKey.vert

こちらは、テクスチャーの情報をfragment shaderに渡してるだけ。

次にfragment shader。

  • chromaKey.frag

キーの色と閾値をuniformにして、外部から指定できるようにしているのがポイント。これで汎用性のあるクロマキー合成用Shaderとして活用できる。

これをopenFrameworks側で利用する方法はこんな感じ。

  • ofApp.h

  • ofApp.cpp

閾値を設定することで、例えばちょっと背景との境界がボケている画像でも。

source

こんな感じできれに合成できる!

screenshot_198

もちろん動画でも簡単!

  • ofApp.h

  • ofApp.cpp

爆発もきれいに合成できました!

screenshot_199


Sprout : レンズ系とジェネ系の世紀、ふたつの黎明 #2

Sprout

東京都庭園美術館で行なわれたイベント、「Sprout : レンズ系とジェネ系の世紀、ふたつの黎明 #2」、何とか無事(?)終えることができました。お越しくださった方ありがとうございました。

「Hack」というお題で、谷口暁彦さんとトークとライブをしたのですが、結果として互いの「Hack」感の違いなども垣間見えたような気もします。「では、お前はHackerなのか」と問われるとあまり自信はないので、なかなか緊張するテーマでした。ライブで初めて披露したBytebeatをライブコーディングするパフォーマンスは、もう少しブラッシュアップして持ちネタの1つにしていきたい。

それにしても、普段「対談」という形式で人の前に立つ経験が少ないので、いろいろ勉強になった。きちんと先の展開を考えて発言しないと、途中で手詰りになってしまったり。もっと精進します。

トークのパートでは、用意したスライドのごく一部しか紹介できなかったのでここに公開します。


「バードマン あるいは(無知がもたらす予期せぬ奇跡)」感想

たまには、ブログっぽい記事を。

映画「バードマン」が、なかなかいろいろ考えさせられる良い作品だったので、忘れないうちに感想を書いてみる。レビューなどという大層なものではなく、あくまで個人的な感想として。

以下、映画の結末に触れているので(いわゆる「ネタバレ」)これから観に行こうとしている方は読まない方がいいかも。

この映画をどう捉えるかは、最後のシーンをどう解釈するかによって大きく変化するように思う。あえて多様な解釈が可能にしてあるのだろう。

個人的には、延々と擬似的な長回しが続いた後、初めてカットが切り替わって以降の世界は、現実ではなく妄想や空想の中での話だと解釈した。そもそも冷静に考えると、いろいろおかしい。

  • 銃でこめかみを打ち抜いたのに、鼻が吹っ飛んだだけで済むなんて、しかも治療であっさり回復なんて都合の良い話すぎる
  • 落ち目の役者が舞台で自殺を図っただけで、一晩にしてヒーローになるわけがない
  • 劇の終演後、ほとんどの観客がスタンディングオベーションする中、静かに(悲しげに?)席を立った評論家が、その作品を激賞するのか?
  • 病室に置いてある新聞のタイトルが、“Birdman” になってる

などなど。つまり、リーガン(主人公)は既に死んでいるというのが素直な解釈なのだと思う。空を飛ぶ火の玉もそれを暗示している。

誰しも若い頃は自分は万能だと思っているけど、歳を重ねることで徐々に自分が凡庸で理想からほど遠い人間であることを思い知らされる。それでも理想を求めて葛藤する。リーガンもまた、自分は「バードマン」なんて子供騙しのキャラクターで終わる人間ではないと、本格的な役者として復活して人生を一発大逆転しようともがいている。

しかし、現実は厳しい。「演劇界」では所詮リーガンはヒーローを演じていたうすっぺらな映画業界人でしかなく、評論家からは、はなから相手にされない。

うっかり楽屋口から締め出され、パンツ一丁でブロードウェイを歩いた動画がネットでバズるという体験から転機が始まる。それまで、ネット上では存在すらしていなかった自分が、一夜にして有名人となる。ひさびさに、多くの人達から承認される喜び。拳銃で自殺するという突飛な発想も、世の中を悲観してというのではなく、さらにスキャンダラスな演出をすることでより、家族や世間から承認されたいという発想だったのではなかろうか。

この作品のテーマ、40歳を過ぎた自分にとっていろいろ身につまされて、心を揺さぶられる。多くの中年は、「俺はこんなもんじゃないはずだ」という心の中のバードマンと葛藤してる。スーパーヒーロになった自分を夢想しつつ、単調な現実を生きていく。なかなか重い。

ちなみに、劇中劇で使われるレイモンド・カーヴァーの「愛について語るときに我々の語ること」を読んだことがない。この作品の内容を知っていると、また感想は変わってくるのかもしれない。


Shadertoneで遊んでみた – 導入編

overtone-logo

Shadertoneで遊んでみたら、なかなか面白かったので、備忘録としてブログに書いてみる。

Shadertoneは、ソースコードがGithubで公開されている。

このリポジトリの要約をみると “A mix of www.shadertoy.com and Overtone” とある。理解してみるとなかなか的を得た要約なのだけれど、最初は何のことやらという感じだったのでここから解読してみる。

まず、shadertoyの方だけれど、こちらはGLSL(Shader)をWebブラウザ上で実行とコーディングする環境。GLSL sandbox に近い感じ。まあ、こちらは理解できる。

問題は、Overtoneのほうで、こちらはオフィシャルのWebサイトが用意されている。

ここの説明の、「SuperColliderとClojureをくっつけたもの」という部分が要点となる。SuperColliderは、コンピュータ音楽言語でありオーディオ生成エンジンとして、すっかりお馴染なので割愛。Clojureとは、Lispの方言の一つで、いま話題の「関数型プログラミング言語」のひとつ。Javaのバーチャルマシンの上で動作する。

つまり、ここまでを要約すると、

  • Shadertoneは、OvertoneとGLSLのライブコーディング環境をミックスしたもの
  • Overtoneは、ClojureからSuperColliderの音響合成を行うライブコーディング環境

ということ。

別の言語体系で、SuperColliderの音響合成エンジンで音を生成するというアプローチは、Sonic Piに似ている。それもそのはずで、OvertoneおよびShadertoneの作者Sam Aaronは、Sonic Piの開発者でもある。Sonic Piと同様、Overtoneもライブコーディングの機能を重視している。さらに、複数人でソースを共有しながらのライブコーディングも可能となる模様。Overtoneの実行している様子は、本人によるデモがわかりやすい。

Sonic Piが、どちらかというと簡易な文法でライブコーディングを体験できる教育用途に主眼を置いているのに対して、Overtoneはより本格的にゴリゴリとライブコーディングする環境という印象。さらにOvertone/Shadertoneは、インストールと環境構築がややハードルが高いのがちょっとやっかいな感じ。手元のOS X 10.3.3で動かした際の環境構築をざっと書き出してみる。

まず、Clojureを対話的に実行可能なテキストエディタを用意する必要がある。イケてるライブコーディング用エディタとして話題のLight Tableや、vimからでも実行可能なのだが、ここでは作者であるSam Aaronが使用しているEmacsで環境構築してみる。

まず、OS Xにいろいろインストールするのに便利なHomebrewの環境を用意する。Homebrewの導入はこちらを参照。

Homebrewの環境が整ったら、emacsを最新版(2015年4月現在だと、24.5)にしておく。

次に、Clojureのプロジェクト生成を自動化してくれるLeiningenという環境を入れる。これもHomebrewをつかうと楽。

次に、Emacsをライブコーディング用にチューンナップする。Sam Aaron自ら、自分の環境をパッケージングしてEmacs-Liveという名前で公開している。こちらもターミナルから1行コマンドでインストール可能。

次に、GithubからShadertoneをZipでダウンロード、もしくはCloneする。

Shadertoneをダウンロードしたフォルダに移動して、emacsを起動

すると、Emacs-liveでバキバキにチューンナップされたEmacsが起動する。

screenshot_902

まずは、Shadertoneのサンプルを試してみる。emacsから、example/00demo_intro_tour.clj を開いてみる。

screenshot_903

サンプルを開いた状態で、emacsで以下のコマンドを実行

これで、Shadertoneを対話的に実行する環境が起動する(起動にはしばらく時間がかかるので注意)。

このあとは、それぞれの行の末尾に移動して、

を入力するとその行が評価される。例えば、

の末尾に移動して C-c C-e をすると、ウィンドウが起動してShaderが表示される。ここから先は下記の映像を参照してみてほしい。

こんな感じで、どんどんライブコーディングしながら音と映像を同期していける。なかなか素晴らしい。

だいぶ長くなってきたので、続きはまた今度。