SlideShare ist ein Scribd-Unternehmen logo
1 von 46
Downloaden Sie, um offline zu lesen
Interactive Music II
SuperCollider入門
2013年10月3日
東京藝術大学芸術情報センター(AMC)
田所 淳
Interactive Music II について
Interactive Music II について
‣ Interactive Music I (松村先生) では、Pure Dataを開発言語とし
て、インタラクティブな音楽を創作
‣ Interactive Music II では、この講義を引き継いで、また別の角
度からプログラミング言語を用いた、インタラクティブな音楽
の創作を探求したい
‣ ビジュアルプログラミング言語(Pd, Maxなど)ではなく、一般
的なテキストベースのプログラミング言語による音楽の創作
‣ 今期は、SuperColliderを取り上げたい
Interactive Music II について
‣ この講義、もう1つの目標 :
‣ ライブイベントの開催
‣ 2つのステップを経て、外部で発表へ!
‣ Step 1: ウッドデッキでイベント開催 (11月)
‣ PAはAMCのものを使用(PAの基礎知識も同時に学びたい!)
‣ Step 2: ウッドデッキでイベント開催 (1月)
‣ 会場の選定、広報、機材調達、記録など全員で手分けして
‣ 外部からゲストを呼ぶ方法もアリ
Interactive Music II について
‣ 次週以降、毎回持ってきて欲しいもの
‣ ヘッドホン (or イヤホン)
‣ もし今から買うのであれば、モニター用のもの
SuperCollider Basics
SuperCollider Basics
‣ SuperColliderとは?
SuperCollider Basics
‣ SuperColliderとは?
‣ リアルタイムな音響合成やアルゴリズミック・コンポジション
のためのプログラミング言語
‣ SmallTalkライクなオブジェクト指向言語
‣ リアルタイムに音響を生成できる → ライブコーディング!
SuperCollider Basics
‣ 1996年にJames McCartneyによりリリース
‣ James McCartneyの就職(Apple!)などの事情で、オープソース
として公開
‣ 現在は、GPLライセンスとして多くの開発者により更新されて
いる
SuperCollider Basics
‣ 参考図書:The SuperCollider Book
‣ Wilson, S., Cottle, D. and Collins, N. (eds). 2011. The
SuperCollider Book. Cambridge, MA: MIT Press
SuperCollider Basics
‣ Website: http://supercollider.sourceforge.net/
SuperCollider Basics
‣ SuperColliderをダウンロード
‣ 最新版は、version 3.6.5 (2013年10月現在)
‣ http://supercollider.sourceforge.net/downloads/
The SuperCollider Language
‣ SuperColliderの独特な文法
‣ Smalltalkのオブジェクト指向な言語構造と、C言語系の制御構
造などの機能を足したような感じ
// print "Hello world!"
"Hello world!".postln;
// play a mixture of an 800 Hz sine tone and pink noise
{ SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play;
// modulate a sine frequency and a noise amplitude with another sine
// whose frequency depends on the horizontal mouse pointer position
{
var x = SinOsc.ar(MouseX.kr(1, 100));
SinOsc.ar(300 * x + 800, 0, 0.1)
+
PinkNoise.ar(0.1 * x + 0.1)
}.play;
// list iteration: multiply the elements of a collection by their indices
[1, 2, 5, 10, -3].collect {
arg elem, idx;
elem * idx;
};
// factorial function
f = {
arg x;
if(x == 0) { 1 } { f.(x-1) * x }
};
‣ SuperCollider.app を起動
‣ 最新バージョン3.6は、統合開発環境(IDE)となっている
The SuperCollider Language
‣ 左側のエディターにプログラムを入力
‣ タブで複数のファイルを同時に編集可能
The SuperCollider Language
Editor
‣ 右上には、ヘルプ画面
‣ チュートリアルや、様々なドキュメントが参照可能
‣
The SuperCollider Language
Help
‣ 右下はコンソール
‣ システムの状態、プログラムからの出力などを表示
‣
The SuperCollider Language
Console
‣ とりあえず、 Hello World
‣ SuperCollider.app を起動
‣ エディターに、下記のコードを入力
‣ 文字を全て選択する
‣ Command + Return キーを押す
‣ コンソールに Hello world というメッセージが表示される
"Hello world"
The SuperCollider Language
‣ SuperCollider アプリケーションの構造
The SuperCollider Language
‣ 音を生成するには、まずSC Serverを起動しなくてはならない
‣ メニューから、Language > Boot Server を選択
‣ もしくは「Command + B」キーでもOK
‣ 以下のように表示が変化すれば準備完了
The SuperCollider Language
‣ 音を鳴らしてみる
‣ localhost serverを起動.
‣ 下記のコードを記入して、 Command + enter
‣ 音を止めるには Command + . (period)
‣ コード内の数値を変化させてみる
‣ 何が変化したか?
‣ 12, 600, 100, 0.3
The SuperCollider Language
play({SinOsc.ar(LFNoise0.kr(12, mul: 600, add: 1000), 0.3)})
‣ コードサンプル: Wire 140
‣ 世界中のアーティストからよせられた22曲
‣ 全てのコードは、140文字(Twitter!)以内で書かれている
‣ それにも関わらず、バラエティーに富んだ音楽が楽しめる
‣ http://supercollider.sourceforge.net/sc140/
The SuperCollider Language
01
Nathaniel Virgo
{LocalOut.ar(a=CombN.ar(BPF.ar(LocalIn.ar(2)*7.5+Saw.ar([32,33],0.2),
2**LFNoise0.kr(4/3,4)*300,0.1).distort,2,2,40));a}.play//#supercollider
02
LFSaw
{Splay.ar(Ringz.ar(Impulse.ar([2, 1, 4], [0.1, 0.11, 0.12]), [0.1, 0.1,
0.5])) * EnvGen.kr(Env([1, 1, 0], [120, 10]), doneAction: 2)}.play
03
Tim Walters
play{({|k|({|i|y=SinOsc;y.ar(i*k*k,y.ar(i*k**i/
[4,5])*Decay.kr(Dust.kr(1/4**i),y.ar(0.1)+1*k+i,k*999))}!8).product}!
16).sum}//#supercollider
04
Nathaniel Virgo
b=Buffer.read(s,"sounds/a11wlk01.wav");play{t=Impulse.kr(5);PlayBuf.ar(1,b,
1,t,Demand.kr(t,0,Dseq(1e3*[103,41,162,15,141,52,124,190],4)))!2}
...
‣ Example: Wire 140
The SuperCollider Language
‣ 別のサンプル
‣ 数値を変化させてみよう!
‣ [12, 15]
‣ [3, 8]
‣ 1500
‣ 1600
‣ 0.02
The SuperCollider Language
play({RLPF.ar(Dust.ar([12, 15]), LFNoise1.ar(1/[3, 8], 1500, 1600), 0.02)})
‣ このコードをわかりやすく分解すると下記のようになる
‣
The SuperCollider Language
play({RLPF.ar(Dust.ar([12, 15]), LFNoise1.ar(1/[3, 8], 1500, 1600), 0.02)})
play(
	 {
	 	 RLPF.ar(
	 	 	 Dust.ar(
	 	 	 	 	 	 [12, 15]
	 	 	 	 	 ),
	 	 	 LFNoise1.ar(
	 	 	 	 	 	 1/[3, 8],
	 	 	 	 	 	 1500,
	 	 	 	 	 	 1600
	 	 	 	 	 ),
	 	 	 0.02
	 	 )
	 }
)
‣ たくさんの括弧が存在する
‣ (parentheses)
‣ [brackets]
‣ {braces}
‣ "quotation"
‣ これらの括弧の役割を知ることがSuperCollider理解のコツ
Enclosures
‣ ... - ダブルクォーテイション
‣ 「文字列」をあらわす
‣ ... - シングルクォーテイション
‣ 「シンボル」をあらわす
‣ aSymbol = aSymbol
Enclosures
‣ ( ... ) - 小括弧
‣ 関数の引数(argument)をあらわす
‣ その外、計算の順番を意味する場合も
Enclosures
message(arg1, arg2, arg3…)
5 + (10 * 4)
‣ [ ... ] - 大括弧
‣ アイテムの集合をあらわす - 配列(Array)など
‣ Arrayには様々なデータを格納できる - numbers, texts,
functions, all of patch ...etc.
‣ Arrayにメッセージを与えると、様々な操作が可能
‣ reverse, scramble, mirror, rotate, midicps, choose,
permute ...etc.
Enclosures
‣ [ ... ] - 大括弧
‣ 音楽に応用した例
Enclosures
[0, 11, 10, 1, 9, 8, 2, 3, 7, 4, 6, 5].reverse
12 - [0, 11, 10, 1, 9, 8, 2, 3, 7, 4, 6, 5].reverse
[0, 2, 4, 5, 6, 7, 9, 11].scramble
[60, 62, 64, 67, 69].mirror
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].rotate
[60, 62, 64, 65, 67, 69, 71].midicps.round(0.1)
[1, 0.75, 0.5, 0.25, 0.125].choose
0.125 * [1, 2, 3, 4, 5, 6, 7, 8].choose
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].permute(6)
‣ [ ... ] - 大括弧
‣ 大括弧は、複数のチャンネルを意味することがある
Enclosures
{Blip.ar(25, LFNoise0.kr(5, 12, 14), 0.3)}.play
{Blip.ar(25, LFNoise0.kr([5, 10], 12, 14), 0.3)}.play
{Blip.ar(25, LFNoise0.kr([5, 10, 2, 25], 12, 14), 0.3)}.play
{Blip.ar(25, LFNoise0.kr([5, 4, 7, 9, 5, 1, 9, 2], 12, 14), 0.3)}.play
‣ { ... } - 中括弧
‣ 「関数」をあらわす
‣ 下の2つのコードを比較してみる (dupはくりかえしのこと)
‣ 下の行は、以下の書き方と同じ意味になる
Enclosures
dup(rand(1000.0), 5)
dup({rand(1000.0)}, 5)
[rand(1000.0), rand(1000.0), rand(1000.0),
rand(1000.0), rand(1000.0)]
‣ ネスティングの例 (構造が別の構造を取り囲むこと)
‣ 音響合成におけるネスティング
Nesting
exprand(1.0, 1000.0)
dup({exprand(1.0, 1000.0)}, 100)
sort(dup({exprand(1.0, 1000.0)}, 100))
round(sort(dup({exprand(1.0, 1000.0)}, 100)), 0.01)
play(
	 	 {
	 	 	 CombN.ar(
	 	 	 	 SinOsc.ar(
	 	 	 	 	 midicps(
	 	 	 	 	 	 LFNoise1.ar(3, 24,
	 	 	 	 	 	 	 LFSaw.ar([5, 5.123], 0, 3, 80)
	 	 	 	 	 	 )
	 	 	 	 	 ),
	 	 	 	 	 0, 0.4),
	 	 	 	 1, 0.3, 2)
	 	 }
)
‣ { ... } - 中括弧
‣ 関数はメッセージを理解して動作する
Enclosures
{LFNoise0.ar}.play
{LFNoise0.ar(10000)}.plot
{LFNoise0.ar(10000)}.scope
{100.rand}.dup(10)
{100.rand} ! 10
{100.rand}.dup(10).postln.plot
{100.rand}.dup(100).sort.plot
‣ Supercolliderのコードは、メッセージと引数から構成される
‣ e.g.
‣ メッセージはオブジェクト(レシーバ)とともに用いられること
もある
Messages and Arguments.
message(arg1, arg2, arg3…)
rand(100)
exprand(1.0, 100.0)
SinOsc.ar(arglist)
Mix.fill(arglist)
‣ メッセージの例
Messages and Arguments.
dup("echo", 20)
round([3.141, 5.9265, 358.98], 0.01)
sort([23, 54, 678, 1, 21, 91, 34, 78])
round(dup({exprand(1, 10)}, 100), 0.1)
sort(round(dup({exprand(1, 10)}, 100), 0.1))
Receiver and Message, UGens
‣ レシーバとメッセージ
‣ レシーバ
‣ メッセージを受けとるオブジェクト
‣ 大文字から始まる
‣ メッセージ
‣ オブジェクトに特定の操作を依頼する
‣ 引数をもつ場合もある
Receiver.message(arglist)
Receiver and Message, UGens
‣ Numbers, Functions, Arrays, Stringsなどはレシーバーになる
ことができる
[45, 13, 10, 498, 78].sort
"echo".dup(20)
50.midicps
444.cpsmidi
100.rand
{100.rand}.dup(50)
[1.001, 45.827, 187.18].round(0.1)
"I've just picked up a fault in the AE35 unit".speak
Receiver and Message, UGens
‣ . (ピリオド) を接続していってネスト構造を実現
1000.0
1000.0.rand
1000.0.rand.round(0.01)
1000.0.rand.round(0.01).post
{1000.0.rand.round(0.01).postln}.dup(100).plot
{1000.0.rand.round(0.01).postln}.dup(100).postln.sort.plot
1000.0.rand.round(0.01).postln.asString.speak
Receiver and Message, UGens
‣ 音響合成のためのレシーバ(オブジェクト)が多数存在
‣ これらを総称して UGen (ユニットジェネレータ) と呼ぶ
‣ CombN, SinOsc, LFNoise1, LFSaw ...etc.
‣ Ugenは信号の計算に特化している
‣ これらがソフトウェア楽器を定義する際の基本パーツとなる
‣ Ugenで生成する信号には二つ
‣ オーディオ信号: Ugen.ar(...)
‣ コントロール信号: Ugen.kr(...)
LFNoise1.kr(10,100)
Receiver and Message, UGens
‣ SCのヘルプにはとても丁寧にUGenの解説とサンプルが掲載さ
れている
‣ ヘルプメニューで Tour of Ugens でサーチしてみる
‣ UGenの機能を外観するツアーが用意されている
Variables
‣ 変数:
‣ aからzのアルファベットは宣言なしに使用可能
‣ 上のコードは下と同じ意味になる
‣
(
a = 440;
b = 3;
c = "math operations";
[c, a, b, a*b, a + b, a.pow(b), a.mod(b)]
)
["math operations", 440, 3, 440*3, 440 + 3, 440.pow(3),
440.mod(3)]
Variables
‣ 変数の使用例
‣ this code is same as below.
(
	 {
	 	 r = MouseX.kr(1/3, 10);
	 	 SinOsc.ar(mul: Linen.kr(Impulse.kr(r), 0, 1, 1/r))
	 }.play
)
Variables
‣ もう少し複雑な例
‣ this code is same as below.
(
p = {
	 	 r = Line.kr(1, 20, 60);
	 	 t = Impulse.kr(r);
	 	 e = Linen.kr(t, 0, 0.5, 1/r);
	 	 f = TRand.kr(1, 10, t);
	 	 Blip.ar(f*100, f, e)
	 }.play
)
Variables
‣ さらに複雑な例
‣ this code is same as below.
(
{
	 r = Impulse.kr(10);
	 c = TRand.kr(100, 5000, r);
	 m = TRand.kr(100, 5000, r);
	 PMOsc.ar(c, m, 12)*0.3
}.play
)
(
{
	 var rate = 4, carrier, modRatio;
	 carrier = LFNoise0.kr(rate) * 500 + 700;
	 modRatio = MouseX.kr(1, 2.0);
	 PMOsc.ar(carrier, carrier*modRatio, 12)*0.3
}.play
)
来週につづく!

