ジェネラティブアートをインタラクティブに楽しむ
最近、AI関係のソフトを創るのにも、少し行き詰まりを感じていました。
「ライブラリのAPIを叩くばかりじゃなくて、アルゴリズム自体に直接触れるもっとプリミティブなコードを書きたいな」
という気持ちも沸々と湧いてきたので、気分転換に自分の原点(と勝手に考えている)メディアアートよりなことをしてみることにしました。そんな中、ふとTwitterのフォロワーさんのツイートをみて、衝動買いしたのが「数学から創るジェネラティブアート」でした。
数学から創るジェネラティブアート。Processingで学ぶ かたちのデザイン。表紙も中身もバリかっこよい。なんで数式こんなにかっこいいのできるんや。うわー、すげぇ作りたい。。著者は巴山竜来さん。 pic.twitter.com/1Zvt2YK50g
— 梅酒・ロック🌤️ blenderと和解セヨ (@umesyu_rock_) March 6, 2021
もう、ツイートと本の表紙をみた瞬間「ビビビ!」ってきちゃったんですよね。
過去も、ジェネラティブアートに関する書籍は結構買っているのですが、この本はその中でも抜群に面白かったです。いきなりユークリッドの互除法を可視化してアートにするって、最高にクールじゃないですか!?
本の通りProcessingでコードコピペして動かすだけでも十分楽しいのですが、これを自分なりに発展させたいなと思っていて、ふと目に入ってきたのがMIDIコントローラ。
「これでつまみグリグリしてインタラクティブに映像や音楽を生成したらめっちゃ楽しそう!」
とひらめき(というほどのものでもないですが)、早速作ってみることにしました。
XJシステムの作り方
というわけ(?)で、できました。ソフトウェアは、以下のGitHubリポジトリで使い方と合わせて公開しています。
名前のXJというのは深い意味はないのですが、VJとDJをかけ合わせたようなことをやりたかったのでXR的なノリで付けています。
言語はProcessingでも良かったのですが、Pythonで書き直してみることにしました。理由は「比較的自分が慣れている」「Pyxelというライブラリ使ってみたかった」「コードコピペするより移植するほうが自分の理解が深まりそう」「AIと組み合わせるのが楽そう」「使ってくれる人が多そう」というくらいの理由です。
このあたりは、今後まだ変わるかもしれませんし、大規模なシステムというより、モジュラーシンセみたいに、小型のモジュールを組み合わせて楽しむシステムにしようかなと思っているので、あまり特定の言語やソフトにとらわれず、柔軟に楽しんでいきたいなと思っています。
というわけで、試作してみたものがこちらになります。
ユークリッドの互助法の可視化
— からあげ (@karaage0703) April 12, 2021
「数学から創るジェネラティブアート」のProcessingのコードをPythonに書き直しています
Kindle: https://t.co/rCi0mmzQot pic.twitter.com/A8vOqIp2Kv
ユークリッドの互助法の可視化、音楽もつけてみた。ちょっとチープ過ぎるかな pic.twitter.com/JZ2pRd8tRl
— からあげ (@karaage0703) April 21, 2021
やっていることは、書籍の1章のユークリッドの互除法のコードをProcessingからPythonに書き直して、MIDIコントローラでパラメータを調整できるようにして、少しアレンジ(サウンドをつける)などしたところになります。
以下は、Pyxelの機能でGIFアニメとして書き出したものです(音は無し)。
セットアップ方法と使い方
使い方ですが、GitHubのリポジトリのREADMEを参照ください。
操作は、ぜひMIDIコントローラ(X Touch Mini)でつまみをグリグリして欲しいですが、一応キーボードでも操作できるようにしてあります。E,D,R,F,T,Gあたりを触ってみてください。
ソフトウェアは、PythonとPyxelとPygameが必要です。通常はpipでインストールできますが、Apple Silicon(M1) Macで少しセットアップにハマりました。以下記事を参考にセットアップください。
今のところ、一番派手なのがrecur_div_square_with_music.py
です。Pythonで実行すると、動き始めます。
コードは、自分にしては珍しくクラスとか使っています。深い理由はなくて、Pyxelのサンプルコードを真似しているだけです。
template.py
とかcolor.py
あたりのコードをみれば、なんとなく真似して書けるのではないかと思います。ご自由に利用・改造ください。
スクリーンショットをとる方法
以下を覚えておくと便利です。
- 実行中に ALT+1 (OPT+1):スクリーンショットを撮影
- 実行中に ALT+3 (OPT+3):直近30秒をアニメーションGIFとして保存
- 実行中に ALT+2 (OPT+2):アニメーションGIFの開始ポイントをリセット
引用元:Let’s start game programming with the retro game engine “Pyxel” - Google スライド
まとめ
ジェネラティブアートを楽しんでみました。クリエイティブなコードを書いて、動かしてつまみをグリグリするの楽しいですね。とりあえず書籍を最後までPythonに移植した後は、何かしら自分なりのオリジナルのものを作れたら良いなと思っています。
グラフィックとサウンドエンジンとして使った「Pyxel」に関しても、前から使ってみたいライブラリだったのでようやく使えてよかったです。色が16色だったり、サイズも256x256までだったりといった制約、最初は厳しすぎるかなと思ったのですが、使ってみるとこれが絶妙でクリエイティビティを刺激しますね。当分は、この制約で色々工夫してみたいなと思います。この制約の中でも、クオリティも、まだまだ上げられる気がしています。
ソフトは随時更新していき、良い感じのものができたら、動いている様子をTwitterやこのブログにアップしていきたいと思います。
参考リンク
レトロゲームエンジン Pyxel でプログラミングを始めよう! - kitao's blog
【初心者向け】PythonとPyxelでゲームプログラミングを始める一番簡単な方法 - kitao's blog
Pythonでお絵描きしてみよう (Pyxelの新命令の紹介) - kitao's blog
「Python」言語でレトロゲームを開発・実行できるエンジン「Pyxel」を試してみた【レビュー】 - 窓の杜
【Pyxel】Pythonでレトロゲームを作ろう! 総集編 -まるっと1週間でゲーム開発入門-|はやぶさの技術ノート
Let’s start game programming with the retro game engine “Pyxel” - Google スライド
GitHub - terkelg/awesome-creative-coding: Creative Coding: Generative Art, Data visualization, Interaction Design, Resources.