はじめに
Overtone, emacsでライブコーディングをやってみたことろ、思ったより面白かったので環境構築手順をメモしておきます
ライブコーディングとは、Sam Aaronさんの動画を観れば何となくイメージは掴めるかもしれません
emacsをMTRやシンセサイザーのように利用するという発想は面白いと思います。
(というかemacs愛が強すぎて脱帽します…)
2016 7/16 phpカンファレンスにてovertoneのをテーマとしたLTを行いました!!
20160716_OvertoneとShadertoneを使ってライブコーディングPHPカンファレンス関西_2016飛込LT
Overtoneとは?
SuperColliderというjavaで作られた楽曲制作用エンジンをclojureを叩くラッパー(?)
overtoneはclojureで成功したプロジェクトのひとつ。とのことです。
Shadertoneとは?
GLSLとOvertoneをなかよくするツール(よくわかってない)
clojureとは?
jvm上で動作するlisp方言。今流行の関数型言語です。
1 2 |
(+ 1 1) ;; => 2 (prn "hello world") ;; => "hello world" |
emacsとは?
昔からあるエディッタ
構築環境
MacBook Pro 13-inch(OS X EL Capitan 10.11.5)
cpu: 2.7GHz Core i5
Memory: 8GB
home brewのインストール
割愛します
jvmのインストール
home brewでインストール
1 2 3 4 5 |
$ brew install Caskroom/cask/java $ java -version java version "1.8.0_92" Java(TM) SE Runtime Environment (build 1.8.0_92-b14) Java HotSpot(TM) 64-Bit Server VM (build 25.92-b14, mixed mode) |
leiningenのインストール
これもbrewで
1 2 3 |
$ brew install leiningen $ lein --version Leiningen 2.6.1 on Java 1.8.0_92 Java HotSpot(TM) 64-Bit Server VM |
shadertoneをダウンロード
git cloneする
1 |
$ git clone https://github.com/overtone/shadertone.git |
project.cljを以下のとおり編集しないとfreesound apiのラッパーが動作しなかった…
1 2 3 4 5 |
- [org.clojure/clojure "1.5.1"] + [org.clojure/clojure "1.8.0"] - [overtone "0.9.1"] + [overtone "0.10.1"] |
overtone 起動テスト
初回の起動時は必要なパッケージをダウンロードし起動するので時間がかかります。
replのプロンプトが表示されれば起動完了
1 2 3 |
$ cd shadertone $ lein repl shadertone.core-> |
sin-oscで音が鳴るかのテスト
replのプロンプトにテスト用のコードを入力。sin(聴力テストみたいな音), ノコギリ(ノイズ)な音が鳴ればok
これでlein repl上で楽曲演奏ができるようになりました。
ですが、ターミナルでライブコーディングするのはちょっと厳しいので、
emacs ciderでライブコーディングできる環境を構築します。
1 2 3 |
-> (ns foo (:use [overtone.live])) -> (demo 1 (sin-osc 300)) ;; sin波(300hz) -> (demo 1 (saw 200)) ;; ノコギリ波(200hz) |
emacs ciderのインストール
M-x package-list-packagesでciderをインストール
.emacs.d/init.elに以下の行を追加
1 2 3 4 5 6 7 8 9 10 11 |
;; melpa, mermaladeの外部リポジトリを追加していない方 (require 'package) (add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/")) (add-to-list 'package-archives '("marmalade" . "http://marmalade-repo.org/packages/")) (package-initialize) ;; clojure-mode (require 'clojure-mode) (require 'cider) (add-hook 'clojure-mode-hook 'cider-mode) |
cider-jack-in
先ほどgit cloneしたshadertoneのディレクトリに移動しemacsを起動
M-x cider-jack-inするとlein replが起動する
examples以下にmy-saample01.cljというファイルを作成し
以下のコードを記述する
cider-modeではバッファ内にある式の末尾でC-c C-eするとその式が評価されるので
以下のように(demo 1 …の末尾でC-c C-eすると音が鳴るはず。
1 2 3 4 5 6 7 8 9 |
(ns my-sample01 (:use [overtone.live] [overtone.synth.stringed] [overtone.synth.retro]) (:require [shadertone.tone :as t] [leipzig.live :as ll] [leipzig.melody :as lm])) ;; ココでC-c C-e (demo 1 (sin-osc 300)) ;; ココでC-c C-e |
overtoneとshadertone
以下の式を評価してみると、音と連動して画像が動くのが判るはず。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
(ns my-sample01 (:use [overtone.live] [overtone.synth.stringed] [overtone.synth.retro]) (:require [shadertone.tone :as t] [leipzig.live :as ll] [leipzig.melody :as lm])) ;; C-c C-e (t/start "examples/disco.glsl" :textures [:overtone-audio]) ;; C-c C-e (def gtr1 (guitar)) ;; C-c C-e (ctl gtr1 :pre-amp 40.0 :distort 0.76 :lp-freq 600 :lp-rq 0.25 :rvb-mix 0.5 :rvb-room 0.7 :rvb-damp 0.4) ;; C-c C-e (guitar-strum gtr1 :C) ;; C-c C-e (guitar-strum gtr1 :F) ;; C-c C-e |
おわりに
今回、ざっくりですがovertone + shadertone + emacsで
ライブコーディング環境を構築してみました。
次回以降はclojureの基本やovertoneのもうちょっと詳細な使い方などの記事が書ければと思います。