Weitere ähnliche Inhalte

Was ist angesagt?

メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門Atsushi Tadokoro
 
Pitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONYPitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONYAnaya Medias Swiss
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safeKumazaki Hiroki
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化Gosuke Miyashita
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうTakuya Ueda
 
Unityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレUnityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレTakaaki Ichijo
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門大樹 小倉
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発Takuya Ueda
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8y_taka_23
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLAtsushi Tadokoro
 
Making a Difference by Making Sense - Domains and Social Systems
Making a Difference by Making Sense - Domains and Social SystemsMaking a Difference by Making Sense - Domains and Social Systems
Making a Difference by Making Sense - Domains and Social SystemsTobiasGoeschel
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズムMedia Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズムAtsushi Tadokoro
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門demuyan
 
中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計bitbank, Inc. Tokyo, Japan
 
すぐに分かる!プロジェクト計画の作り方
すぐに分かる!プロジェクト計画の作り方すぐに分かる!プロジェクト計画の作り方
すぐに分かる!プロジェクト計画の作り方Eisuke Sugitani
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersShota TAMURA
 
ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議emasaka
 
Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1Atsushi Tadokoro
 

Was ist angesagt? (20)

メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門メディア・アート II 第1回: ガイダンス openFrameworks入門
メディア・アート II 第1回: ガイダンス openFrameworks入門
 
Pitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONYPitfalls of Object Oriented Programming by SONY
Pitfalls of Object Oriented Programming by SONY
 
冬のLock free祭り safe
冬のLock free祭り safe冬のLock free祭り safe
冬のLock free祭り safe
 
イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化イベント駆動プログラミングとI/O多重化
イベント駆動プログラミングとI/O多重化
 
Go mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろうGo mobileでモバイルアプリを作ろう
Go mobileでモバイルアプリを作ろう
 
Unityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレUnityのサウンド状況を調べまくって分かったアレコレ
Unityのサウンド状況を調べまくって分かったアレコレ
 
Pythonによる黒魔術入門
Pythonによる黒魔術入門Pythonによる黒魔術入門
Pythonによる黒魔術入門
 
GoによるiOSアプリの開発
GoによるiOSアプリの開発GoによるiOSアプリの開発
GoによるiOSアプリの開発
 
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
思ったほど怖くない! Haskell on JVM 超入門 #jjug_ccc #ccc_l8
 
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGLMedia Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
Media Art II 2013 第7回 : openFrameworks 3Dグラフィクス、OpenGL
 
C++ template-primer
C++ template-primerC++ template-primer
C++ template-primer
 
Making a Difference by Making Sense - Domains and Social Systems
Making a Difference by Making Sense - Domains and Social SystemsMaking a Difference by Making Sense - Domains and Social Systems
Making a Difference by Making Sense - Domains and Social Systems
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズムMedia Art II 2013  第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
Media Art II 2013 第4回:openFrameworks アニメーションを極める 動きを生みだす様々なアルゴリズム
 
