SlideShare a Scribd company logo
1 of 33
Download to read offline
Interactive Music II
SuperCollider入門 4 楽器を定義、変調合成(RM, AM, FM)
2013年10月24日
東京藝術大学芸術情報センター(AMC)
田所 淳
今日の内容
‣ 先週の続き - 楽器を定義する
‣ SynthDef について

!
‣ SuperColliderによる音響合成入門
‣ 変調合成:
‣ RM - リング変調
‣ AM - 振幅変調
‣ FM - 周波数変調
「楽器」を定義する - SynthDef
「楽器」を定義する - SynthDef
‣ これまで使用してきた、{ }.play; という形式
‣ 一時的に、楽器(Synth)を生成し、それをSC Serverに送って出
力していた

!
‣ 例えば、SinOscを使用した際のPost Windowの出力
//! {}.playによる出力
{SinOsc.ar}.play;
!

!

//! Post Windowの表示
Synth("temp__146" : 1000)
!

!
‣ これは、 temp__146 という名前の楽器を生成していた
「楽器」を定義する - SynthDef
‣ SynthDef - 楽器を定義する
‣ SynthDef( 楽器の名前 , { Ugen関数 });

!
‣ 先程の簡単な関数によるプログラムをSynthDef形式へ

!
!
{SinOsc.ar}.play;
!!
// SyntDefに変換
!
SynthDef("sine", {Out.ar(0,
SynthDef("sine", {Out.ar(1,
!
!
// {}.playによる出力

SinOsc.ar)}).play; //left
SinOsc.ar)}).play; //right

‣ SynthDefの最終出力は、必ずOutオブジェクトに渡さなければ
ならない (PdやMax/MSPの「dac 」のようなもの)
‣ Out.ar( バス番号, 出力信号);
「楽器」を定義する - SynthDef
‣ SynthDef、もう少し複雑な例
//関数による記述
{ SinOsc.ar(440, 0, 0.2) }.play;

!

//SynthDefをサーバーに追加
SynthDef.new("test-SinOsc", {
Out.ar(0, SinOsc.ar(440, 0, 0.2))
}).add;

!

//Synthを演奏
Synth("test-SinOsc");
「楽器」を定義する - SynthDef
‣ SynthDef は、引数 (Arguments) を渡せる
//SynthDefの定義(引数あり)
SynthDef.new("test-SinOsc", {
arg freq = 440, amp = 0.2;
Out.ar(0, SinOsc.ar(freq, 0, amp))
}).add;

!

//Synthを演奏
a = Synth("test-SinOsc"); //440Hz
b = Synth("test-SinOsc", [freq:660]); //660Hz
c = Synth("test-SinOsc", [freq:880, amp:0.5]); //880Hz, amp:0.5

!

a.set("freq", 330); //440Hz -> 330Hz
b.set("freq", 220, "amp", 0.3); //660Hz -> 220Hz, amp: 0.3

!

//終了
a.free; b.free; c.free;
SuperColliderによる音響合成
変調合成1- RMとAM
変調合成1- RMとAM
‣ 変調合成 (Modulation synthesis)

!
‣ ある信号のパラメータを、もう1つの信号で変更することで行
う音響合成の手法

!
‣ 変更される信号 → キャリア(Carrier)
‣ 変更する信号 → モジュレーター(Modulator)
変調合成1- RMとAM
‣ キャリアの何を変調するかによって、異なる特性をもった音響
合成が可能

!
‣ 音量を変調: リング変調(RM)、振幅変調(AM)
‣ 周波数を変調: 周波数変調(FM)
変調合成1- RMとAM
‣ RMとAM合成のダイアグラム
freq

amp

freq

Carrier

amp

Modulator

x
変調合成1- RMとAM
‣ AM、RM: モジュレータのオシレータでキャリアの音量を変調
‣ 高速のビブラートとも言えるでしょう。

!
‣ AMとRMの原理はとても良く似ている
‣ その差は、モジュレータの変化の範囲によって決まる

!
‣ AM: モジュレーターの振幅 0.0∼1.0
‣ RM: モジュレーターの振幅 -1.0∼1.0
変調合成1- RMとAM
‣ RMとAMの波形
変調合成1- RMとAM
‣ 参考: PureDataでは
変調合成1- RMとAM
‣ RM合成の例
// RM変調
SynthDef.new("test-rm",{
var car, mod, rm;
mod = SinOsc.ar(880, 0, 1.0);
car = SinOsc.ar([440,442], 0, 0.5);
rm = car * mod;
Out.ar(0, rm);
}).play;

