SuperCollider Workshop

슈콜

예술인 복지재단 주관 “예술인 파견지원 사업”의 일환으로 SuperCollider Workshop 이 탈영역 우정국에서 진행됩니다.
워크샵 참가 신청 : https://goo.gl/forms/fwpvb1gVIgKlzPA13

워크샵소개

전자음악 작곡, 사운드 프로그래밍에 가장 널리 사용되는 텍스트 기반 프로그래밍 환경인 SuperCollider 워크샵을 2016년 8월 3일부터 총 12회, 매주 수요일 19시에 탈영역 우정국에서 개최합니다.
텍스트기반 코딩이란 부분이 프로그래밍에 익숙하지 않는 분들에게 낯설고 어렵게 느껴질 수도 있겠지만, 조금만 사용해보신다면 가장 강력하고 유연한 프로그래밍 인터페이스는 텍스트라는 것을 이해하시게 될 것입니다. 이번 워크샵에서는 SuperCollider 의 두 축인 SCLang 과 SCSynth 에 대해 문법부터 활용까지 바닥부터 차근차근 쌓아올려 최종적으로 참가자들이 자유롭고 실용적으로 사용할 수 있도록 만드는 것을 목표로 합니다.
워크샵 자료 공유 http://www.slideshare.net/SungminPark14/ss-64315036 – 워크샵 진행 중 & 이후에도 지속적으로 업데이트 됩니다.

 

강사소개

박성민은 전자음악을 전공했다.
2015 WeSA(WeAreSoundArtist)에 선정되어 공연하였고, 전자음악+엠비언트 공연 Ambient M.O.O.O 의 정규크루이며와트엠(WatMM) 및 하울링라이브등에서 공연하였다.
라이브코딩등의 컴퓨터 프로그래밍을 활용한 예술작법을 연구하고 있으며, 전통음악, 불교무용을 현대적 사운드로 표현하고 있는 사(社) 프로젝트의 멤버이기도 하다.

대상

1. 선착순 10명
2. 전자음악 작곡, 사운드/미디어 아트에 관심있는 분들이라면 누구나.
3. 워크샵의 효율과 성과를 위해 본인 노트북을 반드시 지참해야 합니다.

수강료

30만원 (예술인  할인 10% / 27만원)

신청하기
https://goo.gl/forms/fwpvb1gVIgKlzPA13

Workshop Schedule

1주차
SuperCollider 언어 소개 및 기본적인 구조, sclang의 문법등을 설명한다.

1. Server and Client
1) 비슷한 용도의 다른 인기 툴(Max/MSP, Pd..) 과 비교하여 장단점을 소개하며 특히 SuperCollider 의 서버/클라이언트 구조에 대해 알아본다.
2) SuperCollider IDE 사용법을 알아보자.
2. Message Passing
1) Number 객체와 그것을 위한 다양한 메시지들을 알아보며,
2) 위에서 소개한 메시지를 UGen 객체들에게도 적용시켜보고,
3) Number 와 UGen 들로 구성된 Array 객체에도 메시지를전달해보자. sclang 의 매우 특징적인 Array 연산 규칙을 알아본다.
3. Synth Definition
1) UGen 들의 조합으로 본인만의 간단한 신디사이져를 구현해보자. SinOsc, Saw, Pulse, Triangle 등의 클래식한 파형을 재생하는 오실레이터 UGen 들을 살펴보고
2) Line 객체와 함께 사용해 엔벨로프를 만들어보고 synth 노드들의 lifecycle 을 관리해보자.

2주차

1. Function
수퍼콜라이더의 함수는
1) First Class Object 이며,
2) Lexical Closure 이고,
3) Coroutine 일 수 있으며,
4) Synth 노드로 활용 될 수 있다.

2. Clock
여러종류의 Clock 들과 용도 및 사용법
1) TempoClock
+ 가장 보편적이고, 사용이 편리한 SuperCollider 의 기본 시계.
2) SystemClock
3) AppClock
+ 타이밍에 민감하지 않으며, immediate 하지 않은 명령들을 수행할때 (주로 GUI 요소들을 제어하는 용도) 사용된다.

3. Scheduling
1) 코루틴(Rotutine) 과 Clock 을 활용한 이벤트 스케쥴링
+ Rotuine과 Task 오브젝트를 중심으로
2) 1주차때 만들어본 synth 들을 가지고 간단한 멜로디등을 만들고 조합해보자.

3주차

1. sclang 의 자료구조 및 Functional 인터페이스 sclang 에서 제공해주는 다양한 자료구조들과 그 자료구조들을 사용하는 방법을 알아보며 서로 다른 자료구조를 위한 제네릭한 도구들에 대해 알아보자.
1) Array, LinkedList, Dictionary, Set 등 다양한 Collection들의 각각의 특징들의 용도를 파악하며,
2) map, reduce, filter 등 sclang 에서 제공해주는 전통적인함수형 언어의 기법들을 사용해보자.

