1. Introduction to Sound Design in Csound
Richard Boulanger
Csound는 강력하고 다재다능한 소프트웨어 합성 프로그램이다. 450 개 이상의 signal processing modules의 toolkit으로부터 끌어온 것이며, 어떤 상업상의 신시사이저나 multieffect processor를 모델화하기 위해 Csound를 사용할 수 있다. Csound는 개인용 컴퓨터를 high-end digital audio workstation(sound-design, 음향연구, 디지털 오디오 생산과 컴퓨터 음악 작곡이 최고의 표현적 악기로 결합하는)로 바꾼다. 그러나 모든 음악적으로 쓰이는 악기와 같이 진짜 기교는 재능과 헌신의 결과이다. 당신은 Csound가 궁극적으로 음악적인 악기라는 것을 곧 발견할 것이다. 그러나 당신은 연습해야 한다. 답례로, 당신이 이제까지 들어본 중 가장 풍부한 구성들과 가장 아름다운 음색들의 몇몇을 보여주는 것으로 당신의 위임에 보답할 것이다. Csound의 오디오 세계에서는 지식과 경험이 열쇠이다. 또 당신의 상상력이 유일한 한계이다.
이 장의 목표는 당신을 발견과 예술적 솜씨의 Csound의 선로위에 놓아주는 것이다. 이 길을 따라 우리는 합성의 거대한 영역과 signal processing 기술을 볼 것이고, 우리는 그들이 Csound에서 어떤 수단이 되느냐에 관하여 보게 될 것이다. 결국 우리는 Csound의 많은 가능성을 경험 할 것이다. 나는 당신이 나의 간단한 tutorial Instrument 각각을 render하고, 듣고 공부하고 수정하도록 도울 것이다. 그러면서 당신은 언어를 위한 명백한 이해와 진가를 얻게 될 것이며, 그러는 동안 당신 자신의 개인적인 참고서와 수정된 악기를 성립하는데 단단한 기초를 제공 할 것이다. 게다가 여기에 걸쳐진 기초를 통해서 작업하는 것은 이 책에 수반된 챕터에서 나의 동료와 친구들에 의해 보인 더 진보적인 합성과 신호처리 모델 등을 당신이 더 잘 이해하고 감상하기 위하여 준비될 것이다.
현재 Csound instrument 천여 개와, Csound composition 백여 개가 CD-ROM에 있다. 각각은 Csound의 많은 세계로 가는 입구를 열어준다. 실제로 그것은 그것들 모든 것을 경험하기 위한 제한된 시간을 가진다. 분명히, 계속하기 위한 방법으로 CD-ROM에 모든 오케스트라 들을 render해야 할 것이며, 당신에게 가장 흥미로운 소리와 당신 자신이 작곡하는데 사용하기 위한 그것들의 주된 샘플 중 한 가지를 선택해야 한다. 여기 준비된 책은 단시 유일한 소리의 collection일 뿐이며 당신이 조사하고 그 이상으로 여행해야 한다.
그러나 나는 그것을 더 잘 읽고, 실행하고 듣고 당신이 사용하는 Csound orchestra들의 존재를 수정하는 것에 정신을 잃을 만큼 합성과 신호처리 기술을 더 잘 공부하기를 바란다. 후에 당신이 soundscape와 sound collage를 기반으로 당신 자신의 작곡(당신 자신의 음색)을 통해 이렇게 이해한 것을 표현 할 것이다. 이런 활동적인 발견과정을 통해서 당신은 당신 자신의 개인적인 Csound책과 궁극적으로 당신 자신의 소리를 발견하기 시작할 것이다.
내가 목적으로 한 길을 따르면 당신은 Csound언어의 문장과 문법을 이해할 필요가 잇다. 그러나 나는 이 지식으로 확신하고 있고 당신은 당신의 개인적 오디오와 오리지널 안으로의 합성 경험과 Csound를 기반으로 한 아름다운 합성악기와 몇 가지 독특한 것과 밝은 소리 조각들을 변형할 수 있을 것이다.
마지막으로 우리는 Csound의 text파일을 기본으로 한 orchestra와 score언어의 문장과 문법을 배우기를 시작해야 한다. 그러고 나서 우리는 합성 알고리즘의 다양성과 Csound 프로그래밍 기술을 경험하는 것으로 옮겨갈 것이다. 마침내 우리는 몇몇 signal processing의 예로 나아갈 것이다. 그 방법 가운데 우리는 몇몇 기초적인 디지털 오디오 컨셉과 몇 가지 합성 프로그래밍 트릭들을 거쳐 가야 한다. 알고리즘과 신호의 흐름을 더 잘 이해하기 위해서 우리는 Csound악기들의 block-diagram(블록 도표)의 대부분을 이해해야 한다. 또한 나는 당신이 실제적으로 프로그램을 작성할 수 있는 많은 방법을 이해할 수 있도록 도울 많은 예시를 줄 것이다.
연습하는 것을 멈추지 말아야 한다. 그리고 그것들을 단지 읽기만 하면 안 된다. 그것들은 언어를 정말로 유창하게 발전시키기 위한 열쇠이다. 실제로 당신은 이런 예들이 그것들에 앞서 말한 어떤 것보다 Csound로 어떻게 작업하는가에 대한 더 많은 것을 당신에게 가르쳐 준다는 것을 발견하면 놀랄 것이다. 마침내 당신은 당신 자신만의 Csound자습서를 세우는 강하고 좋은 기초를 가지게 될 것이며, 당신은 보일 챕터의 더 깊은 이해를 위한 방법을 가지게 될 것이다.
그래서 CD-ROM에 있는 instruction들을 따라야 한다.; 컴퓨터에 Csound 프로그램을 인스톨 하라.; 모든 것을 확실하게 하기 위하며 오케스트라들의 테스트 몇몇을 듣고 실행하는 것을 적당히 해 보아라. ;그리고 그때 시작하자.
What is Csound and How does It Works?
Csound는 sound renderer이다. 첫째로 텍스트를 기반으로 한 instrument를 orchectra file에서 찾아서 machine-resident인 computer data-structure안에서 번역시킨다. 그 다음, 프로그램이 다음과 같은 것; 텍스트를 기반으로 한 score file, 연속적으로 일어나는 MIDI file, real time MIDI devices, real-time audio 또는 ASCII 키보드와 마우스와 같은 미디가 아닌 장치로부터 읽어온 프로그램들로부터 읽혀진 note event들과 parameter data를 해석함으로써 사용자가 정의한 instrument를 실행한다.
당신의 컴퓨터 속도(그리고, 오케스트라 파일의 instrument의 복잡성)에 의존한 이 스코어의 실행은 real-time으로 듣기나 하드 디스크에서 파일에 바로 쓰는 것 중 하나는 가능하게 할 수 있다. 이 모든 과정은 소리 만드는 과정(컴퓨터 그래픽에서 만들어지는 이미지의 과정과 비슷한)으로 보내진다.
한번 만들어질 때 당신은 당신이 좋아하는 소리 편집기를 열면서 사운드 파일의 결과를 들을 것이다. 그리고 머더보드의 DAC나 pc의 사운드 카드의 DAC를 통해 연주 될 것이다.
이와 같이 Csound에서 우리는 기본적으로 두개의 독립적이고 보충적인 텍스트 파일로 작업한다. 이 파일들은 당신 맘대로 이름을 지을 수 있다. 전형적으로는 우리는 이 두 파일들에 같은 이름을 주고 특별한 세 글자로 이 둘을 구분한다. .orc는 오케스트라파일에 .sco는 스코어 파일에 붙인다. 이름 짓는 것은 당신 마음대로이다. 이번 장에서 나는 파일을 etude1.orc와 etude1.sco, etude2.orc, etude2.sco등으로 부르기로 한다. 이 etude 오케스트라 파일들은 6개의 악기들을 가진다. (instr 101-106, instr 107-112등등) 당신이 개인적 instrument들을 분리하고 실험하는데 쉽게 하기 위해 이 복합적 instrument의 오케스트라로부터 나는 역시 단일의 instrument의 set를 만들었다. 이것들은 자신들의 악기번호를 따라 이름 지어진다. (101.orc와 101.sco, 102.orc와 102.sco 등등) 스코어 파일과 오케스트라 파일과 일치하는 이름을 짓는 것은 당신의 악기 자료들을 유기적으로 보존하는 것을 도울 것이고 나는 당신이 이와 같이 하기를 강력히 추천한다. 사실상 이 책과 동반된 시디롬에 있는 모든 스코어들과 오케스트라 들은 이와 같은 약속을 따른다.
The Orchestra File
Csound의 오케스트라 파일은 header섹션과 instrument섹션의 두 부분으로 구성되어 있다.
The header Section
이 헤더 섹션에서 당신은 샘플과 악기가 만들어 지는 비율 조절을 정의 내리고 출력하는 채널의 번호를 일일이 기입한다. 이 본문 전체를 동해 사용될 오케스트라의 헤더를 figure 1.1에서 보여준다.
이 헤더의 부호는 sample rate(sr) 을 44.1k(44100) 으로 , control rate (kr)를 4410, ksmps (ksmps = sr/kr)를 10으로 지정했다. 이 헤더는 역시 이 오케스트라가 채널 넘버 (nchnls)를 1로 두면서 mono사운드 파일을 만들어야 한다는 것을 지시한다. (만약 우리가 stereo파일을 원할 경우에는 채널 넘버를 2로 두어야 한다.)
The Instrument Section
Csound에서 instrument들을 서로 모듈이나 opcode를 연결시키면서 신호를 발생시키거나 변경시키면서 정의된다.(이렇게 디자인 된다.) 이 신호들은 기호(symbol), 라벨이나 패치(프로그램 잘못의 임시 정정)된 opcode로부터 다른 것으로 변화 가능한 이름들로 표현된다. 계획적인 instrument들은 유일의 instrument number가 주어지고 instr와 endin으로 범위가 정해진다. 하나의 오케스트라 파일은 사실상 아무 instrument number를 포함할 수 있다. 사실, Csound에서 모든 것은 instrument이다. 8000 voice sampler나 4000 voice FM synth나 어떤 것이든 Csound프로그램에 각기 다른 이 통합의 조각들이나, 신호과정이나 녹음장치는 단지 instr 1, instr2, instr3등에 불과 하다.
The Oechestra Syntax
Csound 오케스트라 파일에서 일반적 조작부호 진술의 문법은 :
output opcode argument comment[optional]
oscil조작부호의 경우에 이것은 다음의 문법에 따라 번역된다.:
output oscil amplitude, frequency, function # ; comment
a1 oscil 10000, 440, 1 ; oscillator
Sound Design Etude 1 : A Six Instrument Orchestra
The Orchestra File
우리는 첫 번째 오케스트라 파일에서 instr 101은 큰 잡음을 내는 opcode로 table-lookup(주; 키에 의해 항목이 구별되어있는 배열이나 도표에서 데이터 항목을 가려내는 프로그래밍 기법)이 사용된다. oscil은 440Hz의 싸인 톤을 10000의 진폭으로 계산한다. 블록도형 instr 101은 figure 1.2에 있다. 현재의 이 악기에 대한 Csound 오케스트라 코드는 figure 1.3에 있다.
블록도형 instr 101은 진동을 어떻게 출력하는지 보여준다. a1이라는 라벨은 하드 디스크에 신호를 쓰는 out opcode의 입력으로 “patch됨“ 이다.
Csound는 instrument를 정확히 위에서부터 아래까지 순서대로 만든다. 독립변수(argument)를 입력하는 것은 opcode name의 오른편에 있다. 출력은 왼쪽에 있다. 세미콜론 다음에 오는 글자는 설명으로 간주하고 무시된다.
figure 1.3에서 보여주는 instr 101은 진동에 입력된 독립변수를 1000(진폭), 440(진동수)과 1(oscillator에서 읽는 waveshape template의 function number)로 놓는다. Oscillator opcode는 이 세팅들과 변화 가능한 이름 a1에 입력된 결과로 1초에 44100번 소리를 만든다. 로컬에서 변화 가능한 a1에서 이 샘플은 다음 일어나는 opcode에 의해 입력으로 읽혀 질 수 있다. 이런 식으로 변화 가능한 이름들은 전통적인 아날로그 신디사이저에서의 패치코드와 유사하다. 오디오와 조절신호(control signal)는 instrument에서 어디든지 거의 루트를 정할 수 있고, 새 값에 매개변수를 정해놓거나, 매개변수를 다이내믹하게 조절하거나(손잡이를 돌리는 것처럼), 몇몇 처리중인 opcode로 오디오 입력의 역할을 하는 것에 사용된다.
figure1.4에서 instr 101과 같이 단순한 instrument 디자인을 사용한 instr 102~ instr 106을 볼 수 있다. (한 signal generator는 out opcode에 쓴다) 그러나 oscil부호가 foscil(2진동 FM 신시사이저), buzz(배음과 관계된 코사인에 첨가되는 설정), pluck(Karplus-Strong 연산에 기초한 간단한 파형조합), grain(비 동시적이고 각각의 신디사이저), loscil(looping으로 샘플 된 파일을 기본으로 한 웨이브 판 신디사이저)처럼 좀더 강력한 통합코드로 대신한다.
확실히 이 instrument들의 단순한 signal-generator 구조는 동일하다. 그러나 당신이 그것을 한 번 만들고 난 후에는 그 소리가 조금씩 다른 것을 들을 것이다. 각각 440Hz의 주기와 10000진폭으로 연주한다 해도 근본적 조합연산으로 구체화된 각각의 opcode들은 다르다.(매개변수의 독특한 설정의 세분화를 요구한다) 사실상, 이 여섯 개의 신호발생기 부호(oscil, foscil, buzz, pluck, grain, loscil)는 요즘 대부분의 인기 있는 통상의 신디사이저의 기술을 대신한다. 누군가 Csound를 모든 신디사이저의 단일 무이한 부호라고 할 것이다. 아마 자극적이고 다재다능한 신디사이저는 아니겠지만 다른 부호들과의 조합에서 Csound는 어떤 통상의 완성 이상으로 당신을 데려다 놓을 것이다.
The Score File
자 이제 Csound의 악기들의 오케스트라를 연주시키는 스코어 파일을 보자. 오케스트라 파일과 같이 스코어 파일도 두 부분으로 되어있다. table과 note로. 첫 부분에서 우리는 f-table을 발생시키거나 그들을 하드 디스크의 소리파일로 채우기 위해 Csound의 수학적 기능을 끌어내는 서브루틴(GENS)을 사용했다. 둘째로 우리는 note-statements를 만들었다. 이 note-events는 악기를 연주하고 진동수 세팅과, 진폭 높이와 진동율과 발음횟수와 같은 매개변수를 실행시킨다.