!
!

// RM変調2 - マウスでModulatorの周波数を変更
SynthDef.new("test-rm",{
var car, mod, rm;
mod = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 1.0);
car = SinOsc.ar([440,442], 0, 0.5);
rm = car * mod;
Out.ar(0, rm);
}).play;
変調合成1- RMとAM
‣ RM合成の例 - 2
// RM変調3 - 2つのModulator
SynthDef.new("test-rm",{
var car, mod1, mod2, rm;
car = SinOsc.ar(440, 0, 0.5);
mod1 = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 1.0);
mod2 = SinOsc.ar([6.1,7.9].reciprocal);
rm = car * (mod1 * mod2);
Out.ar(0, rm);
}).play;
変調合成1- RMとAM
‣ 次に同じような合成を、AMで実現してみる
‣ 音はどのように変化するか?
変調合成1- RMとAM
‣ AM合成の例
// AM変調
SynthDef.new("test-am",{
var car, mod, rm;
mod = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 0.5, 0.5);
car = SinOsc.ar([440,442], 0, 0.5);
rm = car * mod;
Out.ar(0, rm);
}).play;

!

SynthDef.new("test-am",{
var car, mod1, mod2, rm;
car = SinOsc.ar(440, 0, 0.5);
mod1 = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 0.5, 0.5);
mod2 = SinOsc.ar([8,7].reciprocal);
rm = car * (mod1 * mod2);
Out.ar(0, rm);
}).play;
変調合成1- RMとAM
‣ AM合成のパラメータをノイズ(LFNoise1)で変化させる
// AM + LFNoise
(
SynthDef.new("rand-am",{
arg freq = 440, amp = 0.5, modFreq = 400;
var car, mod1, mod2, rm;
car = SinOsc.ar(freq, 0, amp);
mod1 = SinOsc.ar(LFNoise1.kr(5.reciprocal, modFreq), pi.rand, 0.5, 0.5);
mod2 = SinOsc.ar(LFNoise1.kr([8,7].reciprocal).abs);
rm = car * (mod1 * mod2);
Out.ar(0, rm);
}).add;
)

!

(
Synth("rand-am",
Synth("rand-am",
Synth("rand-am",
Synth("rand-am",
Synth("rand-am",
)

["freq",
["freq",
["freq",
["freq",
["freq",

110, "amp", 0.2, "modFreq", 1200]);
220, "amp", 0.2, "modFreq", 200]);
440, "amp", "modFreq", 200]);
880, "amp", 0.2, "modFreq", 100]);
1780, "amp", 0.05, "modFreq", 20]);
変調合成1- RMとAM
‣ RMとAMの周波数分布の違い
SuperColliderによる音響合成
変調合成2 - FM
変調合成2 - FM
‣ FM - 周波数の変調
‣ FMを利用した音響合成
‣ ジョン・チョウニングを中心としてスタンフォード大学の
CCRMA(Center for Computer Research in Music and
Acoustics)で1973年開発
‣ その後ヤマハにライセンス
変調合成2 - FM
‣ YAMAHA DX7 (1983)
変調合成2 - FM
‣ FM合成の特徴
‣ たった3つのパラメータで、驚くほど多様なサウンドを実現

!
‣ C - Carrier:キャリア周波数
‣ M - Modulator : モジュレータ周波数
‣ I - Index:モジュレータの振幅
変調合成2 - FM
‣ FM合成のダイアグラム
Mod Index

Mod
Car

+

amp

Car
変調合成2 - FM
‣ 参考: Pd では
変調合成2 - FM
‣ Index の大きさによる周波数成分の変化
変調合成2 - FM
‣ FM基本
//FM基本
SynthDef.new("test-fm",{
arg cfreq = 440, mfreq = 111, index = 200;
var car, mod;
mod = SinOsc.ar(mfreq, 0, index);
car = SinOsc.ar([cfreq, cfreq*1.005] + mod, 0, 0.5);
Out.ar(0, car);
}).play;
変調合成2 - FM
‣ Mod Freq と Index をマウスで操作
//FMマウスで操作
SynthDef.new("test-fm",{
var car, mod;
mod = SinOsc.ar(MouseX.kr(1, 1000, 1), 0,
MouseY.kr(1, 10000, 1));
car = SinOsc.ar([440,442] + mod, 0, 0.5);
Out.ar(0, car);
}).play;
変調合成2 - FM
‣ FM応用1
(
SynthDef("fm1", { arg freq = 440, detune = 2, carPartial = 1,
modPartial = 1, index = 3, mul = 0.2;
var mod, car;
mod = SinOsc.ar(
[freq, freq+detune] * modPartial, 0,
freq * index * LFNoise1.kr(10.reciprocal).abs
);
car = SinOsc.ar((freq * carPartial) + mod, 0, mul);
Out.ar(0, car);
}).add;
)

