SlideShare una empresa de Scribd logo
1 de 16
Descargar para leer sin conexión
SuperCollider Workshop
현재 작업중이며 지속적으로 업데이트 됩니다
SuperCollider3 는 음악작곡, 오디오 신디시스를 위해
1996년 James McCartney에 의해 최초 개발된
프로그래밍 환경(언어+오디오엔진)이다.
Smalltalk 및 Ruby 언어 등에 영향을 받은 강력한 고수준
(high-level) 문법과 소리생성, 제어를 위한 다양한
UGen(UnitGenerator) 들을 제공하여 현재 Max/MSP,
Pd 등과 함께 가장 널리 사용되는 전자음악 도구가 되었다.
초기버젼에는 MacOSX 를 중심으로 개발되었으나(GUI, IDE등이 OSX 전용 개발 프레임워크를 사용), 현재는
다양한 플랫폼에서 동일한 프로그래밍 환경을 제공하는 크로스플랫폼 어플리케이션으로 진화하였다.
현재(2016.7.24) 기준으로 최신 버젼은 3.7.2 로 http://supercollider.github.io 통해 배포된다.
http://sccode.org 에는 유저들의 다양한 예제 코드들이 공유되고 있으며, 여러 프로그래밍 방법론들을
통해 유저마다 각자만의 사용하는 방식들이 존재함을 알 수 있다.
GPL v3 기반의 완전한 오픈소스 프로그램으로, 공식적으로 배포되는 어플리케이션 외에 여러 가지
사용 환경(IDE,언어)들이 존재한다.
SuperCollider Application 의 구조
SuperCollider는 기본적으로 오디오엔진(소리합성)을 담당하는 scsynth(server) 와 그 엔진을 제어하는
sclang(client)으로 구성되어 있으며 서로간에 OSC(OpenSoundControl) 프로토콜을 통해 제어 메시지 및
데이터를 주고 받는다. 최근엔 shared memory interface 를 지원하여 서버와 클라이언트가 같은 머쉰안에
존재한다면 메모리를 통해 컨트롤 값 및 오디오데이터(for Scope) 를 빠르게 주고받을 수 있다.
SCLang
(client)
SCSynth
(server)
OSC
shared memory, if supported it your system
서버와 클라이언트는 1 : 1 관계뿐만 아니라 N : 1, 1 : N, N : N 상황을 지원하여, 다른 프로그램과
연동하여 사용하기에도 매우 유연한 구조로 되어 있다.
sclang
Max/MSP
PureData
scsynth
scsynth
scsynth
서버와 클라이언트는 UDP/TCP 를 지원하기 때문에
동일 머쉰안에 존재하지 않을 수 있다.
Number
기본적인 산술연산
10 + 2 // 12
10 * 4 // 40
10 / 3 // 3.3333333333333
10 / 3.0 // 3.3333333333333
10 + 2 * 4 // 48
//일반적인 프로그래밍 언어과 연산자 우선순위가 다르다. sclang 에서는 열거된 순서대로 연산을 진행하므로
//위와 같이 여러 연산자들이 나올 경우 반드시 괄호를 사용하자!
숫자 객체들을 위한 다양한 메시지들
-10.abs // 10
4.8.floor // 4
4.8.sin // -0.99616460883584
4.8.cos // 0.087498983439446
4.8.tan // -11.384870654243
외에도 많은 메시지(메서드method) 들이 제공되므로 SuperCollider 가 제공하는 help 파일들을
항상 살펴보는 습관을 들이자!
UGens
UGen 이 생성하는 시그널 역시 숫자의 연속이므로 숫자(Number) 객체와
동일한 산술연산, 우선순위 규칙, 메시지를 제공한다.
{SinOsc.ar(440)}.plot {SinOsc.ar(440).abs}.plot
{SinOsc.ar(440)+4}.plot
{SinOsc.ar(440).mod(2)}.plot
{SinOsc.ar(440)*8}.plot
1
-1
5
3
Array
Array 객체에 대한 산술 연산 및 메시지는 각각의 아이템에 적용되어 연산된다.
[ 1, 2, 3, 4, 5 ] + [ 10, 20 ] // -> [ 11, 22, 13, 24, 15 ]
[1,-2, 3,-4] + 2 // -> [ 3, 0, 5, -2 ]
[1,-2, 3,-4].abs // -> [ 1, 2, 3, 4 ]
Array 객체간의 산술 연산은 각각의 아이템의 순서에 의존한다.
Function
일반적인 SCLang 의 표현식을 중괄호로 감싸면 함수객체가 된다.
{ 10 + 20 }; // a Function
f = {|a,b| a + b}; // 함수에 인자를 사용하기.
f.value(10,2); // 함수 호출 문법. 함수객체에 value 메시지를 전달하면 호출된다.
f.(10,7); // 간단히 이렇게 사용도 가능!
SCLang 의 함수객체는 또 다른 함수객체의 인자로 전달 될 수 있다.
(
var add = {|a,b| a + b;};
var minus = {|a,b| a - b;};
var f = {|func| func.(4,5);};
f.(add).postln; // 9
f.(minus).postln // -1
)
물론 함수의 리턴값으로도 사용이 가능하다.
// 누산기 만들기. ~make_accum 은 인자 i 를 받아 a 의 값을 증가시키는 함수객체를
// 리턴하는 함수이다.
~make_accum = {|a| f = {|i| a = a + i;}; f;};
a = ~make_accum.(4);
a.(8);
a.(4);
a.(10);
// 이때 ~make_accum 의 호출결과로 리턴되는 f 는 ~make_accum 의 인자 a 의 값을 캡쳐하게 되는데
// 이처럼 함수가 정의되는 시점의 주변환경을 기억하는 함수를 렉시컬 클로져(lexical closure) 라고 한다.
함수객체에 play 메시지를 전달하면 서버(scsynth) 에서 함수의 리턴값을 실행하게 되는데..
만약 함수객체의 리턴값이 UGen 이라면 소리를 들을 수 있다.
{ SinOsc.ar(440,0,0.2) }.play;
n = {|freq| SinOsc.ar(freq, 0, 0.2)}.play;
n.set(freq,880);
n.set(freq,1820);
n.free;
Coroutine
코루틴이란 일반적으로 진입 지점이 하나이고, 리턴될 장소가 정해져있는 일반함수와는 다르게,
여러 진입 지점(entry point) 를 가지고, 돌아갈 위치를 지정해줄 수 있는 서브루틴의 하나로써,
실행흐름의 제어를 사용자가 직접 통제할 수 있다는 특징을 가진다.
SCLang 에서는 Routine 클래스를 사용하여 코루틴을 구현하였으며, 일반적으로
1) 몇 몇 특수한 상황을 제외하고 blocking 을 허용하지 않는 주 실행분기(main-thread) 밖에서
작업을 수행해야 할 때,
2) TempoClock 등의 clock 오브젝트와 함께 event scheduling 을 수행할 때 사용된다.
(
r = Routine{|x|
var r;
r = (x + 4).yield;
r = (r + 11).yield;
r = (r - 5).yield;
}
)
r.next(10) //
r.next(2) //
r.next(8) //
Routine 객체는 play 메시지를 받으면 yield 된 이후에 정해진 시간(yield메시지를 받은 숫자)
이 지난 후 scheduler(Clock 객체)에 의해 자동으로 재시작 한다.
(
Routine{
"hello ".post;
2.yield;
"world".post;
2.yield;
"!".postln;
}.play;
)
이때 yield 메시지를 받는 숫자는 초(seconds) 가 아닌 beat 로 기본적으로 TempoClock.default 객체의
tempo 에 의존한다.
TempoClock.default.tempo_(4.0); // bpm = 60*4
(
Routine{
"hello ".post;
2.yield;
"world".post;
2.yield;
"!".postln;
}.play;
)
Routine 객체에 보내는 play 메시지의 인자로 사용할 Clock 객체를 지정할 수 있으며, 기본값은
TempoClock.default 객체다.
OSC(OpenSoundControl)
OSC(OpenSoundControl)
음향,멀티미디어 소프트웨어/기기 간 데이터 송수신을 목적으로 만들어진 데이터 인코딩 규격으로
MIDI 에 비해 다양한 데이터포맷(int,float,string,blob) 을 지원한다.
일반적으로 UDP 프로토콜을 통해 메시지를 주고 받으며, SuperCollider 는 TCP 와 UDP 모두 제공하며,
Internal Server 의 경우 SCLang<—> SCSynth 간에 메모리를 통해 내부적으로 메시지를 주고 받는다.
-UDP 의 장단점
속도가 빠르다. 하지만 한 번에 보낼 수 있는 최대 메시지 사이즈가 있으며,
순서가 보장되지 않으며, 전송을 보장하지 않는다.
SCLang 에서 PureData와 OSC 로 메시지를 주고 받기.
- 메시지 보내기
- 메시지 핸들링