低レイヤー入門
低レイヤー入門低レイヤー入門
低レイヤー入門
 
中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計中規模Angularアプリケーションの再設計
中規模Angularアプリケーションの再設計
 
すぐに分かる!プロジェクト計画の作り方
すぐに分かる!プロジェクト計画の作り方すぐに分かる!プロジェクト計画の作り方
すぐに分かる!プロジェクト計画の作り方
 
About GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginnersAbout GStreamer 1.0 application development for beginners
About GStreamer 1.0 application development for beginners
 
ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議ibus-skkをなんとかすっぺ会議
ibus-skkをなんとかすっぺ会議
 
Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1Interactive Music II ProcessingとSuperColliderの連携1
Interactive Music II ProcessingとSuperColliderの連携1
 

Andere mochten auch

Raspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作るRaspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作るChikashi Miyama
 
ArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろうArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろうtadfmac
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2Atsushi Tadokoro
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1Atsushi Tadokoro
 
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス Atsushi Tadokoro
 
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollideropenFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperColliderAtsushi Tadokoro
 
Raspberry Piでつくる高音質オーディオ
Raspberry Piでつくる高音質オーディオRaspberry Piでつくる高音質オーディオ
Raspberry Piでつくる高音質オーディオMotoki Nagano
 
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編Toru Miyahara
 
DNN音響モデルにおける特徴量抽出の諸相
DNN音響モデルにおける特徴量抽出の諸相DNN音響モデルにおける特徴量抽出の諸相
DNN音響モデルにおける特徴量抽出の諸相Takuya Yoshioka
 
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめGLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめYoichi Hirata
 
Pythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターRansui Iso
 
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングRansui Iso
 
Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例mitunaga
 
ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例mitunaga
 
Arduino 入門
Arduino 入門Arduino 入門
Arduino 入門mitunaga
 
Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料
Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料
Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料tm_2648
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門minazou67
 
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2Yoshito Tabuchi
 
Introducing libpd -Pdをアプリのサウンドエンジンに-
Introducing libpd -Pdをアプリのサウンドエンジンに-Introducing libpd -Pdをアプリのサウンドエンジンに-
Introducing libpd -Pdをアプリのサウンドエンジンに-Yoichi Hirata
 

Andere mochten auch (20)

Raspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作るRaspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作る
 
ArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろうArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろう
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
 
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
 
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollideropenFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
 
Raspberry Piでつくる高音質オーディオ
Raspberry Piでつくる高音質オーディオRaspberry Piでつくる高音質オーディオ
Raspberry Piでつくる高音質オーディオ
 
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
Raspberry Piでハイレゾ音源を鳴らそう RuneAudio+Pi-DAC+編
 
DNN音響モデルにおける特徴量抽出の諸相
DNN音響モデルにおける特徴量抽出の諸相DNN音響モデルにおける特徴量抽出の諸相
DNN音響モデルにおける特徴量抽出の諸相
 
ESTATUTO DA POLÍCIA MILITAR DE RONDÔNIA
ESTATUTO DA POLÍCIA MILITAR DE RONDÔNIAESTATUTO DA POLÍCIA MILITAR DE RONDÔNIA
ESTATUTO DA POLÍCIA MILITAR DE RONDÔNIA
 
GLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめGLSLによるシェーダーアートことはじめ
GLSLによるシェーダーアートことはじめ
 
Pythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクターPythonで作る俺様サウンドエフェクター
Pythonで作る俺様サウンドエフェクター
 
ソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミングソフトシンセを作りながら学ぶPythonプログラミング
ソフトシンセを作りながら学ぶPythonプログラミング
 
Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例Arduino / ArduBlock の簡単なプログラムと回路の例
Arduino / ArduBlock の簡単なプログラムと回路の例
 
ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例ブレッドボードの使い方と Arduino に簡単な回路をつける例
ブレッドボードの使い方と Arduino に簡単な回路をつける例
 
Arduino 入門
Arduino 入門Arduino 入門
Arduino 入門
 
Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料
Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料
Deep Convolutional Generative Adversarial Networks - Nextremer勉強会資料
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門
 
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
 
Introducing libpd -Pdをアプリのサウンドエンジンに-
Introducing libpd -Pdをアプリのサウンドエンジンに-Introducing libpd -Pdをアプリのサウンドエンジンに-
Introducing libpd -Pdをアプリのサウンドエンジンに-
 

Ähnlich wie Interactive Music II - SuperCollider入門

openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001Teruaki Tsubokura
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようKoichi Sasada
 
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)mametter
 
Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編Hiromu Yakura
 
Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門宏治 高尾
 
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋Tomoaki Shimizu
 
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)Takashi Yoshinaga
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101Nobuaki Oshiro
 
Processing.jsでおうちハック
Processing.jsでおうちハックProcessing.jsでおうちハック
Processing.jsでおうちハックsonycsl
 
Zマイスターとの新たな価値探求 z/OS
Zマイスターとの新たな価値探求 z/OSZマイスターとの新たな価値探求 z/OS
Zマイスターとの新たな価値探求 z/OSIBMソリューション
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 Nobuaki Oshiro
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpMasahito Zembutsu
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Hiroshi Yoshida
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!notargs
 
入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !Nobutada Matsubara
 

Ähnlich wie Interactive Music II - SuperCollider入門 (20)

openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001openFrameworks Workshop in Kanazawa v001
openFrameworks Workshop in Kanazawa v001
 
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 RubyをコンパイルしようCookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
Cookpad 17 day Tech internship 2017 言語処理系入門 Rubyをコンパイルしよう
 
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
Ruby を用いた超絶技巧プログラミング(夏のプログラミングシンポジウム 2012)
 
Ssaw08 0701
Ssaw08 0701Ssaw08 0701
Ssaw08 0701
 
R高速化
R高速化R高速化
R高速化
 
Tokyor23 doradora09
Tokyor23 doradora09Tokyor23 doradora09
Tokyor23 doradora09
 
Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編Arduinoでプログラミングに触れてみよう 続編
Arduinoでプログラミングに触れてみよう 続編
 
Cross Platform Make
Cross Platform MakeCross Platform Make
Cross Platform Make
 
Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門Mac Rubyではじめる!Macアプリ開発入門
Mac Rubyではじめる!Macアプリ開発入門
 
cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋cocos2d-xハンズオン勉強会 in 名古屋
cocos2d-xハンズオン勉強会 in 名古屋
 
STC-OC2019_1st201906
STC-OC2019_1st201906STC-OC2019_1st201906
STC-OC2019_1st201906
 
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
ARコンテンツ作成勉強会:C#ではじめようOpenCV(カラートラッキング編)
 
10分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 110110分で分かるr言語入門ver2.10 14 1101
10分で分かるr言語入門ver2.10 14 1101
 
Processing.jsでおうちハック
Processing.jsでおうちハックProcessing.jsでおうちハック
Processing.jsでおうちハック
 
Zマイスターとの新たな価値探求 z/OS
Zマイスターとの新たな価値探求 z/OSZマイスターとの新たな価値探求 z/OS
Zマイスターとの新たな価値探求 z/OS
 
10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920 10分で分かるr言語入門ver2.9 14 0920
10分で分かるr言語入門ver2.9 14 0920
 
マイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorpマイクロサービス時代の生存戦略 with HashiCorp
マイクロサービス時代の生存戦略 with HashiCorp
 
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
Android上での3D(OpenGL)描画の基礎とNDKによる実践的高速化手法
 
板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!板ポリだけで めちゃカッコいい グラフィックスを出す!
板ポリだけで めちゃカッコいい グラフィックスを出す!
 
入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !入門 超絶技巧プログラミング !
入門 超絶技巧プログラミング !
 

Mehr von Atsushi Tadokoro

「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望Atsushi Tadokoro
 
プログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめようプログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめようAtsushi Tadokoro
 
Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II ProcessingとSuperColliderの連携 -2Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II ProcessingとSuperColliderの連携 -2Atsushi Tadokoro
 
coma Creators session vol.2
coma Creators session vol.2coma Creators session vol.2
coma Creators session vol.2Atsushi Tadokoro
 
Interactive Music II Processingによるアニメーション
Interactive Music II ProcessingによるアニメーションInteractive Music II Processingによるアニメーション
Interactive Music II ProcessingによるアニメーションAtsushi Tadokoro
 
Interactive Music II Processing基本
Interactive Music II Processing基本Interactive Music II Processing基本
Interactive Music II Processing基本Atsushi Tadokoro
 
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携Atsushi Tadokoro
 
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描くiTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描くAtsushi Tadokoro
 
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリメディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリAtsushi Tadokoro
 
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使うAtsushi Tadokoro
 
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得Atsushi Tadokoro
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングAtsushi Tadokoro
 
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画するiTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画するAtsushi Tadokoro
 
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替えMedia Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替えAtsushi Tadokoro
 
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Interactive Music II SuperCollider実習  オリジナルの楽器を作ろう!Interactive Music II SuperCollider実習  オリジナルの楽器を作ろう!
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!Atsushi Tadokoro
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現するAtsushi Tadokoro
 
メディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描くメディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描くAtsushi Tadokoro
 
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得するiTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得するAtsushi Tadokoro
 

Mehr von Atsushi Tadokoro (20)

「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
「クリエイティブ・ミュージック・コーディング」- オーディオ・ビジュアル作品のための、オープンソースなソフトウエア・フレームワークの現状と展望
 
プログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめようプログラム初級講座 - メディア芸術をはじめよう
プログラム初級講座 - メディア芸術をはじめよう
 
Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II ProcessingとSuperColliderの連携 -2Interactive Music II ProcessingとSuperColliderの連携 -2
Interactive Music II ProcessingとSuperColliderの連携 -2
 
coma Creators session vol.2
coma Creators session vol.2coma Creators session vol.2
coma Creators session vol.2
 
Interactive Music II Processingによるアニメーション
Interactive Music II ProcessingによるアニメーションInteractive Music II Processingによるアニメーション
Interactive Music II Processingによるアニメーション
 