!

(
Synth("fm1",
Synth("fm1",
Synth("fm1",
Synth("fm1",
)

["modPartial", 2.4]);
["modPartial", 2.401]);
["freq", 110, "modPartial", 3.1213, "index", 10]);
["freq", 220, "modPartial", 10.99, "index", 20]);
変調合成2 - FM
‣ FM応用2 - FM + エフェクト
(
SynthDef("fm2", { arg bus = 0, freq = 440, detune = 2, carPartial = 1,
modPartial = 1, index = 3, mul = 0.1;
var mod, car;
mod = SinOsc.ar(
[freq, freq+detune] * modPartial,
0,
freq * index * LFNoise1.kr(10.reciprocal).abs
);
car = SinOsc.ar((freq * carPartial) + mod, 0, mul);
Out.ar(bus, car);
}).add;
変調合成2 - FM
‣ FM応用2 - FM + エフェクト
SynthDef("preDelay", { arg inbus = 2;
ReplaceOut.ar(
4,
DelayN.ar(In.ar(inbus, 1), 0.048, 0.048)
)
}).add;

!

SynthDef("combs", {
ReplaceOut.ar(
6,
Mix.arFill(7, { CombL.ar(In.ar(4, 1), 0.1, LFNoise1.kr(Rand(0,
0.1), 0.04, 0.05), 15) })
)
}).add;

!

SynthDef("allpass", { arg gain = 0.2;
var source;
source = In.ar(6, 1);
4.do({source = AllpassN.ar(source, 0.050, [Rand(0, 0.05), Rand(0,
0.05)], 1) });
ReplaceOut.ar(8, source * gain)
}).add;
変調合成2 - FM
‣ FM応用2 - FM + エフェクト
SynthDef("theMixer", { arg gain = 1;
ReplaceOut.ar(
0,
Mix.ar([In.ar(2, 1), In.ar(8, 2)]) * gain
)
}).add;
)

!

(
Synth("fm2", ["bus", 2, "freq", 440, "modPartial", 2.4]);
Synth("fm2", ["bus", 2, "freq", 448, "modPartial", 2.401]);
Synth.tail(s, "preDelay");
Synth.tail(s, "combs");
Synth.tail(s, "allpass");
Synth.tail(s, "theMixer", ["gain", 0.64]);
)

More Related Content

What's hot

系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章鍾誠 陳鍾誠
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったかm2ym
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~Nobuhisa Koizumi
 
1.2 функції, градація промислових мереж
1.2 функції, градація промислових мереж1.2 функції, градація промислових мереж
1.2 функції, градація промислових мережПупена Александр
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてNTT DATA Technology & Innovation
 
Thread and method_2010
Thread and method_2010Thread and method_2010
Thread and method_2010敬倫 林
 
PCI Express Verification using Reference Modeling
PCI Express Verification using Reference ModelingPCI Express Verification using Reference Modeling
PCI Express Verification using Reference ModelingDVClub
 
Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Daisuke Ikeda
 
Structured concurrency with Kotlin Coroutines
Structured concurrency with Kotlin CoroutinesStructured concurrency with Kotlin Coroutines
Structured concurrency with Kotlin CoroutinesVadims Savjolovs
 
An investigation about interFoam performance
An investigation about interFoam performanceAn investigation about interFoam performance
An investigation about interFoam performance守淑 田村
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-mmitti
 
12 static timing_analysis_3_clocked_design
12 static timing_analysis_3_clocked_design12 static timing_analysis_3_clocked_design
12 static timing_analysis_3_clocked_designUsha Mehta
 
20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部NVIDIA Japan
 
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロdigitalghost
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料一路 川染
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールMITSUNARI Shigeo
 
Takalab 勉強会#01 - Kali Linux 環境構築
Takalab 勉強会#01 - Kali Linux 環境構築Takalab 勉強会#01 - Kali Linux 環境構築
Takalab 勉強会#01 - Kali Linux 環境構築Tsubasa Umeuchi
 