Más contenido relacionado

La actualidad más candente

ssc marksheet
ssc marksheetssc marksheet
ssc marksheetifty
 
Grade 12 Marksheet
Grade 12 MarksheetGrade 12 Marksheet
Grade 12 Marksheetbkarki
 
VC - Marti Misterija - 050 - Protokol Levijatan
VC - Marti Misterija - 050 - Protokol LevijatanVC - Marti Misterija - 050 - Protokol Levijatan
VC - Marti Misterija - 050 - Protokol LevijatanStripovizijacom
 
Curso completo de desenho por mozart couto (vol 06 de 06)
Curso completo de desenho por mozart couto (vol 06 de 06)Curso completo de desenho por mozart couto (vol 06 de 06)
Curso completo de desenho por mozart couto (vol 06 de 06)Artes e Encantos
 
الجزرية تحقيق القاسم
الجزرية تحقيق القاسمالجزرية تحقيق القاسم
الجزرية تحقيق القاسمسمير بسيوني
 
Marti misterija lms 040 cas x (markoboss &amp; emeri)(5.4 mb)
Marti misterija lms 040   cas x (markoboss &amp; emeri)(5.4 mb)Marti misterija lms 040   cas x (markoboss &amp; emeri)(5.4 mb)
Marti misterija lms 040 cas x (markoboss &amp; emeri)(5.4 mb)zoran radovic
 
Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...
Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...
Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...mamazin
 