Interactive Music II Processing基本
Interactive Music II Processing基本Interactive Music II Processing基本
Interactive Music II Processing基本
 
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
Interactive Music II SuperCollider応用 2 - SuperColliderとPure Dataの連携
 
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描くiTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
iTamabi 13 ARTSAT API 実践 5 - 衛星の軌道を描く
 
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリメディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
メディア芸術基礎 II 第11回:HTML5実践 表現のための様々なJavaScriptライブラリ
 
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う芸術情報演習デザイン(Web)  第8回: CSSフレームワークを使う
芸術情報演習デザイン(Web) 第8回: CSSフレームワークを使う
 
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
iTamabi 13 第9回:ARTSAT API 実践 3 ジオコーディングで衛星の位置を取得
 
Tamabi media131118
Tamabi media131118Tamabi media131118
Tamabi media131118
 
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3DプログラミングWebデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
Webデザイン 第10回:HTML5実践 Three.jsで3Dプログラミング
 
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画するiTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
iTamabi 13 第8回:ARTSAT API 実践 2 衛星アプリを企画する
 
Media Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替えMedia Art II openFrameworks 複数のシーンの管理・切替え
Media Art II openFrameworks 複数のシーンの管理・切替え
 
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
Interactive Music II SuperCollider実習  オリジナルの楽器を作ろう!Interactive Music II SuperCollider実習  オリジナルの楽器を作ろう!
Interactive Music II SuperCollider実習 オリジナルの楽器を作ろう!
 
Geidai music131107
Geidai music131107Geidai music131107
Geidai music131107
 
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現するiTamabi 13  第7回:ARTSAT API 実践 2 衛星の情報で表現する
iTamabi 13 第7回:ARTSAT API 実践 2 衛星の情報で表現する
 
メディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描くメディア芸術基礎 II Canvas + Javascriptで図形を描く
メディア芸術基礎 II Canvas + Javascriptで図形を描く
 
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得するiTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
iTamabi 13  第6回:ARTSAT API 実践 1 Web APIから情報を取得する
 

Kürzlich hochgeladen

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationYukiTerazawa
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024koheioishi1
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptyuitoakatsukijp
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ssusere0a682
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ssusere0a682
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2Tokyo Institute of Technology
 

Kürzlich hochgeladen (6)

TokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentationTokyoTechGraduateExaminationPresentation
TokyoTechGraduateExaminationPresentation
 
The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024The_Five_Books_Overview_Presentation_2024
The_Five_Books_Overview_Presentation_2024
 
UniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScriptUniProject Workshop Make a Discord Bot with JavaScript
UniProject Workshop Make a Discord Bot with JavaScript
 
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習105 -n人囚人のジレンマモデル- #ゲーム理論 #gametheory #数学
 
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
ゲーム理論 BASIC 演習106 -価格の交渉ゲーム-#ゲーム理論 #gametheory #数学
 
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
東京工業大学 環境・社会理工学院 建築学系 大学院入学入試・進学説明会2024_v2
 

