2. 누설
2015/2016년 WeSA 공연에 참가하여, 다른 아티스트들의
사용 도구들을 어깨너머로 훔쳐보았습니다. 기억나는대로 적어보자면
1. Max/MSP
2. SuperCollider
3. Ableton Live
4. QuartzComposer
5. OpenFrameworks
6. Processing
9. 기타(Modular System, Arduino, Lisp ...)
등을 여러가지 형태로 조합하여 사용하고 있었습니다.
7. PureData
8. vvvv
3. 미신
"A 프로그램은 B 프로그램보다 느려....."
"C 프로그램은 불안정하다던데....."
"저거 D 프로그램으로 만든거야? D 로도 저렇게 된다고?"
"E 프로그램은 윈도우에서만 돌지 않아?"
"F 프로그램은 이제 개발 안된다는데...."
"G 프로그램은 우리나라에 쓰는 사람들이 없어서
정보 교환이 안돼"
4. 그리고 공포
"지금 내가 공부하고 있는 이 도구는 확실한 비전이 있을까?"
"이번에 새로 나온 X 프로그램이 지금 내가 공부하는 Y 프로그램보다 좋다는데 지금이라도
Y 때려치우고 X 를 해야되나?"
"지금은 공부 중이니까 그냥 쓰는데, 나중에 혹시 내가 잘되서 아주 큰 프로젝트를 맡았는데
그때가서 내가 쓰는 이 도구의 성능이 문제가 되지는 않을까?"
"아몰랑...그냥 Max/MSP 하면 되는거 아냐?"
5. Value
매일 같이 쏟아지는 새로운 기술과 도구들.......
혹시나 뒤쳐지지 않을까 하는 불안함 속에 잠들지 못하던 수 많은 밤
그 속에서 변하지 않는 가치가 있다면.....?
고전과 새로움을 관통하는 큰 줄기가 있지는 않을까?
10. 개요
이 강좌는 C 언어의 관점에서, 현재 멀티미디어 프로그래밍에 널리 사용되는 기술들을
두루 살펴보는 강좌입니다.
C언어 강좌가 아닙니다.
당신은 아마 C언어로 해야 할 일이 그렇게 많지는 않을 지도 모릅니다. 평생 쓸 일이 없을지도 모르죠.
하지만 C 언어를 공부함으로써, 당신은 Max/MSP 혹은 SuperCollider 를 더 잘 사용할 수 있게
될 것 입니다.
그런 기운이 옵니다.
11. 대상
1. 프로그래밍에 입문하고자 하시는 분들
있는건지 답답하고 불안한 분들
C언어라고 하여, 어렵고 복잡한 내용을 다루지 않습니다.
2. Max/MSP 나 SuperCollider 등을 사용하고는 있는데 이걸 지금 개념차게 쓰고
철저하게 이해 중심, 개념 탑재를 위한 여러 기술들을 두루 체험하는 것을 목표로 합니다.
이 후 공부한 내용들을 어떻게 실전에 접목 할 것인지에 대한 여러 다양한 가능성을 살펴봅니다.
12. Do it your self
당신의 A 프로그램이 X 라는 기능을 지원하지 않는다면 당신은 어떻게 하시겠습니까?
1. X 기능을 지원하는 B 프로그램을 조합한다.
2. 사실 X 라는 기능은 나에게 꼭 필요한 게 아니었어 라고 정리하고, X 라는 기능을
머리 속에서 지운다.
4. 간지나게 X 기능을 구현하여 A 프로그램을 확장한다. X 기능을 원하는 다른 유저들에게
능력자로 칭송받으며, 페이스북 좋아요의 갯수를 신경쓴다.
3. 테크놀로지의 세계에 염증을 느끼고, 우크렐레를 구입한 후 오키나와로 떠난다.
14. 문법은 가볍게, 도구는 심플하게
1주차
Environment
- Development ToolKit (OS X)
- Cygwin (Window)
- Linux
Tool
- Atom (Editor)
- Clang / gcc (C compiler)
문법
- 변수와 자료형
- 함수
- 컴파일(build phase)
전처리기 -> 컴파일러 -> 어셈블러 -> 링커 -> 로더
<최신 atom 소스 편집기>
보다는 텍스트로 이루어진 소스코드가 어떠한 과정을 거쳐, 실행가능한 프로그램이 되는지를
중심으로 살펴봅니다
15. 문법 깊숙히
2주차
- 조건과 반복
C 언어 전체 문법이 아닌, 이 후 이어지는 내용들을 공부하는데 필요한 핵심들만을 중심으로
간추려 살펴봅니다.
- 배열
- 포인터
1) 포인터는 어렵다?
포인터가 실제 활용되는 패턴과 사례를 통해 포인터에 대한 미신과 오해를 까부수자
- 유저 정의 자료형(구조체 / 공용체 / 열거형)- 유저 정의 자료형(구조체 / 공용체 / 열거형)
- 메모리 할당
16. 터미널-command line interface
3주차
명령행 환경에서 파일을 다루고, 시스템을 관리하는 방법을 공부합니다.
특히 git 를 통한 소스코드 이력 관리, Makefile 을 통한 빌드 시스템을 구축하는 방법을 배우며
homebrew(Mac), Cygwin(Window), apt-get(Linux) 등을 사용하여 필요한 도구들을
쉽게 설치하는 방법등을 살펴보겠습니다.
"이제 당신도 해커!"
17. Input and Output
4주차
File I/O
Network I/O (TCP/IP)
- TCP
- UDP
Serial I/O
PortMidi 를 이용한 MIDI I/O
이제 여려분들의 코드를 Real World 와 만나게 합시다!
for text, sound, image
Network I/O
MIDI I/O
Audio I/O Serial I/O
Video I/O
18. RealTime Audio
5주차
PortAudio 를 사용하여 실시간 오디오 처리를 공부합니다.
PortAudio 는 플랫폼마다의 오디오드라이버(CoreAudio,ASIO, ALSA) 를 동일한 API 로
처리할 수 있도록 도와주는 오픈소스 라이브러리입니다.
이 후 위에서 공부한 DSP 코드를 SuperCollider 및 Max/MSP 등에 추가하여
자신만의 UGen / External 을 만드는 방법을 살펴봅니다.
각각의 프로그램을 접하신 경험이 없으셔도 괜찮습니다.
중요한 건 여러분들의 코드가 어떠한 과정으로 다른 프로그램에 내장되는지를
이해하시면 됩니다!
19. OpenGL
6주차
OpenGL 을 사용하여 3D graphics 를 구현합니다.
이를 통해 Max/MSP(Jitter), Processing, OpenFrameworks 가 어떻게 OpenGL 을
사용하고 있는 지를 살펴봅니다.
- GLUT / SDL / GLFW
- Legacy OpenGL
- Modern OpenGL
- Shader(Programmable Pipeline)
- DirectX, Metal, Vulkan 과의 관계
1) Fixed Pipeline
1) use VBO, VAO
1) why need toolkit?
1) GLSL
쉐이더(GLSL) 을 살펴보고, 동일한 코드를 여러 다른 프로그램에서 활용하는 방법과
특정 플랫폼 / 프로그램에 종속적이지 않은 기술의 장단점을 생각해봅니다.