2. Pattern 오브젝트
1) Pseq, Prand, Pseries 등의 패턴을 만들어내는 도구들을 살펴본 후 Scheduling 을 통한 본인만의 Phrase 를생성해 보자.
3. Pbind 를 이용한 스케쥴링

4주차

1. UGen 심화 과정
SuperCollider 는 정말 다양하고 많은 UGen 들을 제공한다.그 중 활용도가 넓고 다양한 쓰임새가 있거나, 매우 개성있는 소리를 생성해주는 UGen 들을 중심으로 연구해보자
1) EnvGen 을 이용한 엔벨로프, 스텝시퀀싱 SuperCollider 의 EnvGen 의 특성과 다양한 활용법을알아보자.
2) LPF, HPF, BPF, RLPF 등 다양한 필터 UGen 들을 살펴보고 소리의 특성들을 파악해보자.
3) Modulation
RM, AM, FM, PM 등 다양한 모듈레이션 신디시스를활용해 보자.
4) LocalOut, LocalIn UGen을 이용하여 feedback 을 사용해보자.
5) PV-* 을 이용한 FFT
다양하게 제공되는 FFT 를 이용한 UGen 들을 살펴보고, 최종적으로 pvcollect 를 이용하여본인만의 개성있는 스펙트럼을 만들어보자
6) 그외 UGen 들

5주차

1. Buffer
버퍼는 서버(scsynth)상에서 사용자의 데이터를 담을 수 있는 가장 큰 유저-메모리 공간이다.
버퍼에는 각 종 음악데이터(스코어데이터), 오디오데이터,웨이브 테이블등이 담겨질 수 있다.
1) Musical Data(chord,note,beat…) 를 Buffer에 담아 활용하기 버퍼는 서버,클라이언트 양 쪽에서 모두 접근할 수 있는 인터페이스를 제공한다.
여기서는 sclang 에서 버퍼의 값을 쓰고, scsynth 에서 읽어서 사용하는 방법을 연구해본다.
2) Custom Wavetable 만들기
자신만의 웨이트테이블을 생성 후 Phasor, Osc, OscN 등을 통해 재생해보자.
3) PlayBuf, BufRd 를 이용한 오디오 샘플 활용하기
-digging, stutter, drop down 등 다양항 효과를 사용하여 자신만의 beat 를 만들어보자
4) TGrains 및 복수개의 BufRd 를 통해 Granular 신디시스를 구현해보고, 풍부하고 우아한 소리부터 복잡하고 기괴한 소리들 까지 그 가능성을 알아보자.

6주차

1. NodeTree
1) Synth 와 Group
Server(scsynth) 상에서 연산을 수행하는 각각의 Node 들은 Synth 및 Group 으로 분류되며, 트리 형태를 구성하게 된다.
2) Node Position & Signal Routing
각 Synth 들이 생성, 변환하는 Audio/Control 신호들은 Bus 를 통해 각 노드들로 전달되며 노드들의 위치에 따라 신호를 전달 받는 순서가 정해진다. 그리고 노드들은 실시간으로 자신의 위치를
변경 할 수 있다.

2. AfterEffect
각 노드에서 생성된 신호는 하위 노드에서 re-sampling 되거나 각 종 효과들이 더해지는 등, 재활용되어 질 수 있다.
1) RecordBuf, BufWr
2) Comb,Allpass,Delay UGens
3) Reverbration

7주차

1. On-The-Fly-Programming
라이브코딩을 위해 제공되는 Ndef,Pdef,Tdef 삼형제를 알아보자
function.play -> Ndef, Pbind -> Pdef, Task -> Tdef 로 변환하여 자연스럽게 패턴과 사운드를 전개해 나가는 방법을 연구해보자.
2. TR(Trigger Rate) UGen 이용한 Server-side 시퀀싱
TChoose, TRand, EnvGen 등 트리거 신호를 받으면 재연산을 수행하는 UGen 들과 Global Trigger 및 Demand, Select 등 서버 상에서 데이터를 관리할 수 있는 UGen 들을 조합하여 Server 중심의 패턴 재생, 제어를 수행해보자.
3. Server-side VS Client-side sequencing
Task,Routine 등의 Client 중심의 시퀀스 생성과 trigger 를 이용한 Server 중심의 시퀀스를 생성하는 두 어프로치를 살펴보며 각각의 장단점을 파악하고 본인과 작품에 맞는 방식을 찾아보자.

8주차