Autocad in urdu | RIghttech Youtube Channel | Autocad Full Book In Urdu
Autocad in urdu | RIghttech Youtube Channel | Autocad Full Book In UrduAutocad in urdu | RIghttech Youtube Channel | Autocad Full Book In Urdu
Autocad in urdu | RIghttech Youtube Channel | Autocad Full Book In UrduRight
 
johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi...
 johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi... johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi...
johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi...trazomt
 
School leaving certificate
School leaving certificateSchool leaving certificate
School leaving certificateAnish Gupta
 
Python Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - A
Python Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - APython Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - A
Python Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - ADemian Antony DMello
 
102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patinete
102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patinete102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patinete
102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patineteRutersdeMallorca
 
FMGE Notes - Anesthesia
FMGE Notes - AnesthesiaFMGE Notes - Anesthesia
FMGE Notes - AnesthesiaEneutron
 
Manual Instruction for LEPIN LEDLIGHT Assembly Square 15019
Manual Instruction for LEPIN LEDLIGHT  Assembly Square 15019Manual Instruction for LEPIN LEDLIGHT  Assembly Square 15019
Manual Instruction for LEPIN LEDLIGHT Assembly Square 15019Wiki Brick
 

La actualidad más candente (20)

ssc marksheet
ssc marksheetssc marksheet
ssc marksheet
 
Grade 12 Marksheet
Grade 12 MarksheetGrade 12 Marksheet
Grade 12 Marksheet
 
CDV - Transcript of Record
CDV - Transcript of RecordCDV - Transcript of Record
CDV - Transcript of Record
 
VC - Marti Misterija - 050 - Protokol Levijatan
VC - Marti Misterija - 050 - Protokol LevijatanVC - Marti Misterija - 050 - Protokol Levijatan
VC - Marti Misterija - 050 - Protokol Levijatan
 
sensor
sensorsensor
sensor
 
Curso completo de desenho por mozart couto (vol 06 de 06)
Curso completo de desenho por mozart couto (vol 06 de 06)Curso completo de desenho por mozart couto (vol 06 de 06)
Curso completo de desenho por mozart couto (vol 06 de 06)
 
