SlideShare a Scribd company logo
Creative Music Coding
オーディオ・ビジュアル作品のための
オープンソースなソフトウエア・フレームワークの現状と展望

2014年2月22日
第19回 JSSA研究会
田所 淳 (http://yoppa.org)
発表内容
‣ クリエイティブ・コーディング + コンピュータ音楽
!

‣ 「クリエイティブ・コーディング」と総称されている開発
フレームワークをコンピュータ音楽作品、オーディオビジュ
アル作品の創作に用いる手法の現状を紹介
!

‣ 将来への展望
!

‣ 簡単なデモ
クリエイティブ?
「クリエイティブ・コーディング」とは?
‣ コーディング(プログラミング)
‣ それ自体がクリエイティブな活動
!

‣ では「クリエイティブ・コーディング」とは何か?
「クリエイティブ・コーディング」とは?
‣ 正式な定義はないのが現状
!

‣ ここでは、以下のように考えたい
‣ 「表現」(2D/3Dグラフィック、映像、サウンド) に関する
機能に特化した、開発フレームワーク
「クリエイティブ・コーディング」とは?
‣ Pure Data、SuperCollider、Cmix、ChucK などの音響合成
のための開発環境は、クリエイティブ・コーディング?
‣ → おそらくYES
!

‣ ただし、今回はより汎用的な開発フレームワークについて
言及していきたい
「クリエイティブ・コーディング」とは?
‣ 例えば、openFrameworksでは、様々な機能を繋ぎあわせ
る「糊」と表現している
main.cpp

testApp.h

testApp.cpp

ofSimpleApp, ofGraphics, ofImage, ofTrueTypeFont,
ofVideoPlayer, ofVideoGrabber, ofTexture,
ofSoundPlayer, ofSoundStream, ofSerial, ofMath,
ofUtils ...etc.

OpenGL

GLUT

FreeImag

FreeType

fmod

RtAudio

QuickTime

OpenCV
「クリエイティブ・コーディング」とは?
‣ 例えば、openFrameworksでは、様々な機能を繋ぎあわせ
る「糊」と表現している
main.cpp

testApp.h

testApp.cpp

プログラム開発のための
ofSimpleApp, ofGraphics, ofImage, ofTrueTypeFont,
ofVideoPlayer, ofVideoGrabber, ofTexture,
ofSoundPlayer, ofSoundStream, ofSerial, ofMath,
ofUtils ...etc.
!

糊 (Glue)

OpenGL

GLUT

FreeImag

FreeType

fmod

RtAudio

QuickTim

OpenCV
主要な開発フレームワーク
主要な開発フレームワーク
‣ どのような開発フレームワークが主流なのか?
‣ 正式な統計資料があるわけではない
‣ 話題になったアートプロジェクトなどから類推
主要な開発フレームワーク
‣ Creative Applications 紹介
‣ コードを用いた様々なプロジェクトを紹介 (2008∼)
主要な開発フレームワーク
‣ Creative Applicationsでは、掲載したプロジェクトを開発
フレークワーク毎にタグ付けしている
‣ その数を集計することで、現在の傾向の参考となる
‣ あくまで、一つの指標として…
主要な開発フレームワーク
‣ 開発フレームワークごとの掲載件数 (2014年2月)
開発フレームワーク

件数

1

openFrameworks

304

2

Processing

300

3

Flash

88

4

Javascript

64

5

Max/MSP

56

6

Cinder

54

7

vvvv

49

8

Java

16

9

Quartz Composer

10

10

Unity

8

11

Three.js

6
主要な開発フレームワーク
‣ 今回対象とするのはこのあたり (オープンソースのもの)
開発フレームワーク

件数

1

openFrameworks

304

2

Processing

300

3

Flash

88

4

Javascript

64

5

Max/MSP

56

6

Cinder

54

7

vvvv

49

8

Java

16

9

Quartz Composer

10

10

Unity

8

11

Three.js

6
クリエイティブコーディング + サウンド
‣ Processing、openFrameworks、Cinder、vvvvなどのフ
レームワークを音響合成に使いたい
!

‣ 現状ではフレームワーク単体では、音響合成の機能が貧弱
!

‣ クリエイティブコーディングのフレームワークで、音響作
品やオーディオ・ビジュアル作品を制作する手法を概観
3つの型
3つの型
‣ おおまかに分類

連携型

拡張型

内包型
1. 連携型
‣ アプリケーション間をOSCで連携

Processing

openFrameworks

Cinder

PureData

SuperCollider

ChucK
1. 連携型
‣ アプリケーション間をOSCで連携
‣ … 今回は割愛
2. 拡張型
‣ 開発フレームワーク内で、拡張機能として音声合成機能を
実現する方法
!

‣ それぞれの開発フレームワークには、機能拡張のための仕
組みが用意されている
!

‣ Processing → Library
‣ openFramewokrs → Addon
‣ Cinder → CinderBlocks
2. 拡張型
‣ 拡張機能を利用して、音響合成機能を強化する
!

‣ 例:
‣ Processing + Minim
‣ Processing + Sonia
‣ openFrameworks + ofxUgen
‣ openFrameworks + ofxTonic
!

‣ MinimとofxTonicを実際に紹介
2. 拡張型
‣ minim : ProcessingのLibrary
‣ 現在は、Processing本体に同梱されている
2. 拡張型
‣ FM合成 : Processing + Minim
import ddf.minim.*;
import ddf.minim.ugens.*;
Minim minim;
AudioOutput out;
Oscil fm;

!

void setup(){
size(640, 480, P3D);
minim = new Minim( this );
out
= minim.getLineOut();
Oscil wave = new Oscil(200, 0.8, Waves.SINE);
fm
= new Oscil(130, 400, Waves.SINE);
fm.patch(wave.frequency);
wave.patch(out);
}

!

void draw(){
}
2. 拡張型
‣ ofxTonic : C++で実装された音響合成ライブラリTonicを、
openFrameworksのAddonとして実装
2. 拡張型
‣ FM合成 : openFrameworks + ofxTonic
#include "testApp.h"

!

void testApp::setup(){
ofSoundStreamSetup(2, 0, this, 44100, 256, 4);
float basePitch = 400;
float index = 200;
SineWave car = SineWave();
SineWave mod = SineWave();
mod.freq(130);
Generator frequency = basePitch + (mod * index);
car.freq(frequency);
synth.setOutputGen(car);
}

!

void testApp::update(){
}

!

void testApp::draw(){
}
3. 内包型
‣ フレームワーク内に他の音響合成エンジンを内包する方法
‣ 一つのアプリケーションに集約されるので便利
‣ オープンソースであり、かつ使用するフレームワークと同
じ言語で実装されている必要あり
!

‣ openFrameworks + ofxPd
‣ openFrameworks + ofxSuperColliderServer
3. 内包型
‣ ofxPd : Pure DataをopenFrameworksに内包
3. 内包型
‣ ofxPdの場合

openFrameworks
+
Pdの音響合成エンジン

実行時にデータとして読込
3. 内包型
‣ ofxSuperColliderServer : SuperColliderをoFに内包
3. 内包型
‣ ofxSuperColliderの場合

SuperCollider
openFrameworks
+
SCの音響合成エンジン

楽器(Synth)ファイル書出

Synthdef
実行時にデータとして読込
3. 内包型
‣ 最終的には一つの実行ファイルに
‣ とりあつかいが楽!!
3. 内包型
‣ ofxPdコードサンプル
!

‣ Pdパッチ
3. 内包型
‣ ofxPdコードサンプル
#include "testApp.h"

!

void testApp::setup() {
ofSetFrameRate(60);
ofSoundStreamSetup(2, 1, this, 44100, 2048, 4);
pd.init(2, 1, 44100);
Patch patch = pd.openPatch("pd/osc.pd");
pd.start();
}
void testApp::update() { }
void testApp::draw() { }

!

void testApp::exit() {
pd.stop();
}

!

void testApp::mouseMoved(int x, int y) {
float freq = ofMap(y, ofGetHeight(), 0, 100, 8000);
pd.sendFloat("freq", freq);
}
3. 内包型
‣ ofxPdコードサンプル
void testApp::audioReceived
(float * in, int buf, int n) {
pd.audioIn(in, buf, n);
}

!

void testApp::audioRequested
(float * out, int buf, int n) {
pd.audioOut(out, buf, n);
}
3. 内包型
‣ ofxSuperColliderコードサンプル
#include "testApp.h"

!

#include "ofxSuperCollider.h"
#include "ofxSuperColliderServer.h"

!

ofxSCSynth *synth = NULL;

!

void testApp::setup(){
ofxSuperColliderServer::init();
synth = new ofxSCSynth("test_inst");
synth->create();
}

!

void testApp::update(){ }

!

void testApp::draw(){ }

!

void testApp::mouseMoved(int x, int y ){
if(synth){
synth->set("freq",
ofMap(y, ofGetHeight(), 0, 100, 8000));
}
}
デモ
‣ openFrameworks + ofxSuperColliderServer
将来の展望
将来の展望
‣ ネットワーク、Webブラウザの活用
‣ 音響合成のプラットフォームとしてのHTML5
!

‣ サウンド
‣ Web Audio API
‣ Web MIDI API
!

‣ グラフィック
‣ Canvas
‣ WebGL
将来の展望
‣ Gibber (http://gibber.mat.ucsb.edu/)
将来の展望
‣ CoffeeCollider (http://mohayonao.github.io/)
将来の展望
‣ ライブコーディング
‣ TopLap (http://toplap.org/)
将来の展望
‣ ライブコーディング
‣ ofxGLSLSandobox

More Related Content

「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望