ClojurianからみたElixir
ClojurianからみたElixirClojurianからみたElixir
ClojurianからみたElixirKent Ohashi
 

What's hot (20)

系統程式 -- 第 11 章
系統程式 -- 第 11 章系統程式 -- 第 11 章
系統程式 -- 第 11 章
 
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
括弧への異常な愛情 または私は如何にして心配するのを止めてCommon Lispを愛するようになったか
 
F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~F#入門 ~関数プログラミングとは何か~
F#入門 ~関数プログラミングとは何か~
 
1.2 функції, градація промислових мереж
1.2 функції, градація промислових мереж1.2 функції, градація промислових мереж
1.2 функції, градація промислових мереж
 
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能についてDeep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
Deep Dive into the Linux Kernel - メモリ管理におけるCompaction機能について
 
Thread and method_2010
Thread and method_2010Thread and method_2010
Thread and method_2010
 
PCI Express Verification using Reference Modeling
PCI Express Verification using Reference ModelingPCI Express Verification using Reference Modeling
PCI Express Verification using Reference Modeling
 
Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)Mobageの技術を体験(MyDNS編)
Mobageの技術を体験(MyDNS編)
 
Ch5 v70 cfc_en
Ch5 v70 cfc_enCh5 v70 cfc_en
Ch5 v70 cfc_en
 
Structured concurrency with Kotlin Coroutines
Structured concurrency with Kotlin CoroutinesStructured concurrency with Kotlin Coroutines
Structured concurrency with Kotlin Coroutines
 
An investigation about interFoam performance
An investigation about interFoam performanceAn investigation about interFoam performance
An investigation about interFoam performance
 
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-Zynqで始めるUSB開発-FPGAとARMで動くUSBオーディオデバイスの実例とともに-
Zynqで始めるUSB開発-FPGAとARMで動く USBオーディオデバイスの実例とともに-
 
12 static timing_analysis_3_clocked_design
12 static timing_analysis_3_clocked_design12 static timing_analysis_3_clocked_design
12 static timing_analysis_3_clocked_design
 
20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部20190625 OpenACC 講習会 第2部
20190625 OpenACC 講習会 第2部
 
Pic18f4550
Pic18f4550Pic18f4550
Pic18f4550
 
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
二分探索法で作る再帰呼び出しできるCプリプロセッサマクロ
 
FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料FPGA+SoC+Linux実践勉強会資料
FPGA+SoC+Linux実践勉強会資料
 
C/C++プログラマのための開発ツール
C/C++プログラマのための開発ツールC/C++プログラマのための開発ツール
C/C++プログラマのための開発ツール
 
Takalab 勉強会#01 - Kali Linux 環境構築
Takalab 勉強会#01 - Kali Linux 環境構築Takalab 勉強会#01 - Kali Linux 環境構築
Takalab 勉強会#01 - Kali Linux 環境構築
 
ClojurianからみたElixir
ClojurianからみたElixirClojurianからみたElixir
ClojurianからみたElixir
 

Viewers also liked

coma Creators session vol.2
coma Creators session vol.2coma Creators session vol.2
coma Creators session vol.2Atsushi Tadokoro
 
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenAtsushi Tadokoro
 
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollideropenFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperColliderAtsushi Tadokoro
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Atsushi Tadokoro
 
Raspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作るRaspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作るChikashi Miyama
 
ArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろうArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろうtadfmac
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門minazou67
 

Viewers also liked (7)

coma Creators session vol.2
coma Creators session vol.2coma Creators session vol.2
coma Creators session vol.2
 
Interactive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGenInteractive Music II SuperCollider入門 2 - 関数とUGen
Interactive Music II SuperCollider入門 2 - 関数とUGen
 
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollideropenFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
openFrameworks、サウンド機能・音響合成、ofxMaxim, ofxOsc, ofxPd, ofxSuperCollider
 
Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門Interactive Music II - SuperCollider入門
Interactive Music II - SuperCollider入門
 
Raspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作るRaspberry PiとPdでオリジナルのシンセを作る
Raspberry PiとPdでオリジナルのシンセを作る
 
ArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろうArduinoでMidiコントローラーを作ろう
ArduinoでMidiコントローラーを作ろう
 