الجزرية تحقيق القاسم
الجزرية تحقيق القاسمالجزرية تحقيق القاسم
الجزرية تحقيق القاسم
 
2 MCA
2 MCA2 MCA
2 MCA
 
Marti misterija lms 040 cas x (markoboss &amp; emeri)(5.4 mb)
Marti misterija lms 040   cas x (markoboss &amp; emeri)(5.4 mb)Marti misterija lms 040   cas x (markoboss &amp; emeri)(5.4 mb)
Marti misterija lms 040 cas x (markoboss &amp; emeri)(5.4 mb)
 
Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...
Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...
Инструкция по сборке конструктора Brick арт. 819 "Fort of the island" Series:...
 
Autocad in urdu | RIghttech Youtube Channel | Autocad Full Book In Urdu
Autocad in urdu | RIghttech Youtube Channel | Autocad Full Book In UrduAutocad in urdu | RIghttech Youtube Channel | Autocad Full Book In Urdu
Autocad in urdu | RIghttech Youtube Channel | Autocad Full Book In Urdu
 
Higher Secondary Certificate
Higher Secondary CertificateHigher Secondary Certificate
Higher Secondary Certificate
 
GCE A Level
GCE A LevelGCE A Level
GCE A Level
 
johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi...
 johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi... johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi...
johan-sebastian-bach-371-harmonized-chorales-and-69-chorale-melodies-with-fi...
 
School leaving certificate
School leaving certificateSchool leaving certificate
School leaving certificate
 
Python Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - A
Python Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - APython Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - A
Python Programming ADP VTU CSE 18CS55 Module 3 Chapter 7 - A
 
102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patinete
102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patinete102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patinete
102023007 manual-estaciones-de-servicio-lambretta-125-ld-y-patinete
 
FMGE Notes - Anesthesia
FMGE Notes - AnesthesiaFMGE Notes - Anesthesia
FMGE Notes - Anesthesia
 
Manual Instruction for LEPIN LEDLIGHT Assembly Square 15019
Manual Instruction for LEPIN LEDLIGHT  Assembly Square 15019Manual Instruction for LEPIN LEDLIGHT  Assembly Square 15019
Manual Instruction for LEPIN LEDLIGHT Assembly Square 15019
 
BGMEA certificate
BGMEA certificateBGMEA certificate
BGMEA certificate
 

Destacado

Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Tatsuhiko Miyagawa
 
Resumão do que pode e não pode eleições 2016
Resumão do que pode e não pode eleições 2016Resumão do que pode e não pode eleições 2016
Resumão do que pode e não pode eleições 2016Paulo Paiva
 
YILBAŞI, NEW YEAR 2016
YILBAŞI, NEW YEAR 2016YILBAŞI, NEW YEAR 2016
YILBAŞI, NEW YEAR 2016***
 
Какво е Алфа Груп (The Alfa Group)?
Какво е Алфа Груп (The Alfa Group)?Какво е Алфа Груп (The Alfa Group)?
Какво е Алфа Груп (The Alfa Group)?Iliyan Kirkov
 
Trabajo oxidación
Trabajo oxidaciónTrabajo oxidación
Trabajo oxidaciónalbertocgao1
 
Митна вартість. Як оформити товар за справедливою вартістю?
Митна вартість. Як оформити товар за справедливою вартістю?Митна вартість. Як оформити товар за справедливою вартістю?
Митна вартість. Як оформити товар за справедливою вартістю?Святослав Бартош
 
Plan na rzecz odpowiedzialnego rozwoju prezentacja
Plan na rzecz odpowiedzialnego rozwoju prezentacjaPlan na rzecz odpowiedzialnego rozwoju prezentacja
Plan na rzecz odpowiedzialnego rozwoju prezentacjaGrupa PTWP S.A.
 
Strategies and techniques for negotiations with banks
Strategies and techniques for negotiations with banksStrategies and techniques for negotiations with banks
Strategies and techniques for negotiations with banksVladimir Popov
 
Проект Меморандума Украины с МВФ
Проект Меморандума Украины с МВФПроект Меморандума Украины с МВФ
Проект Меморандума Украины с МВФVYacheslav Sadovnychyi
 
Train le plus haut du mondeconstruit
Train le plus haut du mondeconstruitTrain le plus haut du mondeconstruit
Train le plus haut du mondeconstruitRenée Bukay
 
