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은 지수함수적인 모습과 단극의 선형의 다양함을 그리기 위한 GEN7과 GEN5를 사용하는 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코드가 서로 섞이는 foscil과 buzz사이에서 crossfade되어서 pluck이란 코드를 가지고 둘을 서로 섞어 아름다운 합성 음색을 생성한다. 이 instrument들은 Csound의 dispfft코드를 512포인트의 FFT(Fast Fourier Transform)로 – 이것들은 매일 250 밀리세컨으로 업데이트 됨 – 계산하고 나열한다. display와 dispfft코드가 당신의 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인 ampdb와 cpspch를 (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할 것을 꼭 기억하라.)