クロスプラットフォーム開発入門
クロスプラットフォーム開発入門クロスプラットフォーム開発入門
クロスプラットフォーム開発入門
 

More from 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
 
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
 
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス 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
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2Atsushi 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
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1Atsushi 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
 

More from 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
 
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の連携
 
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス Media Art II openFrameworks  アプリ間の通信とタンジブルなインターフェイス
Media Art II openFrameworks アプリ間の通信とタンジブルなインターフェイス
 
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フレームワークを使う
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 2
 
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プログラミング
 
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
Interactive Music II SuperCollider応用 JITLib - ライブコーディング 1
 
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 衛星の情報で表現する
 

Recently uploaded

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)Hiroshi Tomioka
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?akihisamiyanaga1
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...博三 太田
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)UEHARA, Tetsutaro
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)Hiroki Ichikura
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfFumieNakayama
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfFumieNakayama
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineerYuki Kikuchi
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案sugiuralab
 

Recently uploaded (9)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
CTO, VPoE, テックリードなどリーダーポジションに登用したくなるのはどんな人材か?
 
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察  ~Text-to-MusicとText-To-ImageかつImage-to-Music...
モーダル間の変換後の一致性とジャンル表を用いた解釈可能性の考察 ~Text-to-MusicとText-To-ImageかつImage-to-Music...
 
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
デジタル・フォレンジックの最新動向(2024年4月27日情洛会総会特別講演スライド)
 
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
【早稲田AI研究会 講義資料】3DスキャンとTextTo3Dのツールを知ろう!(Vol.1)
 
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdfクラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
クラウドネイティブなサーバー仮想化基盤 - OpenShift Virtualization.pdf
 
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdfAWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
AWS の OpenShift サービス (ROSA) を使った OpenShift Virtualizationの始め方.pdf
 
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
自分史上一番早い2024振り返り〜コロナ後、仕事は通常ペースに戻ったか〜 by IoT fullstack engineer
 
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
TataPixel: 畳の異方性を利用した切り替え可能なディスプレイの提案
 

