Csound book 1 chapter번역 [3]






Sound Design Etude 3 : Four Envelope Techniques



컴퓨터는 상상하는 모든 소리를 만들 수 있다고 종종 얘기된다. 수학적으로 이것은 사실이지만 왜 전산화 되고 통합된 사운드는 종종 불모화되고 단조롭고 이상할까? 내가 듣기엔, 사운드를 재미있고 매력적으로 하는 것은 음고와 음색, 크기의 미묘하고 다이내믹하고 독립적인 것에 있다고 본다.



여기까지 우리는 단순히 Full볼륨에 둔 Csound악기에 이르렀다. 나는 어떤 어쿠스틱 악기라도 이런 작업을 한다고 확신한다. 명백히 이 도구들에 총체적인 envelope 통제의 약간의 형태를 적용하는 것은 그들을 더 음악적이게 하는 것에 효과가 있을 것이다. 그리고 우리가 할 것인 다른 동적인 매개 변수 통제들을 추가하는 것에 의해 이제까지 더 유혹하는 소리를 표현해라.



figure 1.20과 1.21의 instr 113에서 Csound의 linen부호는 진동의 진폭 parameter를 다이내믹하게 조절하는데 쓰였다. 그래서 전형적인 attack-release envelope generator의 기능을 한다.



figure 1.22와 1.23의 instr 115에서 linen은 또 dynamic, amplitude, envelope에 쓰였다. 이번 enveloping은 buzz opcode(a1)의 출력으로 linen opcode (k1)의 출력을 증가시키면서 이루어 졌다. 사실상 out opcode (k1*a1)의 입력 argument에서 증가가 이루어 졌다. 우리는 envelope를 신호에 적용하는 다른 방법을 보는 것 뿐 아니라 opcode의 parameter들에 의해 수학적 가동들을 실행하는 것은 가능하다는 것 또한 봐야 한다.



figure 1.22에서 이 악기에서 음(p3)의 길이동안p10의 값부터 p11의 값까지 지수 함수적으로 움직이기 위해 쓰였던 expon 부호가 보일 것이다. 때문에 하모닉 코사인의 숫자를 없애는 것은 buzz를 만든다. 천천히 공명 하는 것을 닫는 효과는 필터를 저통과하는 것처럼 크고, 동적인 음색 동태를 실현하는 단순한 또 다른 수단이다. 만약 당신이 Csound참고 매뉴얼을 쭉 훑어보았다면, 이미 k-rate와 a-rate의 변수를 가진 oscil과 같은 많은 부호와 같은 것을 발견 했을 것이다. figure 1.24에서 instr 117에서 보여주듯 우리는 오디오 rate linen을 envelope generator 로 사용한다. 이렇게 하기 위해서 figure 1.25에서 굵게 나와 있는 것처럼 grain 부호의 출력을 linen의 입력 진폭에 맞춰야 한다. 미립 신디사이저의 시그널에 envelope를 넣기 위해 분명히 이 도달 방법이 쓰인다. 사실상 우리는 그것을 보내기 전에 시그널을 envelope로 채운다.







Envelope



나는 전자음악을 공부하던 어린 시절에 항상 오디오와 신디사이저에서 envelope의 사용에 당황했다고 인정해야 한다. 나는 envelope를 그저 편지나 싸는 얇은 종이쯤으로 생각했었다. 그러나 instr 117에서 그 은유를 확실하게 해주는 연산이 쓰였다. 여기서 우리는 신호들을 AR 컨테이너 형태로 완전히 쌓고 접고 그것을 출력하는 linen부호를 본다. figure 1.26은 그 과정의 다른 방법을 보여준다. 첫째로 우리는 상반하는 오디오 시그널의 줄을 본다. 그리고 우리는 단극의 attack-decay-sustain-release(ADSR)의 진폭 envelope도 본다. 다음으로 우리는 envelope의 오디오 시그널에 적용하는 것을 본다. 마지막으로 우리는 ADSR에 의해 점차적으로 수정되는 진폭의 상극하는 오디오 시그널을 본다.