1. OSC(OpenSoundControl)
1) OSC 프로토콜에 대한 일반적 개요와 sclang 의 주요 명령어들의raw OSC message 들을 알아본다.
2) OSC message 와 bundle 의 차이와 bundle 의 timetag 를이용하여 좀 더 정교한 타이밍을 유지하는 방법을 알아보자.
3) SuperCollider 안에서만 사용 가능한 비표준 기능들
4) sclang <-> scsynth 간의 상호작용
+ OSCFunc, OSCdef 를 사용하여 sclang 으로 수신되는메시지에 대한 핸들러를 작성하는 방법.
+ SendReply, SendTrig 를 사용하여 scsynth 에서 Client 로응답을 보내는 방법.
5) PureData,Max/MSP, Processing, OpenFrameworks 등의 상호보완적인 도구들과 통신하는 방법을 함께 고민해보자.

2. MIDI(Musical Instrument Digital Interface)
1) MIDIFunc, MIDIdef 를 이용하여 입력되어지는 미디신호에 대한 핸들러를 작성하는 방법.
+ 마스터건반, 컨트롤러들을 사용하여 Synth 들을 실시간으로 제어해보자.
2) OSX 의 기본 IAC_DRIVER 및 LoopBe1 등의 가상 미디드라이버를 이용하여 Logic, Live, Cubase, Reason 등의 DAW 들과 함께 사용하는 방법을 연구해보자.

9주차

1. GUI 프로그래밍
UI 인터페이스를 만들고 조작하는 방법을 알아본다. SuperCollider에서 제공해주는 Window, Button, Slider, SoundFileView 등의기본 위젯들을 사용하여 각각의 상황에 필요한 인터페이스를 구성하는
방법을 연구해본다.

2. Quarks Package Manager SuperCollider 세계에는 여러 개발자들과 유저들이 만든 3rd-plugin
형태의 확장기능들이 있으며, 그러한 확장기능들의 설치,삭제,업데이트 등을 관리해주는 패키지 매니져인 Quarks 를 소개하고, 유용한 확장기능들을 설치 후 사용법등을 알아보자.

10주차

1. Rendering
실시간 라이브 퍼포먼스가 아니라면 SuperCollider 안에서 작업한 최종적인 결과물이 오디오 파일 이어야 할 상황들이 많다. FinalCut Pro 등의 영상 프로그램에 들어가야 하는 경우, 혹은 Logic 등의 DAW 에서 믹스 및 연주, 세션등을 더하는 경우 등등…작업한 소리, 프레이즈, 구조등을 다양한 상황에 맞게 오디오파일 (AIFF,WAV..등) 로 효과적으로 출력하는 방법들을 고민해보자.
1) Non Realtime Server 기본적으로 실시간 오디오 합성 프로그램인 SuperCollider 는 렌더링 기반 비-실시간 서버를 제공해준다. 비-실시간 서버를 사용하는 방법과 그 서버에서 사용하는 스코어파일을 작성하는 방법을 알아보자.
2) Buffer 에 실시간 출력하기
각 결과물들을 담을 버퍼를 만들고 버퍼에 실시간-레코딩하는 방법. 실시간-비실시간의 차이를 두고 각 방식의 장단점을 생각해보자.

2. Deep in Server
몰라도 대부분 잘 돌아가지만, 알면 더 좋은 서버의 옵션 설정 방법을알아보자.
프로그래밍 영역의 밖에 있는 시스템 설정, 블록사이즈, 샘플링레이트, 최대 메모리, 오디오인터페이스, 서버-포트 등의 서버 옵션을 설정,튜닝하는 방법을 알아보고, 작업 간 발생되는 시스템상의 다양한 문제를 해결하는 방법도 고민해보자.

11주차

1. Extention To SuperCollider
1) 클래스를 정의하여 자주 사용하는 함수 및 기능들을 Utilize 하자. sclang 의 class 문법은 인터프리터에서 사용 할 수 없으며 반드시 시작시 compiler 가 처리해야한다. sclang 안에서 클래스를 정의하고 관리하는 방법들을 살펴보자.
더불어 인터프리터 상에서 Event 객체를 활용하여 자바스크립트와 유사한 형태의 프로토타입 기반 객체지향을 살펴본다.
2) C++ 를 활용한 UGen 확장
이 부분에서 C++ 를 자세하게 설명하기 보다는 C++ 로 UGen 을 작성하는 인터페이스와 간단한 원리를 설명하며, 그 가능성을 살펴본다.

2. SuperCollider in Raspberry Pi
SuperCollider 를 활용할 수 있는 가장 작은 환경인 라즈베리 파이 위에서의 설치 및 활용법, 가능성 및 현재까지의 한계점등을 같이 살펴보자.

12주차

1. 가볍게나마 간단한 연습곡들을 만들어 공유해보고, 프로그래밍 상의 문제점을 수정하고 좀 더 효율적인 방법등을 토론해봅시다.

2. Q/A 12주간 수고하셨습니다. 각자 그동안 공부하며 터득한 노하우 및 아이디어를 공유해보고, 궁금했던 부분들에 대한 Q/A 를 진행하겠습니다. 그동안 수고하셨습니다!

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다