「クリエイティブ・ミュージック・コーディング」-...

Post on 04-Jun-2015

4.461 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

2014年2月22日 第19回 JSSA研究会 田所 淳 (http://yoppa.org)

発表内容‣ クリエイティブ・コーディング + コンピュータ音楽 !

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

‣ 将来への展望 !

‣ 簡単なデモ

クリエイティブ?

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

‣ では「クリエイティブ・コーディング」とは何か?

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

‣ ここでは、以下のように考えたい ‣ 「表現」(2D/3Dグラフィック、映像、サウンド) に関する機能に特化した、開発フレームワーク

「クリエイティブ・コーディング」とは?‣ Pure Data、SuperCollider、Cmix、ChucK などの音響合成のための開発環境は、クリエイティブ・コーディング?

‣ → おそらくYES !

‣ ただし、今回はより汎用的な開発フレームワークについて言及していきたい

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

OpenGL GLUT FreeImag FreeType

fmod RtAudio QuickTime OpenCV

main.cpp

testApp.h testApp.cpp

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

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

OpenGL GLUT FreeImag FreeType

fmod RtAudio QuickTim OpenCV

main.cpp

testApp.h testApp.cpp

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

!プログラム開発のための

糊 (Glue)

主要な開発フレームワーク

主要な開発フレームワーク‣ どのような開発フレームワークが主流なのか? ‣ 正式な統計資料があるわけではない ‣ 話題になったアートプロジェクトなどから類推

主要な開発フレームワーク‣ Creative Applications 紹介 ‣ コードを用いた様々なプロジェクトを紹介 (2008~)

主要な開発フレームワーク‣ Creative Applicationsでは、掲載したプロジェクトを開発フレークワーク毎にタグ付けしている

‣ その数を集計することで、現在の傾向の参考となる ‣ あくまで、一つの指標として…

主要な開発フレームワーク‣ 開発フレームワークごとの掲載件数 (2014年2月)

開発フレームワーク 件数1 openFrameworks 3042 Processing 3003 Flash 884 Javascript 645 Max/MSP 566 Cinder 547 vvvv 498 Java 169 Quartz Composer 10

10 Unity 811 Three.js 6

‣ 今回対象とするのはこのあたり (オープンソースのもの)

開発フレームワーク 件数1 openFrameworks 3042 Processing 3003 Flash 884 Javascript 645 Max/MSP 566 Cinder 547 vvvv 498 Java 169 Quartz Composer 10

10 Unity 811 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本体に同梱されている

‣ FM合成 : Processing + Minimimport 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. 拡張型

2. 拡張型‣ ofxTonic : C++で実装された音響合成ライブラリTonicを、openFrameworksのAddonとして実装

‣ 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(){ }

2. 拡張型

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

‣ openFrameworks + ofxPd ‣ openFrameworks + ofxSuperColliderServer

3. 内包型‣ ofxPd : Pure DataをopenFrameworksに内包

3. 内包型‣ ofxPdの場合

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

実行時にデータとして読込

3. 内包型‣ ofxSuperColliderServer : SuperColliderをoFに内包

3. 内包型‣ ofxSuperColliderの場合

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

SuperCollider

楽器(Synth)ファイル書出

実行時にデータとして読込

Synthdef

3. 内包型‣ 最終的には一つの実行ファイルに ‣ とりあつかいが楽!!

3. 内包型‣ ofxPdコードサンプル !

‣ Pdパッチ

‣ 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)); } }

3. 内包型

デモ‣ 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

top related