figure 1.26을 보는 다른 방법에는 동시적으로 윤곽을 그리는 단극의 시그널이 ADSR envelopeㅇ[ 의해 증가되어 상극화 하는 시그널이 있다. 결과는 ADSR패키지에 단극의 시그널이 쌓여있다는 것이다. 이 새로운 수준의 이해를 다른 instrument디자인에 써보자.



figure 1.27과 1.28에 쓰인 악기 118에서 우리는 아직도 Csound에서 시그널을 포장하는 다른 적용방법을 그리고 있다. 이 경우에 우리는 주기변수가 1/p3 에 놓인 진동을 이용한다. 몇몇 숫자를 넣어서 이 단순 표현이 주기적인 진동을 비주기적인 envelope generator로 변환시킬 정확한 sub-audio 주기를 계산하는지 이해하자.



예를 들어 음가가 10초 동안이고 진동주기가 1/10Hz로 주어졌으면 p7에서 10/10Hz가 한 주기에 나올 것이다. 그러므로 1/p3이나 음가로 나누어진 진동의 주기 1은 이 periodic signal generator가 1 주기를 계산하거나 각 음이 진행될 때 그것이 f-table의 하나의 완전한 주기를 읽는 것을 보장한다.



Envelope기능인 instr 118은 지수함수적인 모습과 단극의 선형의 다양함을 그리기 위한 GEN7GEN5를 사용하는 p7(f6, f7, f8)에 의해 불려진다. 그것은 GEN5서브루틴이나 expseg opcode에 의해 계산되는 것과 같이 지수함수적인 어떤 기능에서 0의 값으로 사용하기에 법칙에 어긋나는 것은 기록하는데 있어서 중요하다. 당신은 GEN5에서 사용되는 f8이 오히려 0보다 .001의 값으로 시작하고 끝난다는 것을 알아챘을 것이다.



instr 118에서 이용된 enveloping 기술은 (envelope generator처럼 사용되는 oscillator) 여러 이점을 가진다. 첫째로 당신은 끊임없는 preset envelope의 서적을 만들 수 있고 음표 대 음표를 토대로 그것을 변화시킬 수 있다. 둘째로, envelope generator가 실제 oscillator가 된 이후로 당신은 envelope roop를 가질 수 있고 흥미로운 LFO-amplitude를 토대로-gating 효과를 만들어 내기위한 note event의 진행 동안에 다시 시작시킬 수 있다. figure 1.30에서 보인 instr 119에서p8은 음표의 진행 동안 발생할 수 있는 방복의 수를 결정한다. 만약 p5가 5초이고 p8이 10으로 놓여지면 instrument는 초당 2번의 envelope을 다시 시작시킬 것이다. 음표의 길이가 1초(p3=1)일 때는 envelope는 초당 10번 다시 시작될 것이다.







Theory : Unipolar and Bipolar Functions



전형적으로 우리는 oscillator가 다른 웨이브형태나 샘플들을 연주하면서 소리를 만들어 가는 것이라 생각한다. 그러나 Csound의 oscillator는 unipolar(단극) 혹은 bipolar(양극)의 웨이브를 읽는다. 이런 signal generator는 control source와 audio source와 같게 사용된다. 시중에 나와 있는 흔한 신디사이저와 달라서 Csound에서는 사용방법과 사용자에 따라 opcode의 기능이 정의되어 진다. 여태까지 우리는 몇몇의 단극과 양극의 기능을 계산하는 Csound의 GEN 루틴을 사용하여왔고, 그것들은 우리가 다른 것들과의 차이를 이해하는데 굉장히 중요하다.



대부분의 오디오 웨이브형태는 GEN10을 가지고 생성된 것으로써 0의 위 아래로 움직이는 균형 잡힌 양극의 형태였다. 반면에 GEN5, GEN7을 이용해 생성된 대부분의 envelope기능은 확실한 한 쪽 방향성을 띄는 단극 이다. figure 1.31에서 볼 수 있듯이 Csound에서는 모든 양극 형태에서 -1에서 1까지의 범위를 갖고 모든 단극 형태에서는 0부터 1까지의 범위를 갖는다. 만약 당신이 일부러 범이 이외의 것을 실행시키고자 한다면 당신은 figure 1.32의 f3, f4를 참조하여 GEN앞에 “-” 표시를 사용해야만 한다.







Exercises for Etude 3



? Csound의 오케스트라와 악보를 가져와라. : etude 3.orc & etude 3.sco.



? 소리의 질 차이와 각각 음과 instrument의 envelope shape를 연주하고 들어보아라.



? 오케스트라 파일과 변형된 것들의 이름들을 좀 더 의미가 보이게끔 수정하라. 예를 들어 a1은 asig1로, k1은 kenv1로 바꾸어라.



? Csound 매뉴얼에서 instr 113-119의 새 opcode를 살펴보아라.



? instr 113-117의 linen코드에서 시작하는 시간과 끝나는 시간을 고쳐보아라.



? 각각의 instrument와 p5로 그것들의 출력에 추가되는 것들에다가 linseg를 넣음으로써 instr 113, 114, 115에 pitch envelope를 첨가시켜라.



? instr 117에 있는 낱낱 변수의 다이내믹 컨트롤을 실험하라.



? instr 113-117에서 oscil을 토대로 한 envelope를 linen을 토대로 한 envelope로 바꾸어라.



? 새롭게 디자인된 추가 여러 환경요인들을 GEN5, GEN 7을 사용해 보아라. instr 113-117에서 새로 디자인된 버전으로 이것들은 들릴 것이다.



? 지금까지 공부한 것들에 의해서 instr 112, 113, 114, 119를 나타낼 수 있다.







Sound Design Etude 4 : Mixing, Chorusing, Tremolo, and Vibrato



우리는 oscillator에서 풍부한 “코러스된” 효과를 생성하여 믹싱하고 detuning하여 instrument의 질을 증진 시킨다. 그런 후에 시중에서 파는 다른 것과는 다르게 혼성 합성 알고리즘(hybrid synthesis algorithm)을 생성하여 crossfade시킨다. (합성 접근은 때때로 modal 합성으로 귀착된다)마침내 우리는 sub-audio rate와 audio rate amplitude, frequency modulation(AM, FM)에 의해 우리의 instrument가 생명을 불어 넣을 수 있다. 우리는 또한 Csound에 이미 나와 있는 더 복잡한, 순간적이고 스펙트럼 화 된 opcode들을 시각화 하여 이용한다. 이제부터 우리는 지금의 이 언어에 대해 더 배워보도록 하자.







Self-Commenting Instrument Design



figure 1.33, 1.34에 나와 있는 instr 120에서 우리는 detuned oscillator를 amplitude envelope를 위한 envlpz라는 코드를 각각 이용하여 3개를 전부 섞는다. display란 코드를 사용하면 음표 전체 길이의 형태를 찾아내어 완전한 윤곽화가 되어 그 형태가 스크린에 나타난다.



간단한 디자인으로 보이는 instr 120에도 불구하고 Csound에서는 더욱 복잡한 instrument들을 더 확실하게 계획하고 편성하기 위해 따로 옆에서 도와준다. figure 1.34를 보면 이런 변화된 것들이 그들의 기능들을 식별하여 도움을 주는 그들의 이름들과 instrument의 꼭대기에 초기화 되는 것을 알 수가 없다. ( 스스로 해설하는 것의 결과임) 그리고, 당신은 착수하는 시간인 p7은 iatk, 해결하는 시간인 p9는 irel로 표현되는 것을 읽을 수 있다. 또한 가장 중요한 것은 envlpz코드가 나옴으로써 특수한 매개들과 일치하는 이 argument들이 그 코드에 의해서 더 쉽게 읽혀지는 것이다.



당신은 assignment operator를 “ = ”로 표기해야 한다. 사실 그건 코드다. 쉬운 영어 컴퓨터 부호와 줄인 이름이 기억되어 당신의 instrument위에 오는 i-time때, 그것들은 강력하게 추천되고 너무나 쉽게 읽혀 instrument화 된다.







Spectra Fusion



다음에 우리가 보게 되는 것은 figure 1.35, 1.36에서 볼 수 있는 instr 122이다. 이 instrument는 독립된 expon코드가 서로 섞이는 foscilbuzz사이에서 crossfade되어서 pluck이란 코드를 가지고 둘을 서로 섞어 아름다운 합성 음색을 생성한다. 이 instrument들은 Csound의 dispfft코드를 512포인트의 FFT(Fast Fourier Transform)로 – 이것들은 매일 250 밀리세컨으로 업데이트 됨 – 계산하고 나열한다. displaydispfft코드가 당신의 instrument형태를 나타내는 가장 훌륭한 방법임에도 불구하고, 당신은 당신의 instrument를 사용하여 음악을 만들 때 항상 이 display코드와 print코드로 comment out된다는 것을 주의해야 한다. 그것들은 생각보다 크게 당신의 시스템의 작업과 부딪힌다. 이 코드들은 정보적이고 교육적이지만, 당신은 잘못된 기능을 잡아주는 실제기능으로써 그것들을 생각해야 한다.



instr 120, 122와 같이 차라리 간단한 믹싱이나 crossfade와 같은 것은 다른 frequency나 amplitude를 가지고 audio코드로 변조하는데 더 알맞은 방법이라 할 수 있다. instr 124(figure 1.37, 1.38)에서처럼 예를 들어 a-rate oscil (asig)는 출력에서 expon에서 컨트롤 되는 amplitude 와 line이란 코드에 의해 그것의 frequency가 바뀌게 되는 a-rate oscil(alfo)를 버림으로써 amplitude를 변화시킨다. 이 간단한 발진기 구조는 굉장히 넓은 범위의 발달된 배음과 비 배음 적 음색을 생성한다.



다음 instr 126에서 (figure 1.39, 1,40)알 수 있듯이 우리는 더 자연스런 비브라토 효과를 내는 변조효과를 내기 위해 delay 되는 linseg란 코드를 사용하는 vibrato instrument를 볼 수 있다. instr 124와 126의 비교적 간단한 디자인에서 조차도 비범한 특색과 풍부한 색깔을 나타낼 수 있다. 이제 그들을 다시 잘 살피고 수정해 보도록 하자.







Value Converters



figure 1.34와 이 장의 모든 instrument들에서 볼 때, instr 120의 초기화 된 덩어리처럼 당신은 두 가지의 Csound value converter인 ampdbcpspch(iamp = ampdb(p4)그리고 ifrq = cpspch(p5)) 볼 수가 있다. 이것들은 우리가 그동안 사용해오던 Hz나 직선의 amplitude보다 더 유사하고 직관적인 형태로 더 풍부한 frequency와 amplitude표현을 도와준다.



cpspch value converter는 octave-point-pitch-class기보를 읽고 Hz로 바꾼다. (예. 8.09=A4=440Hz). 이 octave-point-pitch-class는 옥타브에서 나타나는 모든 것을 숫자로 나타내고 (8.00=Middle C또는 9.00=C5, 10.00=C6등등) 옥타브의 12개의 같은 음색군은 2자리 소수점으로 숫자화 시키는(8.09=C#4, 8.02=D4, 8.03=D#4등)짧은 기보 시스템이다. figure 1.41에서 나타나는 스케일은 시스템을 깔끔하게 만든다. 그리고 더 소수점을 첨가시킴으로써 figure 1.42에서 나타나는 미분음 표현도 가능하게 되었다.



당신이 볼 수 있듯이 cpspch converter는 pch(octave-point-pitch-class)에서 cps(cycle-per-second)까지 나타낸다. 만약, 당신이 음계나 미분음악을 Csound에서 쓰고 싶다면 이 value converter를 더욱 이용해야 할 것이다.



유사하게 ampdb value converter는 figure 1.43에서 보이는 가공되지 않은 진폭을 데시벨로 읽고 바꾼다.



당신은 Csound에서 dB를 실제로 사용하지 않는다는 것을 꼭 염두 해두고, 지각하기 쉬운 숫자 데시벨 또는 데시벨 스케일은 EK로 적도록 하여라. ampdb converter는 스케일을 갖지 않는 direct converter이다. 그러나 유감스럽게도 conversion은 rendering보다 중요한 것이기 때문에, 당신이 Csound의 ampdb converter를 사용함으로 인해, 당신의 진폭을 조정하고, 표준화하고, 스케일 화 하는데 많은 시간을 소비하게 된다. 하지만 그렇더라도 당신은 그렇게 해야 한다.







Exercise for Etude 4



? 4번째 Csound의 오케스트라와 스코어를 render하라.



? 각각의 음표와 악기의 다이내믹 음색과 변조효과를 연주하고 들어봐라.



? instr 120을 3개의 oscil코드 대신 foscil코드를 넣어서 코러스 화 시켜라.



? instr 126을 보고 instr 120의 3개의 foscil을 딜레이 된 비브라토로 만들어라.



? instr 121(여기서 논하지 않음)을 블록화 시키고, 첨가된 딜레이 된 비브라토 들을 당신이 가직 있는 웨이브 신디사이저의 샘플에 플러스 시켜라.



? instr 122를 수정하여 다른 hybrid 신디사이저를 생성하여라. 아마도 당신은 grain이나 loscil을 첨가 할 수 있을 것이다.



? instr 123(여기서 논하지 않음)을 블록화 하고, 그 리듬과 피치를 바꾸어라. audio-rate modulation으로 노력해 보아라. 마침내 amplitude modulation function으로 그것들을 자신의 것으로 만들어 사용할 수 있게 된다.



? instr 124를 완전히 버리지 말고 수정하여라. chorusing과 delayed vibrato를 첨가시켜라.



? instr 126을 미분적 멜로디와 화음을 노래하는 synthetic목소리로 수정하라.



? instr 127을 블록화 시켜라. 당신이 여태껏 발전시키고 익히게 된 코드의 일부와 기술들로 수정하는 대 재미를 가져 보아라.



? Csound reference manual을 보고 instr 120~127에서 새로운 코드를 살펴보아라.



? envpl를 위한 attack function을 만들고 모든 instrument에서 사용하라.



? print, display, dispfft코드를 instr 123~127에 첨가하라. (그러나 당신의 instrument들을 가지고 만들 때 그들을 comment할 것을 꼭 기억하라.)

Csound book 1 chapter번역 [2]






The GEN Routines



Csound의 서브루틴 발생기능을 GENS라고 부른다. 이 서브루틴 각각(20개가 넘는)은 컴퓨터를 기능의 세밀한 부분과 웨이브 테이블로 최대한으로 활용한다. 예를 들어 GEN5GEN7의 서브루틴은 함수곡선이나 직선의 부분으로부터 기능을 세우고 ; GEN9GEN10의 서브루틴은 사인곡선의 가중된 총양의 구성으로 된 합성파형을 만들고 ;GEN20의 서브루틴은 전형적인 스펙트럼 분석과 미량 포장에 쓰였던 Hamming윈도우와 Kaiser윈도우와 같이 표준윈도우 기능을 실행하고, GEN21의 서브루틴은 Gaussian, Cauchy와 Poison과 같이 임의의 구별과 다른 것들을 계산하고 ; GEN1의 서브루틴은 미리 녹음되어있는 사운드 파일로부터 looping-oscillator loscil처럼 Csound의 어떤 부호에 의한 처리를 위하여 f-table로 데이터를 옮길 것이다.



어떤 f-table을 요구하거나 당신의 오케스트라에서 악기가 어떻게 쓰이느냐는 완전히 당신에게 달려있다. 이것은 일반 상식의 재료나 취미가 될 수 있다. instr 106에서 루핑 looping-oscillator의 샘플파일에 근거한 loscil에서 나는 오케스트라로 하나의 샘플을 읽기를 원한다. 나는 GEN1을 택할 것이다. instr 102에서 내가 어떤 두개의 웨이브에 frequency modulate 하기 위하여 선택된 foscil opcode를 사용한 후에 전통적인 접근에 의해 결정하고 GEN10에 의해 정의된 두개의 sinewaves를 modulate할 것이다.







The Score Syntax



F-statement



스코어 파일에서 Csound의 f-statement의 문법은 :



f number loadtime table-size GEN parameter1 parameter… ; COMMENT







만약 우리가 16 point 사인곡선을 generate하기를 원한다면 우리는 다음과 같은 f-statement를 사용해야 한다. :



f 111 16 10 1 ; A SINEWAVE







보다시피 사인곡선은 부분적으로 부드럽지 못한 결과의 16포인트를 그린다. 대부분의 기능은 길이에서 2의 자승 이어야 한다. (64,128, 256, 512, 1024, 2048, 4096, 8192) 그리고 곡선테이블에서 우리는 전형적으로 512와 8192사이에서 f-table의 크기를 기입한다. 첫 번째 스코어 (etude 1 .sco)에서 우리는 figure 1.6에서 보여주는 GEN10, GEN20, GEN1을 정의한다.



모든 네 개의 기능은 0시간에서 로딩 한다. f1 과 f2 둘 다, sinewave(f3)의 한 주기와, sawtooth wave(f 2)의 첫 번째 16배음으로 4k table (4096값)를 채우기 위하여 GEN10을 사용하였고 GEN20은 4k table(f3)를 grain부호에 의한 사용을 위해 Hanning window로 채우기 위해 쓰였다. 결국, f4 는 남자 보컬리스트가 A음을 440피치로 3초 동안 노래하는 44.1k mono 16-bit AIFF 포맷 사운드 파일로 테이블을 채우기 위해 GEN1을 썼다. 이 샘플은 loscil부호로 썼다. (f4 의 길이는 0으로 기입했다. 이는 GEN1 서브루틴이 “sing.aif” 사운드 파일의 헤더로부터 파일의 정확한 길이를 읽기 위한 것이다. 이 길이의 분명한 경우는 초당132300샘플-44100 샘플*3초가 된다.)







The Note List



Csound 스코어 파일의 두 번째 부분에서 우리는 음표를 쓴다. 오케스트라 파일에서와 마찬가지로 스코어 파일의 각각 note-statement는 한 줄을 차지한다. note-statement(또는 i-statement)는 분명한 시간에 활동하게 되는 instrument와 분명한 길이를 요구한다. 게다가 각각 note-statement는 악기에 유일한 매개변수 세팅의 무한한 양이 쓰이고 이들이 음표 대 음표의 기본에서 매개변수들이 변할 수 있도록 사용된다.



소리를 한줄, 한줄 만드는 오케스트라처럼 스코어 파일도 한줄 한줄 씩, 음표 대 음표로 읽힌다. 그러나 음표는 시작 시간이 같을 수 있고 그런 경우 동시에 연주된다. Csound에서 두 개 이상의 음들이 동시에 연주될 때나 오버랩 될 때나 그 진폭이 증가한다는 사실은 꼭 항상 알고 있어야 한다. 이것은 종종 샘플의 범위를 벗어나거나 clipping의 결과를 낳는다. (우리는 이것을 세부적으로 짧게 논의할 것이다.)



당신은 오케스트라에서 opcode의 argument는 콤마로 분리되어있는 것을 알아차렸는지도 모른다. 여기 스코어에서 두 f-table argument와 i-statement parameter 분야 (또는 p-field)는 어떤 숫자나 공간이나 탭들로 분리되어있고 콤마는 쓰이지 않는다.



일을 정리하고 깨끗하게 유지하기 위해 사운드 디자이너들은 p-field를 분리하기 위해 종종 tab-stop을 쓴다. 이 연습은 p-field를 곧은 기둥에 정렬시켜주고 읽기와 디버깅을 용이하게 한다.







The First Three P-Fields



모든 음표 제시에는 처음 세 개의 p-fields가 의미하는 것은 보류한다. 처음 세 개의 p-fields(p.15의 표 1.7에서 처럼)는 instrument넘버와 시작 시간과 길이를 말한다.







; p1 p2 p3



i instrument # Start-time Duration







모든 다른 p-fields기능은 당신이 결정한다. 일반적으로 p4는 진폭을 위해 남겨두고 p5는 진동수를 위해 남겨둔다. 이 약속은 이번 장과 이 책의 다음 장까지 적용된다. figure1.7에서 보여주듯이 처음 스코어, etude 1.sco에서 3초 길이의 노트가 연속적으로 instr 101~ instr 106에서 연주된다. 각 음의 시작시간이 4초 간격으로 있기 때문에 각 소리사이에 1초 동안 간격이 있을 것이다.







Express for Etude 1



? Csound 오케스트라와 스코어 파일을 만들어라. etude. orc & etude.sco



? 각 악기의 사운드 질의 차이를 연주하고 들어보아라.



? 스코어 파일을 변경하고 각 음의 길이를 바꾸어라



? 모든 음들이 동시에 시작하도록 하여라.



? 몇 음들을 전부 연주하지 않도록 설명하여라.



? 음들의 복합적인 카피를 자르고 붙여라. 그러고 나서 같은 악기들이 다른 시간에 나오도록 카피들의 시작시간 (p2)과 길이 (p3)를 바꾸어라.



? instr 106을 유니즌으로 캐논을 만들어라



? Csound참조 매뉴얼의 instr 101~106부호들을 전부 보고 읽어라.



? 오케스트라 파일에서 각 악기의 진동수와 진ㅍ폭 독립변수를 변형하라.



? foscil악기의 carrier와 modulation의 진동 율을 바꾸어라.



? buzz의 harmonics숫자를 바꾸어라.



? pluck악기의 처음 기능을 바꾸어라.



? grain의 밀도와 시간을 바꾸어라.



? f4 복사본 세 개를 만들어 f5, f6, f7로 번호를 다시 매기어라. 당신의 샘플 (“yoursound1.aif”, “yoursound2.aif”, “yoursound3.aif”)로 로딩 하여라. instr 106의 copy를 많이 만들고 instr 66, instr 76, instr 68로 번호를 매겨라. 각자 다른 pitch에서 다른 sound file을 읽을 수 있도록 편집해라. 다른 샘플들을 동시에 연주시키라.



? etude 1.orc파일을 복사하고 복사된 악기들의 번호를 새로 매겨라. 복사된 악기의 각 버전에 다른 매개변수 값을 주어라. 모든 12악기를 동시에 연주하여라. 한계범위 이외의 샘플이 없도록 진폭을 조정해라.







Theory : Sound, Signals, and Samplings



Csound감상을 더 좋게 하려면, Sound의 어쿠스틱적인 것과 컴퓨터상에서 사운드가 어떻게 나타나는지를 확신하는 것이 좋을 것이다.



sound의 경험은 진동의 근원으로부터 모든 방향으로 나아가는 공기 분자의 희박성과 압축에 반응하는 우리 고막의 공명으로부터 나온다. 이 압력 변화의 진동 패턴을 파형(waveform)이라 한다. figure 1.8a를 보면, 파형이 x축 위에서 +일 때 공기분자가 압축되고 – 일 때 희박해 지는 것을 볼 수 있다. 사실상 figure 1.8b는 시간과 주기 두 분야에서 네모진 파형의 한 주기를 보여준다.



시간 축은 (a)에서 x축엔 시간을, y 축엔 진폭을 보여준다. 주기 축은 (b)에서 x축엔 주기를, y축엔 진폭을 보여준다.



우리는 시간 축에서 압축의 변화로 사운드를 느끼지만 주기 축에선 희미한 변화로 자각한다. 귀는 변환기로서 고막(소골과 추골과 침골과 금골을 통하는)의 기계적 운동을 와우 각의 유체에서 움직이는 wave를 일으키는 타원형 세포막으로 변환하여 작동하고 두개골 밑 부분의 hair cell을 자극한다. 이 hair cell은 그것의 각각에 덮는 신경을 통해 뇌에 주기정보의 복잡한 세트를 옮기는 주기분석기와 같다. 이 센서, 변환기, 신경전달물질의 극도로 예민함으로 우리는 활발하고 지속적으로 분석하고 성문화하고 분류하고 우리 주변의 공명하는 음파의 복잡한 주기의 특성을 지각한다.



일반적으로 우리는 소리의 파형들을 우리가 시각화 할 수 있고, 컴퓨터에서 조작할 수 있는 신호로 바꾸기 위해 다른 변환기를 사용한다. 그 과정은 견본으로 소개되고 figure 1.9에 그려졌다.



파형의 견본을 뽑을 때 우리는 소리의 압력 파를 유사한 전기의 압력 파. 또는 아날로그 신호로 첫 번째를 바꾸기 위해 마이크로폰을 사용한다. 그러고 나서 우리는 이 신호를 샘플링은 1/2보다 많은 주파수 구성요소들을 삭제 하는 필터를 저통과 하는 anti-aliasing 에 보낸다. 디지털 시스템은 sampling rate 1/2보다 정확히 신호를 표현할 수 없다. ( 이 반사하는 주파수 차단기는 Nyquist 주파수로서 알려진다). 우리는 우리가 정확히 표현할 수 없는 음고를 필터를 밖으로 저 통과하고 난 후에 아날로그 디지털 변환기로 신호의 진폭을 견본으로 만들고 조정하는 것을 계속한다.



만일 당신이 16비트와 근접한 시스템을 가지면 당신은 16비트의 지각(32768에서 35767 또는 2의 16승의 범위) sampling rate(우리 default header에 의해 정의되는 것에 따라 초당 sampling rate 44100번)의 새로운 측정의 정밀도로 아날로그 파형의 샘플을 뽑을 것이다. 본질적으로 우리는 연속의 아날로그 신호를 일련의 작은 스냅 사진들로 양자화 했었다. 당신은 확실히 표 1.5에서 사인곡선의 양자활ㄹ 볼 수 있다. 각 데이터의 기억된 장소를 나타내는 주소는 그 시점에서 시간 내에 신호의 진폭과 일치한다. 우리 컴퓨터에서 소리를 듣기 위해, 디지털 신호를 DAC를 사용해서 아날로그 신호로 다시 바꾸어야 한다.







Sound Design Etude 2 : Parameter Fields in the Orchestra and Score



우리의 두 번째 오케스트라에서 우리는 update 될 수 있고 스코어 파일에서 바뀔 수 있도록 instr 101~106을 수정해야 한다. 오케스트라의 고정된 opcode들의 argument들의 각각을 설정하기 보다는 오히려 우리가 etude 1.orc 에서 했던 것처럼 스코어에서 p-field에 대응하는 “p”가치를 두는 것이 낫다. 그러므로 각각 argument는 음표표기와는 완전히 다른 세팅으로 보내질 수 있다.



예를 들어 instr 107p-fieldoscil argument: 진폭(p4) 주기 (p5)와 파장(p6)의 각각에 적용되는 것이 figure 1.10에 보인다. 그러므로 표 1.12의 스코어 파일에서 우리는 A Major의 아르페지오 다음에 세 옥타브 아래의 시퀀스를 같은 instrument로 다시 쓸 수 있다.



figure 1.13, 1.14, 1.15에서 보이는 다음 p-field예에서 우리는 약간 제한된 instr 102는 더욱 음악적으로 다재다능한 instr 108(톤 컬러의 다양하고 풍부한 설정을 연주 할 수 있는 악기)로 변화되었다.



figure 1.15의 스코어에서 각각 foscil독립변수는 유일한 p-field로 할당됐고, 이로 인해 음표 대 음표 토대에서 변할 수 있었다. p4=진폭, p5=주기, p6=carrier ratio, p7=modulator ratio, p8=modulation index, p9=wavetable의 경우에서 , 그러므로 etude 2.sco 를 7초 동안 시작하면 instr 108이 여섯 개의 연속되는 음표를 연주한다. 모든 여섯 음표들은 f1(p9의 싸인 곡선)을 사용한다. 첫 두 음표는 분리된 옥타브(p5=440과 220)지만 다른 c; m ratio (p7=2와5)를 가진다. 분명히, 오케스트라의 p-field는 우리에게 가장 단순한 instrument조차도 피치와 음색의 많은 다양성을 준다.







Exercises for Etude 2



? Csound오케스트라와 스코어를 만들어라 : etude2.orc & etude2.sco



? 다른 음과 악기의 다른 사운드 질의 차이를 연주하고 들어보아라.



? 스코어 파일을 수정하고 시작시간, 시간, 진폭과 주기를 바꾸어라.



? Csound 참고 매뉴얼에 있는 instr 107-112에 쓰인 부호를 읽고 보고 동시에 어떤 통합 기술에 당신의 연구와 지각의 초점을 맞추어라.



? instr 108의 다른 c;m율의 효과를 알아보아라.



? 사인(f1)과 톱니(f2)로 조절할 때 음색의 차이를 비교하여라.



? instr 109를 사용해서 알토와 소프라노보다 테너와 베이스가 더 화성적인 4성부 코드진행을 작곡해라.



? instr 109와 112를 동시에 사용해서 당신이 작곡한 같은 스코어를 instr 9를 더블링해서 연주시켜라.



? instr 110을 사용해서 다양한 pluck 방법으로 실험해라.



? instr 110을 사용해서 다른 기능(f1, f2)의 초기설정으로 실험해라. 또, noise로 초기화를 시도하고 음색을 비교하라.



? grain 부호의 다양한 매개변수를 실험하라.



? 악기만 가지고 짧은 연습곡을 만들어라.



? 몇몇 악기들을 가지고 짧은 연습곡을 조화롭게 만들어라. 한계 밖의 샘플이 없도록 당신의 진폭정도에 맞게 조정하는 것을 기억하라.



? 헤더의 sampling rate와 control rate를 낮추어라. 수정된 악기들을 다시 편집하여라. 사운드 질과 밝기와 인공노이즈의 차이를 알겠습니까?











Amplitude and Clipping



전에 말했듯이 당신이 16비트의 컴퓨터를 가지고 있으면 2의 16승의 amplitude값을 표현할 수 있다(-32768에서 +32767의 벙위 까지 65536). 이것은 90dB 이상의 진폭을 변활 시킬 수 있다. 만일 당신이 exercises를 해왔더라면 당신은 아마 Csound의 음 진폭들이 부가적이라고 알아차렸을 것이다. 이는 한 악기가 20000의 진폭을 가지고 있다면 당신은 동시에 그 악기로 두 음을 연주 할 수 있는 것을 의미하고, 당신은 컴퓨터에게 ± 40000의 진폭으로 신호를 만들라고 요구 할 것이다. 문제는 당신의 16비트 변환기가 최고 약 32000정도의 값만을 표현할 수 있고, 그러므로 당신의 Csound일은 한계 밖의 샘플이 있다고 기록 할 것이고 figure 1.6에서 보는 바와 같이 사운드 파일의 끝이 깎일 것이다.



진폭을 다루는 것은 Csound를 하는데 가장 문제점 중의 하나이다. 여기엔 쉬운 대답은 없다. 문제는 Csound진폭은 signal의 단순한 수학적인 표현이라는 점에 있다. 이 측정들은 사운드의 종합적이거나 지각적 성격을 지니고 있지 않다.



단순히 입력해라. 두 번 진폭의 직선이동은 물론 크기만큼 두 번으로 인식되지 않을 것이다. 어쿠스틱의 좋은 책은 당신이 문제의 복잡성을 식별하는데 도움을 줄 것이다. Csound의 세계에서 두개 혹은 그 이상의 음이 그것들의 진폭이 증가되어 들릴 때마다 기억해야 한다. 당신의 signal이 32000보다 더 큰 어떤 것으로 숫자가 오르고 있다면 clip이 될 것이다. Csound는 당신이 이런 샘플 범위 밖의 문제로 고민하는 것을 도울 옵코드와 툴을 몇 가지 갖고 있지만 현재의 옵코드나 컨버터 값은 진실로 그것을 해결해 주진 못한다. 당신의 시간의 대부분이 단시 더 낮은 레벨로 set해야 하고 파일을 다시 (그리고 또 다시)render해야 한다. 당신의 두 귀가 원하는 것과 함께 당신의 시스템이 조정될 수 있는 범위 안에서 진폭을 얻어낼 때 까지.







Data Rates



첫 번째 연습 오케스트라에서 봤듯이 오케스트라에 직접 하든 p-field를 통해 하든,우리는 소수점으로 parameter를 정하거나 업데이트 시킬 수 있다. 그러나 Csound의 진짜 파워는 세 개(i-rate k-rate, a-rate)의 다양성으로 매개변수를 업데이트 할 수 있다는 것이다.



? i-rate변수는 note-rate에서 변화되고 업데이트 된다.



? k-rate변수는 control-rate에서 변화되고 업데이트 된다.



? a-rate변수는 audio-rate에서 변화되고 업데이트 된다.



I와 k-rate변수는 스칼라와 같다. 본질적으로 그들은 주어진 시간에 한 값만 취한다. i-rate변수는 첫째로 parameter값과 음가를 정할 때 쓰였다. 이것들은 초기-시간으로 없어졌고 음표의 길이로 남아 있다.



k-rate변수는 첫째로 envelope과 sub-audio 컨트롤 시그널을 저장하고 업데이트 하는데 쓰였다. 이 변수는 우리의 오케스트라 헤더의 kr로 정의된 control-rate에서 다시 계산된다. a-rate변수는 정보의 기억장치나 벡터다. 이는 오케스트라 헤더에서 sr로 정의된 오디오 sampling rate에서 발진기와 필터의 옵코드가 변화되도록 데이터를 저장하고 업데이트 하는데 쓰였다.



우리는 이 변수의 첫 글자로 업데이트 된 rate를 정할 수 있다. 예를 들어 figure 1.7에서 보여주는 두 부호간의 차이점만이 오디오 rate와 다른 control rate를 계산할 수 있다. 둘 다 같이 oscil이라는 부호를 쓰고 둘 다 같은 독립변수를 갖는다. 둘의 차이는 출력 시그널의 결과이다.



default헤더에 sr=44100, kr=4410을 정해주면 ksig의 출력은 4k의 sample rate에서 만들어 질 것이다. 1000hz 사인곡선을 정확히 계산하기 위한 충분한 샘플 결과를 갖기 때문에, 사운드의 결과는 둘이 꽤 비슷할 것이다. 그러나 만약에 독립변수가 다르고 파형이 figure 1.18의 f 2에서 정의된 톱니 곡선처럼 하모니가 첨가되든지 한다면 1초에 44100으로 정해진 k-rate는 파형을 정확히 계산하지 못할 것이고 aliasing(가상본)의 결과를 초래할 것이다.



당신은 그것이 사운드 디자이너인 당신에게 당신의 옵코드를 render하기에 대부분 적당하고 능률적이고 효과적인 비율로 결정하기 위하여 당신에게 맡겨지도록 기록할 것이다. 예를 들어 당신이 당신의 low frequency oscillator와 audio rate envelope의 모든 것을 render할 수 있지만, 그것은 그 신호를 처리하기에 더 오래 걸릴 것이고, 대부분의 경우에 첨가된 결과는 미세할 것이다.







Variable Names



악기 디자인에서 지금까지 교환 가능한 많은 경우에 우리는 a1, asig, ki, ksig를 써왔다. 변수에 이름을 붙일 때 Csound는 i, k, a로 시작하는 이름만을 요구했다. 이는 프로그램이 부호의 특별한 라인을 만들기 위한 비율을 결정하게 한다. 이것이 최우선이다.



예로 당신은 a1, asig, asample 또는 acoolsound의 loscil부호의 출력 이름을 줄 수 있다. 각 변수 이름은 Csound로 알게 될 것이고 에러 없이 작동 될 것이다. 사실 각 코드의 라인이 같은 parameter 세팅들을 가지고 주어졌다면 그것들은 render했을 때에 정확히 모두 같은 소리가 될 것이다. -당신이 그것들에게 어떤 이름을 붙이는가는 상관없이. 그러므로 그것이 사운드 디자이너인 당신에게 맡겨지는 것은, 분명하고, 일관되고, 유익한 그런 가변적 이름을 짓는 계획을 결심하는 것이다.







Theory: Aliasing and the Sampling Theorem



더 진보된 악기 디자인을 하기 전에 이론을 좀더 재검해보자. 처음 시작할 때처럼 figure 1.18의 톱니는 샘플링 법칙의 증거의 예이다. 처음에 시작했듯이 figure 1.18의 톱니(ksig)는 aliasing의 예이며, 샘플링 원리의 예이기도 하다. 샘플링 이론에선 디지털 분야에서 당신이 만들려고 시도하는 최고 주기의 두 배 만큼 많은 샘플의 파형을 정확히 재건하기 위해 그냥 입력하라고 나온다. 이 sampling rate의 1.2인 최고 제한은 Nyquist 주기라고 알려졌다. 44100Hz의 오디오 rate 주기로 인간 지각 가능한 한계에 논의되는 최고 22050Hz톤 까지 정확히 만들어 낼 수 있다. 그리고 4410Hz의 조절 rate로 정확히 2205Hz의 톤까지 만들 수 있다. 이것은 극도로 빠른 LFO가 될 것이고 낮게 변화하는 control rate에 한 비트 높아 보이지만 당신은 진폭 envelope의 조각이 극도로 빠르게 변화하는 것과 이 빠른 변화의 결과로 가끔씩 zipper-noise가 생기기도 한다는 것을 알게 될 것이다.



figure 1.9는 aliasing으로 알려진 현상을 그래픽으로 그려놓은 것이다. 왜냐하면 한 frequency는 하나의 alias로 밑의 샘플이 되고, 교체된 frequency의 결과가 된다. 특별한 경우에서 우리의 원래 사인곡선은 5Hz이다. 우리는 이 wave를 4Hz로 샘플링 한다.(정확한 재생을 위한 최소값은 가장 높은 frequency 구성요소에 2회당 10Hz가 된다는 것을 기억하자) 이 결과는 1Hz이다. 표에서 보다시피 1Hz의 싸인 곡선의 아웃라인 자취를 따라가는 샘플링으로부터 나온 값이지 5Hz가 아니다. 정확한 alias된 frequency는 샘플링 frequency와 샘플의 frequency와 다르다.



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이다. 첫째로 텍스트를 기반으로 한 instrumentorchectra 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가 주어지고 instrendin으로 범위가 정해진다. 하나의 오케스트라 파일은 사실상 아무 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의 악기들의 오케스트라를 연주시키는 스코어 파일을 보자. 오케스트라 파일과 같이 스코어 파일도 두 부분으로 되어있다. tablenote로. 첫 부분에서 우리는 f-table을 발생시키거나 그들을 하드 디스크의 소리파일로 채우기 위해 Csound의 수학적 기능을 끌어내는 서브루틴(GENS)을 사용했다. 둘째로 우리는 note-statements를 만들었다. 이 note-events는 악기를 연주하고 진동수 세팅과, 진폭 높이와 진동율과 발음횟수와 같은 매개변수를 실행시킨다.