Interactive Music II - SuperCollider入門

  • 2. Interactive Music II について
  • 3. Interactive Music II について ‣ Interactive Music I (松村先生) では、Pure Dataを開発言語とし て、インタラクティブな音楽を創作 ‣ Interactive Music II では、この講義を引き継いで、また別の角 度からプログラミング言語を用いた、インタラクティブな音楽 の創作を探求したい ‣ ビジュアルプログラミング言語(Pd, Maxなど)ではなく、一般 的なテキストベースのプログラミング言語による音楽の創作 ‣ 今期は、SuperColliderを取り上げたい
  • 4. Interactive Music II について ‣ この講義、もう1つの目標 : ‣ ライブイベントの開催 ‣ 2つのステップを経て、外部で発表へ! ‣ Step 1: ウッドデッキでイベント開催 (11月) ‣ PAはAMCのものを使用(PAの基礎知識も同時に学びたい!) ‣ Step 2: ウッドデッキでイベント開催 (1月) ‣ 会場の選定、広報、機材調達、記録など全員で手分けして ‣ 外部からゲストを呼ぶ方法もアリ
  • 5. Interactive Music II について ‣ 次週以降、毎回持ってきて欲しいもの ‣ ヘッドホン (or イヤホン) ‣ もし今から買うのであれば、モニター用のもの
  • 8. SuperCollider Basics ‣ SuperColliderとは? ‣ リアルタイムな音響合成やアルゴリズミック・コンポジション のためのプログラミング言語 ‣ SmallTalkライクなオブジェクト指向言語 ‣ リアルタイムに音響を生成できる → ライブコーディング!
  • 9. SuperCollider Basics ‣ 1996年にJames McCartneyによりリリース ‣ James McCartneyの就職(Apple!)などの事情で、オープソース として公開 ‣ 現在は、GPLライセンスとして多くの開発者により更新されて いる
  • 10. SuperCollider Basics ‣ 参考図書:The SuperCollider Book ‣ Wilson, S., Cottle, D. and Collins, N. (eds). 2011. The SuperCollider Book. Cambridge, MA: MIT Press
  • 11. SuperCollider Basics ‣ Website: http://supercollider.sourceforge.net/
  • 12. SuperCollider Basics ‣ SuperColliderをダウンロード ‣ 最新版は、version 3.6.5 (2013年10月現在) ‣ http://supercollider.sourceforge.net/downloads/
  • 13. The SuperCollider Language ‣ SuperColliderの独特な文法 ‣ Smalltalkのオブジェクト指向な言語構造と、C言語系の制御構 造などの機能を足したような感じ // print "Hello world!" "Hello world!".postln; // play a mixture of an 800 Hz sine tone and pink noise { SinOsc.ar(800, 0, 0.1) + PinkNoise.ar(0.01) }.play; // modulate a sine frequency and a noise amplitude with another sine // whose frequency depends on the horizontal mouse pointer position { var x = SinOsc.ar(MouseX.kr(1, 100)); SinOsc.ar(300 * x + 800, 0, 0.1) + PinkNoise.ar(0.1 * x + 0.1) }.play; // list iteration: multiply the elements of a collection by their indices [1, 2, 5, 10, -3].collect { arg elem, idx; elem * idx; }; // factorial function f = { arg x; if(x == 0) { 1 } { f.(x-1) * x } };
  • 14. ‣ SuperCollider.app を起動 ‣ 最新バージョン3.6は、統合開発環境(IDE)となっている The SuperCollider Language
  • 18. ‣ とりあえず、 Hello World ‣ SuperCollider.app を起動 ‣ エディターに、下記のコードを入力 ‣ 文字を全て選択する ‣ Command + Return キーを押す ‣ コンソールに Hello world というメッセージが表示される "Hello world" The SuperCollider Language
  • 20. ‣ 音を生成するには、まずSC Serverを起動しなくてはならない ‣ メニューから、Language > Boot Server を選択 ‣ もしくは「Command + B」キーでもOK ‣ 以下のように表示が変化すれば準備完了 The SuperCollider Language
  • 21. ‣ 音を鳴らしてみる ‣ localhost serverを起動. ‣ 下記のコードを記入して、 Command + enter ‣ 音を止めるには Command + . (period) ‣ コード内の数値を変化させてみる ‣ 何が変化したか? ‣ 12, 600, 100, 0.3 The SuperCollider Language play({SinOsc.ar(LFNoise0.kr(12, mul: 600, add: 1000), 0.3)})
  • 22. ‣ コードサンプル: Wire 140 ‣ 世界中のアーティストからよせられた22曲 ‣ 全てのコードは、140文字(Twitter!)以内で書かれている ‣ それにも関わらず、バラエティーに富んだ音楽が楽しめる ‣ http://supercollider.sourceforge.net/sc140/ The SuperCollider Language
  • 23. 01 Nathaniel Virgo {LocalOut.ar(a=CombN.ar(BPF.ar(LocalIn.ar(2)*7.5+Saw.ar([32,33],0.2), 2**LFNoise0.kr(4/3,4)*300,0.1).distort,2,2,40));a}.play//#supercollider 02 LFSaw {Splay.ar(Ringz.ar(Impulse.ar([2, 1, 4], [0.1, 0.11, 0.12]), [0.1, 0.1, 0.5])) * EnvGen.kr(Env([1, 1, 0], [120, 10]), doneAction: 2)}.play 03 Tim Walters play{({|k|({|i|y=SinOsc;y.ar(i*k*k,y.ar(i*k**i/ [4,5])*Decay.kr(Dust.kr(1/4**i),y.ar(0.1)+1*k+i,k*999))}!8).product}! 16).sum}//#supercollider 04 Nathaniel Virgo b=Buffer.read(s,"sounds/a11wlk01.wav");play{t=Impulse.kr(5);PlayBuf.ar(1,b, 1,t,Demand.kr(t,0,Dseq(1e3*[103,41,162,15,141,52,124,190],4)))!2} ... ‣ Example: Wire 140 The SuperCollider Language
  • 24. ‣ 別のサンプル ‣ 数値を変化させてみよう! ‣ [12, 15] ‣ [3, 8] ‣ 1500 ‣ 1600 ‣ 0.02 The SuperCollider Language play({RLPF.ar(Dust.ar([12, 15]), LFNoise1.ar(1/[3, 8], 1500, 1600), 0.02)})
  • 25. ‣ このコードをわかりやすく分解すると下記のようになる ‣ The SuperCollider Language play({RLPF.ar(Dust.ar([12, 15]), LFNoise1.ar(1/[3, 8], 1500, 1600), 0.02)}) play( { RLPF.ar( Dust.ar( [12, 15] ), LFNoise1.ar( 1/[3, 8], 1500, 1600 ), 0.02 ) } )
  • 26. ‣ たくさんの括弧が存在する ‣ (parentheses) ‣ [brackets] ‣ {braces} ‣ "quotation" ‣ これらの括弧の役割を知ることがSuperCollider理解のコツ Enclosures
  • 27. ‣ ... - ダブルクォーテイション ‣ 「文字列」をあらわす ‣ ... - シングルクォーテイション ‣ 「シンボル」をあらわす ‣ aSymbol = aSymbol Enclosures
  • 28. ‣ ( ... ) - 小括弧 ‣ 関数の引数(argument)をあらわす ‣ その外、計算の順番を意味する場合も Enclosures message(arg1, arg2, arg3…) 5 + (10 * 4)
  • 29. ‣ [ ... ] - 大括弧 ‣ アイテムの集合をあらわす - 配列(Array)など ‣ Arrayには様々なデータを格納できる - numbers, texts, functions, all of patch ...etc. ‣ Arrayにメッセージを与えると、様々な操作が可能 ‣ reverse, scramble, mirror, rotate, midicps, choose, permute ...etc. Enclosures
  • 30. ‣ [ ... ] - 大括弧 ‣ 音楽に応用した例 Enclosures [0, 11, 10, 1, 9, 8, 2, 3, 7, 4, 6, 5].reverse 12 - [0, 11, 10, 1, 9, 8, 2, 3, 7, 4, 6, 5].reverse [0, 2, 4, 5, 6, 7, 9, 11].scramble [60, 62, 64, 67, 69].mirror [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].rotate [60, 62, 64, 65, 67, 69, 71].midicps.round(0.1) [1, 0.75, 0.5, 0.25, 0.125].choose 0.125 * [1, 2, 3, 4, 5, 6, 7, 8].choose [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11].permute(6)
  • 31. ‣ [ ... ] - 大括弧 ‣ 大括弧は、複数のチャンネルを意味することがある Enclosures {Blip.ar(25, LFNoise0.kr(5, 12, 14), 0.3)}.play {Blip.ar(25, LFNoise0.kr([5, 10], 12, 14), 0.3)}.play {Blip.ar(25, LFNoise0.kr([5, 10, 2, 25], 12, 14), 0.3)}.play {Blip.ar(25, LFNoise0.kr([5, 4, 7, 9, 5, 1, 9, 2], 12, 14), 0.3)}.play
  • 32. ‣ { ... } - 中括弧 ‣ 「関数」をあらわす ‣ 下の2つのコードを比較してみる (dupはくりかえしのこと) ‣ 下の行は、以下の書き方と同じ意味になる Enclosures dup(rand(1000.0), 5) dup({rand(1000.0)}, 5) [rand(1000.0), rand(1000.0), rand(1000.0), rand(1000.0), rand(1000.0)]
  • 33. ‣ ネスティングの例 (構造が別の構造を取り囲むこと) ‣ 音響合成におけるネスティング Nesting exprand(1.0, 1000.0) dup({exprand(1.0, 1000.0)}, 100) sort(dup({exprand(1.0, 1000.0)}, 100)) round(sort(dup({exprand(1.0, 1000.0)}, 100)), 0.01) play( { CombN.ar( SinOsc.ar( midicps( LFNoise1.ar(3, 24, LFSaw.ar([5, 5.123], 0, 3, 80) ) ), 0, 0.4), 1, 0.3, 2) } )
  • 34. ‣ { ... } - 中括弧 ‣ 関数はメッセージを理解して動作する Enclosures {LFNoise0.ar}.play {LFNoise0.ar(10000)}.plot {LFNoise0.ar(10000)}.scope {100.rand}.dup(10) {100.rand} ! 10 {100.rand}.dup(10).postln.plot {100.rand}.dup(100).sort.plot
  • 35. ‣ Supercolliderのコードは、メッセージと引数から構成される ‣ e.g. ‣ メッセージはオブジェクト(レシーバ)とともに用いられること もある Messages and Arguments. message(arg1, arg2, arg3…) rand(100) exprand(1.0, 100.0) SinOsc.ar(arglist) Mix.fill(arglist)
  • 36. ‣ メッセージの例 Messages and Arguments. dup("echo", 20) round([3.141, 5.9265, 358.98], 0.01) sort([23, 54, 678, 1, 21, 91, 34, 78]) round(dup({exprand(1, 10)}, 100), 0.1) sort(round(dup({exprand(1, 10)}, 100), 0.1))
  • 37. Receiver and Message, UGens ‣ レシーバとメッセージ ‣ レシーバ ‣ メッセージを受けとるオブジェクト ‣ 大文字から始まる ‣ メッセージ ‣ オブジェクトに特定の操作を依頼する ‣ 引数をもつ場合もある Receiver.message(arglist)
  • 38. Receiver and Message, UGens ‣ Numbers, Functions, Arrays, Stringsなどはレシーバーになる ことができる [45, 13, 10, 498, 78].sort "echo".dup(20) 50.midicps 444.cpsmidi 100.rand {100.rand}.dup(50) [1.001, 45.827, 187.18].round(0.1) "I've just picked up a fault in the AE35 unit".speak
  • 39. Receiver and Message, UGens ‣ . (ピリオド) を接続していってネスト構造を実現 1000.0 1000.0.rand 1000.0.rand.round(0.01) 1000.0.rand.round(0.01).post {1000.0.rand.round(0.01).postln}.dup(100).plot {1000.0.rand.round(0.01).postln}.dup(100).postln.sort.plot 1000.0.rand.round(0.01).postln.asString.speak
  • 40. Receiver and Message, UGens ‣ 音響合成のためのレシーバ(オブジェクト)が多数存在 ‣ これらを総称して UGen (ユニットジェネレータ) と呼ぶ ‣ CombN, SinOsc, LFNoise1, LFSaw ...etc. ‣ Ugenは信号の計算に特化している ‣ これらがソフトウェア楽器を定義する際の基本パーツとなる ‣ Ugenで生成する信号には二つ ‣ オーディオ信号: Ugen.ar(...) ‣ コントロール信号: Ugen.kr(...) LFNoise1.kr(10,100)
  • 41. Receiver and Message, UGens ‣ SCのヘルプにはとても丁寧にUGenの解説とサンプルが掲載さ れている ‣ ヘルプメニューで Tour of Ugens でサーチしてみる ‣ UGenの機能を外観するツアーが用意されている
  • 42. Variables ‣ 変数: ‣ aからzのアルファベットは宣言なしに使用可能 ‣ 上のコードは下と同じ意味になる ‣ ( a = 440; b = 3; c = "math operations"; [c, a, b, a*b, a + b, a.pow(b), a.mod(b)] ) ["math operations", 440, 3, 440*3, 440 + 3, 440.pow(3), 440.mod(3)]
  • 43. Variables ‣ 変数の使用例 ‣ this code is same as below. ( { r = MouseX.kr(1/3, 10); SinOsc.ar(mul: Linen.kr(Impulse.kr(r), 0, 1, 1/r)) }.play )
  • 44. Variables ‣ もう少し複雑な例 ‣ this code is same as below. ( p = { r = Line.kr(1, 20, 60); t = Impulse.kr(r); e = Linen.kr(t, 0, 0.5, 1/r); f = TRand.kr(1, 10, t); Blip.ar(f*100, f, e) }.play )
  • 45. Variables ‣ さらに複雑な例 ‣ this code is same as below. ( { r = Impulse.kr(10); c = TRand.kr(100, 5000, r); m = TRand.kr(100, 5000, r); PMOsc.ar(c, m, 12)*0.3 }.play ) ( { var rate = 4, carrier, modRatio; carrier = LFNoise0.kr(rate) * 500 + 700; modRatio = MouseX.kr(1, 2.0); PMOsc.ar(carrier, carrier*modRatio, 12)*0.3 }.play )