Konstrukcje geom 1
Konstrukcje geom 1Konstrukcje geom 1
Konstrukcje geom 1Jola Leszcz
 
投信販売データから考えるネット金融マーケティング_20160303
投信販売データから考えるネット金融マーケティング_20160303投信販売データから考えるネット金融マーケティング_20160303
投信販売データから考えるネット金融マーケティング_20160303Satoshi Noguchi
 
Edoradca - fundusze unijne w woj. pomorskim
Edoradca - fundusze unijne w woj. pomorskimEdoradca - fundusze unijne w woj. pomorskim
Edoradca - fundusze unijne w woj. pomorskimMaciej Grzybowski
 
محمدرضا دیانی
محمدرضا دیانیمحمدرضا دیانی
محمدرضا دیانیFailCon Iran
 
괴델(Godel)의 불완전성 정리 증명의 이해.
괴델(Godel)의 불완전성 정리 증명의 이해.괴델(Godel)의 불완전성 정리 증명의 이해.
괴델(Godel)의 불완전성 정리 증명의 이해.Jinseob Kim
 
OpenFest 2013 Open Source Hardware (OSHW) made in Bulgaria
OpenFest 2013 Open Source Hardware (OSHW) made in BulgariaOpenFest 2013 Open Source Hardware (OSHW) made in Bulgaria
OpenFest 2013 Open Source Hardware (OSHW) made in BulgariaOlimex Bulgaria
 

Destacado (20)

Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8Web Scraper Shibuya.pm tech talk #8
Web Scraper Shibuya.pm tech talk #8
 
Resumão do que pode e não pode eleições 2016
Resumão do que pode e não pode eleições 2016Resumão do que pode e não pode eleições 2016
Resumão do que pode e não pode eleições 2016
 
YILBAŞI, NEW YEAR 2016
YILBAŞI, NEW YEAR 2016YILBAŞI, NEW YEAR 2016
YILBAŞI, NEW YEAR 2016
 
Какво е Алфа Груп (The Alfa Group)?
Какво е Алфа Груп (The Alfa Group)?Какво е Алфа Груп (The Alfa Group)?
Какво е Алфа Груп (The Alfa Group)?
 
Ureño
UreñoUreño
Ureño
 
Trabajo oxidación
Trabajo oxidaciónTrabajo oxidación
Trabajo oxidación
 
Referenshantering2016
Referenshantering2016Referenshantering2016
Referenshantering2016
 
Митна вартість. Як оформити товар за справедливою вартістю?
Митна вартість. Як оформити товар за справедливою вартістю?Митна вартість. Як оформити товар за справедливою вартістю?
Митна вартість. Як оформити товар за справедливою вартістю?
 
Plan na rzecz odpowiedzialnego rozwoju prezentacja
Plan na rzecz odpowiedzialnego rozwoju prezentacjaPlan na rzecz odpowiedzialnego rozwoju prezentacja
Plan na rzecz odpowiedzialnego rozwoju prezentacja
 
Strategies and techniques for negotiations with banks
Strategies and techniques for negotiations with banksStrategies and techniques for negotiations with banks
Strategies and techniques for negotiations with banks
 
Проект Меморандума Украины с МВФ
Проект Меморандума Украины с МВФПроект Меморандума Украины с МВФ
Проект Меморандума Украины с МВФ
 
Portfolio
PortfolioPortfolio
Portfolio
 
Train le plus haut du mondeconstruit
Train le plus haut du mondeconstruitTrain le plus haut du mondeconstruit
Train le plus haut du mondeconstruit
 
Konstrukcje geom 1
Konstrukcje geom 1Konstrukcje geom 1
Konstrukcje geom 1
 
投信販売データから考えるネット金融マーケティング_20160303
投信販売データから考えるネット金融マーケティング_20160303投信販売データから考えるネット金融マーケティング_20160303
投信販売データから考えるネット金融マーケティング_20160303
 
Edoradca - fundusze unijne w woj. pomorskim
Edoradca - fundusze unijne w woj. pomorskimEdoradca - fundusze unijne w woj. pomorskim
Edoradca - fundusze unijne w woj. pomorskim
 