Interactive Music II SuperCollider入門 4 - 楽器を定義、変調合成(RM, AM, FM)

  • 1. Interactive Music II SuperCollider入門 4 楽器を定義、変調合成(RM, AM, FM) 2013年10月24日 東京藝術大学芸術情報センター(AMC) 田所 淳
  • 2. 今日の内容 ‣ 先週の続き - 楽器を定義する ‣ SynthDef について ! ‣ SuperColliderによる音響合成入門 ‣ 変調合成: ‣ RM - リング変調 ‣ AM - 振幅変調 ‣ FM - 周波数変調
  • 4. 「楽器」を定義する - SynthDef ‣ これまで使用してきた、{ }.play; という形式 ‣ 一時的に、楽器(Synth)を生成し、それをSC Serverに送って出 力していた ! ‣ 例えば、SinOscを使用した際のPost Windowの出力 //! {}.playによる出力 {SinOsc.ar}.play; ! ! //! Post Windowの表示 Synth("temp__146" : 1000) ! ! ‣ これは、 temp__146 という名前の楽器を生成していた
  • 5. 「楽器」を定義する - SynthDef ‣ SynthDef - 楽器を定義する ‣ SynthDef( 楽器の名前 , { Ugen関数 }); ! ‣ 先程の簡単な関数によるプログラムをSynthDef形式へ ! ! {SinOsc.ar}.play; !! // SyntDefに変換 ! SynthDef("sine", {Out.ar(0, SynthDef("sine", {Out.ar(1, ! ! // {}.playによる出力 SinOsc.ar)}).play; //left SinOsc.ar)}).play; //right ‣ SynthDefの最終出力は、必ずOutオブジェクトに渡さなければ ならない (PdやMax/MSPの「dac 」のようなもの) ‣ Out.ar( バス番号, 出力信号);
  • 6. 「楽器」を定義する - SynthDef ‣ SynthDef、もう少し複雑な例 //関数による記述 { SinOsc.ar(440, 0, 0.2) }.play; ! //SynthDefをサーバーに追加 SynthDef.new("test-SinOsc", { Out.ar(0, SinOsc.ar(440, 0, 0.2)) }).add; ! //Synthを演奏 Synth("test-SinOsc");
  • 7. 「楽器」を定義する - SynthDef ‣ SynthDef は、引数 (Arguments) を渡せる //SynthDefの定義(引数あり) SynthDef.new("test-SinOsc", { arg freq = 440, amp = 0.2; Out.ar(0, SinOsc.ar(freq, 0, amp)) }).add; ! //Synthを演奏 a = Synth("test-SinOsc"); //440Hz b = Synth("test-SinOsc", [freq:660]); //660Hz c = Synth("test-SinOsc", [freq:880, amp:0.5]); //880Hz, amp:0.5 ! a.set("freq", 330); //440Hz -> 330Hz b.set("freq", 220, "amp", 0.3); //660Hz -> 220Hz, amp: 0.3 ! //終了 a.free; b.free; c.free;
  • 9. 変調合成1- RMとAM ‣ 変調合成 (Modulation synthesis) ! ‣ ある信号のパラメータを、もう1つの信号で変更することで行 う音響合成の手法 ! ‣ 変更される信号 → キャリア(Carrier) ‣ 変更する信号 → モジュレーター(Modulator)
  • 10. 変調合成1- RMとAM ‣ キャリアの何を変調するかによって、異なる特性をもった音響 合成が可能 ! ‣ 音量を変調: リング変調(RM)、振幅変調(AM) ‣ 周波数を変調: 周波数変調(FM)
  • 12. 変調合成1- RMとAM ‣ AM、RM: モジュレータのオシレータでキャリアの音量を変調 ‣ 高速のビブラートとも言えるでしょう。 ! ‣ AMとRMの原理はとても良く似ている ‣ その差は、モジュレータの変化の範囲によって決まる ! ‣ AM: モジュレーターの振幅 0.0∼1.0 ‣ RM: モジュレーターの振幅 -1.0∼1.0
  • 15. 変調合成1- RMとAM ‣ RM合成の例 // RM変調 SynthDef.new("test-rm",{ var car, mod, rm; mod = SinOsc.ar(880, 0, 1.0); car = SinOsc.ar([440,442], 0, 0.5); rm = car * mod; Out.ar(0, rm); }).play; ! ! // RM変調2 - マウスでModulatorの周波数を変更 SynthDef.new("test-rm",{ var car, mod, rm; mod = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 1.0); car = SinOsc.ar([440,442], 0, 0.5); rm = car * mod; Out.ar(0, rm); }).play;
  • 16. 変調合成1- RMとAM ‣ RM合成の例 - 2 // RM変調3 - 2つのModulator SynthDef.new("test-rm",{ var car, mod1, mod2, rm; car = SinOsc.ar(440, 0, 0.5); mod1 = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 1.0); mod2 = SinOsc.ar([6.1,7.9].reciprocal); rm = car * (mod1 * mod2); Out.ar(0, rm); }).play;
  • 18. 変調合成1- RMとAM ‣ AM合成の例 // AM変調 SynthDef.new("test-am",{ var car, mod, rm; mod = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 0.5, 0.5); car = SinOsc.ar([440,442], 0, 0.5); rm = car * mod; Out.ar(0, rm); }).play; ! SynthDef.new("test-am",{ var car, mod1, mod2, rm; car = SinOsc.ar(440, 0, 0.5); mod1 = SinOsc.ar(MouseX.kr(1, 4000, 1), 0, 0.5, 0.5); mod2 = SinOsc.ar([8,7].reciprocal); rm = car * (mod1 * mod2); Out.ar(0, rm); }).play;
  • 19. 変調合成1- RMとAM ‣ AM合成のパラメータをノイズ(LFNoise1)で変化させる // AM + LFNoise ( SynthDef.new("rand-am",{ arg freq = 440, amp = 0.5, modFreq = 400; var car, mod1, mod2, rm; car = SinOsc.ar(freq, 0, amp); mod1 = SinOsc.ar(LFNoise1.kr(5.reciprocal, modFreq), pi.rand, 0.5, 0.5); mod2 = SinOsc.ar(LFNoise1.kr([8,7].reciprocal).abs); rm = car * (mod1 * mod2); Out.ar(0, rm); }).add; ) ! ( Synth("rand-am", Synth("rand-am", Synth("rand-am", Synth("rand-am", Synth("rand-am", ) ["freq", ["freq", ["freq", ["freq", ["freq", 110, "amp", 0.2, "modFreq", 1200]); 220, "amp", 0.2, "modFreq", 200]); 440, "amp", "modFreq", 200]); 880, "amp", 0.2, "modFreq", 100]); 1780, "amp", 0.05, "modFreq", 20]);
  • 22. 変調合成2 - FM ‣ FM - 周波数の変調 ‣ FMを利用した音響合成 ‣ ジョン・チョウニングを中心としてスタンフォード大学の CCRMA(Center for Computer Research in Music and Acoustics)で1973年開発 ‣ その後ヤマハにライセンス
  • 23. 変調合成2 - FM ‣ YAMAHA DX7 (1983)
  • 24. 変調合成2 - FM ‣ FM合成の特徴 ‣ たった3つのパラメータで、驚くほど多様なサウンドを実現 ! ‣ C - Carrier:キャリア周波数 ‣ M - Modulator : モジュレータ周波数 ‣ I - Index:モジュレータの振幅
  • 25. 変調合成2 - FM ‣ FM合成のダイアグラム Mod Index Mod Car + amp Car
  • 26. 変調合成2 - FM ‣ 参考: Pd では
  • 27. 変調合成2 - FM ‣ Index の大きさによる周波数成分の変化
  • 28. 変調合成2 - FM ‣ FM基本 //FM基本 SynthDef.new("test-fm",{ arg cfreq = 440, mfreq = 111, index = 200; var car, mod; mod = SinOsc.ar(mfreq, 0, index); car = SinOsc.ar([cfreq, cfreq*1.005] + mod, 0, 0.5); Out.ar(0, car); }).play;
  • 29. 変調合成2 - FM ‣ Mod Freq と Index をマウスで操作 //FMマウスで操作 SynthDef.new("test-fm",{ var car, mod; mod = SinOsc.ar(MouseX.kr(1, 1000, 1), 0, MouseY.kr(1, 10000, 1)); car = SinOsc.ar([440,442] + mod, 0, 0.5); Out.ar(0, car); }).play;
  • 30. 変調合成2 - FM ‣ FM応用1 ( SynthDef("fm1", { arg freq = 440, detune = 2, carPartial = 1, modPartial = 1, index = 3, mul = 0.2; var mod, car; mod = SinOsc.ar( [freq, freq+detune] * modPartial, 0, freq * index * LFNoise1.kr(10.reciprocal).abs ); car = SinOsc.ar((freq * carPartial) + mod, 0, mul); Out.ar(0, car); }).add; ) ! ( Synth("fm1", Synth("fm1", Synth("fm1", Synth("fm1", ) ["modPartial", 2.4]); ["modPartial", 2.401]); ["freq", 110, "modPartial", 3.1213, "index", 10]); ["freq", 220, "modPartial", 10.99, "index", 20]);
  • 31. 変調合成2 - FM ‣ FM応用2 - FM + エフェクト ( SynthDef("fm2", { arg bus = 0, freq = 440, detune = 2, carPartial = 1, modPartial = 1, index = 3, mul = 0.1; var mod, car; mod = SinOsc.ar( [freq, freq+detune] * modPartial, 0, freq * index * LFNoise1.kr(10.reciprocal).abs ); car = SinOsc.ar((freq * carPartial) + mod, 0, mul); Out.ar(bus, car); }).add;
  • 32. 変調合成2 - FM ‣ FM応用2 - FM + エフェクト SynthDef("preDelay", { arg inbus = 2; ReplaceOut.ar( 4, DelayN.ar(In.ar(inbus, 1), 0.048, 0.048) ) }).add; ! SynthDef("combs", { ReplaceOut.ar( 6, Mix.arFill(7, { CombL.ar(In.ar(4, 1), 0.1, LFNoise1.kr(Rand(0, 0.1), 0.04, 0.05), 15) }) ) }).add; ! SynthDef("allpass", { arg gain = 0.2; var source; source = In.ar(6, 1); 4.do({source = AllpassN.ar(source, 0.050, [Rand(0, 0.05), Rand(0, 0.05)], 1) }); ReplaceOut.ar(8, source * gain) }).add;
  • 33. 変調合成2 - FM ‣ FM応用2 - FM + エフェクト SynthDef("theMixer", { arg gain = 1; ReplaceOut.ar( 0, Mix.ar([In.ar(2, 1), In.ar(8, 2)]) * gain ) }).add; ) ! ( Synth("fm2", ["bus", 2, "freq", 440, "modPartial", 2.4]); Synth("fm2", ["bus", 2, "freq", 448, "modPartial", 2.401]); Synth.tail(s, "preDelay"); Synth.tail(s, "combs"); Synth.tail(s, "allpass"); Synth.tail(s, "theMixer", ["gain", 0.64]); )