Imperia reklami Kiev
Imperia reklami KievImperia reklami Kiev
Imperia reklami Kiev
 
محمدرضا دیانی
محمدرضا دیانیمحمدرضا دیانی
محمدرضا دیانی
 
괴델(Godel)의 불완전성 정리 증명의 이해.
괴델(Godel)의 불완전성 정리 증명의 이해.괴델(Godel)의 불완전성 정리 증명의 이해.
괴델(Godel)의 불완전성 정리 증명의 이해.
 
OpenFest 2013 Open Source Hardware (OSHW) made in Bulgaria
OpenFest 2013 Open Source Hardware (OSHW) made in BulgariaOpenFest 2013 Open Source Hardware (OSHW) made in Bulgaria
OpenFest 2013 Open Source Hardware (OSHW) made in Bulgaria
 

Similar a 수퍼콜라이더 워크샵 자료

이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스Seunghwa Song
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)Ubuntu Korea Community
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기흥배 최
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1Jinkyoung Kim
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리Seungyong Lee
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 releaseJaehyeuk Oh
 
Net debugging 3_전한별
Net debugging 3_전한별Net debugging 3_전한별
Net debugging 3_전한별Han-Byul Jeon
 
오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개SungTae Moon
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoMario Cho
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개Dong Jun Kwon
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍준혁 이
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기jongho jeong
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇Seungyong Lee
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509영석 조
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성NAVER D2
 

Similar a 수퍼콜라이더 워크샵 자료 (20)

이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
이기종 멀티코어 프로세서를 위한 프로그래밍 언어 및 영상처리 오픈소스
 
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
김성윤 - 우분투로 슈퍼컴 만들기 (2011Y03M26D)
 
Gcd ppt
Gcd pptGcd ppt
Gcd ppt
 
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
KGC 2016 오픈소스 네트워크 엔진 Super socket 사용하기
 
Assembly 스터디 1
Assembly 스터디 1Assembly 스터디 1
Assembly 스터디 1
 
리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리리눅스 커널 기초 태스크관리
리눅스 커널 기초 태스크관리
 
I phone 2 release
I phone 2 releaseI phone 2 release
I phone 2 release
 
Net debugging 3_전한별
Net debugging 3_전한별Net debugging 3_전한별
Net debugging 3_전한별
 
오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개오픈소스 기반 비행제어컴퓨터 PX4 소개
오픈소스 기반 비행제어컴퓨터 PX4 소개
 
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario ChoLinux Kernel Boot Process , SOSCON 2015, By Mario Cho
Linux Kernel Boot Process , SOSCON 2015, By Mario Cho
 
Storm 훑어보기
Storm 훑어보기Storm 훑어보기
Storm 훑어보기
 
JDK 변천사
JDK 변천사JDK 변천사
JDK 변천사
 
Angular2 가기전 Type script소개
 Angular2 가기전 Type script소개 Angular2 가기전 Type script소개
Angular2 가기전 Type script소개
 
병렬 프로그래밍
병렬 프로그래밍병렬 프로그래밍
병렬 프로그래밍
 
Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기Javascript 조금 더 잘 알기
Javascript 조금 더 잘 알기
 
Nodejs_chapter3
Nodejs_chapter3Nodejs_chapter3
Nodejs_chapter3
 
04 프로세스
04 프로세스04 프로세스
04 프로세스
 
윈도우 커널 익스플로잇
윈도우 커널 익스플로잇윈도우 커널 익스플로잇
윈도우 커널 익스플로잇
 
Sonarqube 20160509
Sonarqube 20160509Sonarqube 20160509
Sonarqube 20160509
 
[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성[2D4]Python에서의 동시성_병렬성
[2D4]Python에서의 동시성_병렬성
 

수퍼콜라이더 워크샵 자료

  • 1. SuperCollider Workshop 현재 작업중이며 지속적으로 업데이트 됩니다
  • 2. SuperCollider3 는 음악작곡, 오디오 신디시스를 위해 1996년 James McCartney에 의해 최초 개발된 프로그래밍 환경(언어+오디오엔진)이다. Smalltalk 및 Ruby 언어 등에 영향을 받은 강력한 고수준 (high-level) 문법과 소리생성, 제어를 위한 다양한 UGen(UnitGenerator) 들을 제공하여 현재 Max/MSP, Pd 등과 함께 가장 널리 사용되는 전자음악 도구가 되었다. 초기버젼에는 MacOSX 를 중심으로 개발되었으나(GUI, IDE등이 OSX 전용 개발 프레임워크를 사용), 현재는 다양한 플랫폼에서 동일한 프로그래밍 환경을 제공하는 크로스플랫폼 어플리케이션으로 진화하였다. 현재(2016.7.24) 기준으로 최신 버젼은 3.7.2 로 http://supercollider.github.io 통해 배포된다. http://sccode.org 에는 유저들의 다양한 예제 코드들이 공유되고 있으며, 여러 프로그래밍 방법론들을 통해 유저마다 각자만의 사용하는 방식들이 존재함을 알 수 있다. GPL v3 기반의 완전한 오픈소스 프로그램으로, 공식적으로 배포되는 어플리케이션 외에 여러 가지 사용 환경(IDE,언어)들이 존재한다.
  • 3. SuperCollider Application 의 구조 SuperCollider는 기본적으로 오디오엔진(소리합성)을 담당하는 scsynth(server) 와 그 엔진을 제어하는 sclang(client)으로 구성되어 있으며 서로간에 OSC(OpenSoundControl) 프로토콜을 통해 제어 메시지 및 데이터를 주고 받는다. 최근엔 shared memory interface 를 지원하여 서버와 클라이언트가 같은 머쉰안에 존재한다면 메모리를 통해 컨트롤 값 및 오디오데이터(for Scope) 를 빠르게 주고받을 수 있다. SCLang (client) SCSynth (server) OSC shared memory, if supported it your system 서버와 클라이언트는 1 : 1 관계뿐만 아니라 N : 1, 1 : N, N : N 상황을 지원하여, 다른 프로그램과 연동하여 사용하기에도 매우 유연한 구조로 되어 있다. sclang Max/MSP PureData scsynth scsynth scsynth 서버와 클라이언트는 UDP/TCP 를 지원하기 때문에 동일 머쉰안에 존재하지 않을 수 있다.
  • 5. 기본적인 산술연산 10 + 2 // 12 10 * 4 // 40 10 / 3 // 3.3333333333333 10 / 3.0 // 3.3333333333333 10 + 2 * 4 // 48 //일반적인 프로그래밍 언어과 연산자 우선순위가 다르다. sclang 에서는 열거된 순서대로 연산을 진행하므로 //위와 같이 여러 연산자들이 나올 경우 반드시 괄호를 사용하자! 숫자 객체들을 위한 다양한 메시지들 -10.abs // 10 4.8.floor // 4 4.8.sin // -0.99616460883584 4.8.cos // 0.087498983439446 4.8.tan // -11.384870654243 외에도 많은 메시지(메서드method) 들이 제공되므로 SuperCollider 가 제공하는 help 파일들을 항상 살펴보는 습관을 들이자!
  • 7. UGen 이 생성하는 시그널 역시 숫자의 연속이므로 숫자(Number) 객체와 동일한 산술연산, 우선순위 규칙, 메시지를 제공한다. {SinOsc.ar(440)}.plot {SinOsc.ar(440).abs}.plot {SinOsc.ar(440)+4}.plot {SinOsc.ar(440).mod(2)}.plot {SinOsc.ar(440)*8}.plot 1 -1 5 3
  • 9. Array 객체에 대한 산술 연산 및 메시지는 각각의 아이템에 적용되어 연산된다. [ 1, 2, 3, 4, 5 ] + [ 10, 20 ] // -> [ 11, 22, 13, 24, 15 ] [1,-2, 3,-4] + 2 // -> [ 3, 0, 5, -2 ] [1,-2, 3,-4].abs // -> [ 1, 2, 3, 4 ] Array 객체간의 산술 연산은 각각의 아이템의 순서에 의존한다.
  • 11. 일반적인 SCLang 의 표현식을 중괄호로 감싸면 함수객체가 된다. { 10 + 20 }; // a Function f = {|a,b| a + b}; // 함수에 인자를 사용하기. f.value(10,2); // 함수 호출 문법. 함수객체에 value 메시지를 전달하면 호출된다. f.(10,7); // 간단히 이렇게 사용도 가능! SCLang 의 함수객체는 또 다른 함수객체의 인자로 전달 될 수 있다. ( var add = {|a,b| a + b;}; var minus = {|a,b| a - b;}; var f = {|func| func.(4,5);}; f.(add).postln; // 9 f.(minus).postln // -1 )
  • 12. 물론 함수의 리턴값으로도 사용이 가능하다. // 누산기 만들기. ~make_accum 은 인자 i 를 받아 a 의 값을 증가시키는 함수객체를 // 리턴하는 함수이다. ~make_accum = {|a| f = {|i| a = a + i;}; f;}; a = ~make_accum.(4); a.(8); a.(4); a.(10); // 이때 ~make_accum 의 호출결과로 리턴되는 f 는 ~make_accum 의 인자 a 의 값을 캡쳐하게 되는데 // 이처럼 함수가 정의되는 시점의 주변환경을 기억하는 함수를 렉시컬 클로져(lexical closure) 라고 한다. 함수객체에 play 메시지를 전달하면 서버(scsynth) 에서 함수의 리턴값을 실행하게 되는데.. 만약 함수객체의 리턴값이 UGen 이라면 소리를 들을 수 있다. { SinOsc.ar(440,0,0.2) }.play; n = {|freq| SinOsc.ar(freq, 0, 0.2)}.play; n.set(freq,880); n.set(freq,1820); n.free;
  • 13. Coroutine 코루틴이란 일반적으로 진입 지점이 하나이고, 리턴될 장소가 정해져있는 일반함수와는 다르게, 여러 진입 지점(entry point) 를 가지고, 돌아갈 위치를 지정해줄 수 있는 서브루틴의 하나로써, 실행흐름의 제어를 사용자가 직접 통제할 수 있다는 특징을 가진다. SCLang 에서는 Routine 클래스를 사용하여 코루틴을 구현하였으며, 일반적으로 1) 몇 몇 특수한 상황을 제외하고 blocking 을 허용하지 않는 주 실행분기(main-thread) 밖에서 작업을 수행해야 할 때, 2) TempoClock 등의 clock 오브젝트와 함께 event scheduling 을 수행할 때 사용된다. ( r = Routine{|x| var r; r = (x + 4).yield; r = (r + 11).yield; r = (r - 5).yield; } ) r.next(10) // r.next(2) // r.next(8) //
  • 14. Routine 객체는 play 메시지를 받으면 yield 된 이후에 정해진 시간(yield메시지를 받은 숫자) 이 지난 후 scheduler(Clock 객체)에 의해 자동으로 재시작 한다. ( Routine{ "hello ".post; 2.yield; "world".post; 2.yield; "!".postln; }.play; ) 이때 yield 메시지를 받는 숫자는 초(seconds) 가 아닌 beat 로 기본적으로 TempoClock.default 객체의 tempo 에 의존한다. TempoClock.default.tempo_(4.0); // bpm = 60*4 ( Routine{ "hello ".post; 2.yield; "world".post; 2.yield; "!".postln; }.play; ) Routine 객체에 보내는 play 메시지의 인자로 사용할 Clock 객체를 지정할 수 있으며, 기본값은 TempoClock.default 객체다.
  • 16. OSC(OpenSoundControl) 음향,멀티미디어 소프트웨어/기기 간 데이터 송수신을 목적으로 만들어진 데이터 인코딩 규격으로 MIDI 에 비해 다양한 데이터포맷(int,float,string,blob) 을 지원한다. 일반적으로 UDP 프로토콜을 통해 메시지를 주고 받으며, SuperCollider 는 TCP 와 UDP 모두 제공하며, Internal Server 의 경우 SCLang<—> SCSynth 간에 메모리를 통해 내부적으로 메시지를 주고 받는다. -UDP 의 장단점 속도가 빠르다. 하지만 한 번에 보낼 수 있는 최대 메시지 사이즈가 있으며, 순서가 보장되지 않으며, 전송을 보장하지 않는다. SCLang 에서 PureData와 OSC 로 메시지를 주고 받기. - 메시지 보내기 - 메시지 핸들링