Learning a Synthesizer: Architecture
on
개요
소리의 본질
일반적으로 우리가 듣는 소리는 그것이 어떠한 주파수 성분으로 구성되었는가를 살펴보기도 하고, 그것이 시간적으로 어떠한 변화를 일으키는지 보기도 한다. 따라서 우리가 소리의 대체적인 특성을 확인하는 방법은 3D mesh 정도로 보고 있다. 즉, X, Y 축을 시간과 주파수 축으로 하고 Z축을 신호의 진폭으로 보고 관찰하는 것이다.
주파수 영역에서의 진폭 분포
주파수 영역에서 보면 그 소리가 악기의 소리라면 음을 결정하는 주 신호가 어떤 주파수에 있는가를 보고, 그 주파수의 정수배 곱, 우리는 이것을 harmonics라고 하는데, 성분이 어떻게 구성되는지에 따라 음색이 결정된다고 본다.
즉 A라는 음을 내는 440 MHz의 악기소리가 있다고 하면 이것을 기반으로 440x2, 440x3, … 440 x N Hz의 성분들이 어떻게 분포하고 있느냐가 그 소리의 특색을 결정하게 된다. 이 분포가 날카로우면 날카로울 수록 순수한 음(=sine wave)에 가까와지고 넓게 퍼질 수록 지저분하게 들리게 되는데, 짝수배 주파수 성분은 음악적으로 한 옥타브 높은 소리가 되기 때문에 본래의 음과 ‘완전’음정이 되므로 이들 신호의 분포가 많다고 하면 소리가 다채롭게 들리게 될뿐 지저분하게 들리진 않는다. 반면 홀수배 주파수 성분들은 많으면 많을 수록 지저분하게 들리는데 3배 주파수 성분까진 완전음정이라 크게 지저분하진 않지만 5차부터는 점차 지저분하게 들리게 된다. 따라서 5차 이상의 하모닉 성분은 되도록이면 없는 것이 깔끔한 소리가 된다.
시간 영역에서의 진폭 변화
하나의 소리는 앞서 말한 주파수 영역에서의 모양새는 시간에 따라 변화한다. 시간에 따라 진폭과 주파수가 변화하기도 하고 그 구성되는 주음과 배음(harmonics)의 분포도 변화하게 된다. 이 모든 변화가 음색을 결정한다.
Synthesizer의 정의
Synthesizer는 다양한 음색의 소리를 만들어내기 위해서 하나의 기본적인 음색을 만들어내고 그 음색을 주파수/시간 영역에서 다양한 방법으로 변화를 가해서 음색을 프로그래밍할 수 있는 악기라고 정의할 수 있겠다. 단순한 Oscillator로 sine wave를 만들어내고 그렇게 만들어낸 sine wave의 위상과 진폭을 변화시키는 회로들을 붙여서 만들어진 것이 초창기의 analog synthesizer였다고 하면 지금의 digital synthesizer는 외부에서 sampling했거나 또는 그 샘플을 변형시킨 패턴 또는 사용자가 설계한 waveform을 가져다가 다양한 방법으로 위상과 진폭을 변화시킬 수 있는 악기로서 가청 주파수가 20kHz 이내로 낮은(?) 덕택에 수 GHz의 클럭사이클로 동작하는 CPU를 다루는 우리의 입장에서는 무엇이든지 할 수 있다.
Synthesizer의 구조
신디사이저의 구조는 쉽게 말해서 소리를 만들어내기 위한 기본 요소 - oscillator (LFO 혹은 VCFO) 들의 집합을 소프트웨어적으로 마음대로 연결할 수 있게 해 놓은 것이다.
신디사이저의 일반론을 뒤져보면 수많은 약어들이 등장하게 되는데, 그것들을 살펴보면 신디사이저가 아날로그에서 출발했기 때문에 아날로그 신디사이저에서나 쓰이는 개념들을 담은 용어가 많이 등장하고, 디지털 영역에서는 아날로그 신디사이저의 특성도 이어받아야 하므로 역시나 디지털 영역에서 쓰이는 개념처럼 아날로그 신디사이저에서만 쓰이던 개념이나 용어들을 같은 중요도로 다루고 있는데, 내 개인적인 의견으로는 이젠 충분히 바꿔야 할 때가 되었다고 생각한다. 그 근거는 다음과 같다.
- 아날로그 신디사이저를 쓰는 연주자가 없다. 아날로그 회로 자체가 신디사이저 알고리즘 자체에는 불완전성을 더 많이 포함하고 있어서 원하지 않는 잡음과 왜곡을 가지고 있다. 또 외부 간섭에 취약하다.
- 아날로그 신디사이저는 그 자체의 불완전함까지 디지털로 복원해 낼 수 있다.
- 디지털 신디사이저의 경우도 구형 기종은 잡음이 많아서 현업에서는 사용하지 않는다. 그것을 디지털로 등가한 플러그인이라든가 최신 기종의 신디사이저를 사용한다.
본론으로 돌아와서 신디사이저의 구성 요소를 쓸데없는 것들을 배제하고 중요한 것들만 나눠서 알아보자.
대략적으로 구성요소를 나눠보면 다음과 같을 것이다.
- oscillator: wave generator
- modulator
- filter
- envelope control
Osciallator or wave generator
가장 원초적인 소리는 sine wave이다. 그 이유는 딱 하나의 주파수 성분만을 가지고 있는 것이 sine wave의 특징이다.
신디사이저에서는 이 sine wave의 주파수를 변조(frequency modulation:FM)하거나 진폭을 변조 (amplitude modulation:AM)하는 것을 가징 기본적인 음 합성 방법이라고 볼 수 있다.
sine wave를 만들어내는 것을 oscillator - LFO (low frequency oscillator)에서 하는 일이라고 보면, 이것의 주파수를 또 다른 sine wave (=LFO)로 진동시키는 일, 이것의 진폭을 또 다른 sine wave로 변화시키는 일들이 다 LFO의 조합이 된다. 각각의 LFO의 주파수, 진폭은 전부 다 프로그래밍 요소가 된다.
디지털로 오게 되면 하나의 음을 구성하는 기초적인 wave가 아날로그에서 소리를 만들어내는 가장 간단한 방법 - oscillator - 를 쓰는 것보다 더 다채로와진다. 즉 샘플된 데이터가 되는 것이다. 이것을 wave table이라고 부르기도 하고 sample이라고 그냥 부르기도 하고 timbre니 뭐니 다양한 말로 표현하는데, 어쨌든 하나의 음색을 내는 데 가장 중요한 요소가 될 것임은 말할 것도 없다.
Modulator
Modulator는 일종의 곱셈기와 같다. 다만 신디사이저나 음향 효과에서는 곱해지는 신호 발생 장치도 대개 포함한다. 우리가 흔히 modulator라고 불리우는 효과들은 다음과 같다.
- Chorus
- Phaser
- Flanger
- Vibrator (Tremolo)
- Pitch shifter
기능을 modulator라고 구분했을 뿐, 성질이라든가 구현 방법은 각기 다 다르다. chorus/flanger/phaser의 경우에는 일반적으로 해석하기에 진폭을 변화시키는 (특정 패턴을 곱하는) 것처럼 해석되지만, 실제로는 time에 대한 변수를 앞 뒤로 변화시켜서 - 즉 위상의 변화를 일으켜서 - 음이 변화하는 특성을 얻는 것이고 vibrator의 경우에는 온전히 음의 진폭만을 변화시킨다고 볼 수 있다. 위상의 변화는 사실상 미세하게 샘플을 앞뒤로 잡아당겨서 (위상을 변화시켜서) 얻는 효과가 되는데, 이것도 해석하기에 따라 PM (phase modulation)이라고 보기도 하고 FM (frequency modulation)으로 보기도 한다. 뭘 어떻게 해석하든 가는 길은 하나이고 특유의 소리를 만들어내기만 하면 된다.
Filter
Filter는 쉽게 생각해서 EQ로 보면 된다. 주파수 특성을 조정하는 기능을 하는데, 신디사이저에서는 이 특성도 시간에 따라 변화시켜서 얻는 효과를 얻는다. 따라서 filter라고 해서 고정된 주파수 특성의 변화를 얻기도 하고 시간에 따라 변화하는 특성을 얻기도 한다. 이 외에도 위상을 변화시키는 신호에 filter를 넣어서 그 변화의 정도를 변화시키기도 한다. 역시나 매우 쓰임이 다양하다.
Envelope control
일반적으로 음이 발생해서 소멸되기까지의 그 전반적인 진폭의 모양새를 envelope라고 한다. 약간 long term의 개념을 갖는다. 샘플 단위에서는 어떤 wave를 썼느냐 어떤 modulator effect를 썼느냐에 따라 그 변화가 결정되지만 긴 시간으로 놓고 보면 소리의 발생과 소멸과정은 다음과 같은 요소로 구분이 된다. 흔히 ADSR envelope라고 한다.
- attack
- decay
- sustain
- release
Basic requirements as a MIDI instrument
MIDI 악기로서의 필수 요소라 함은 MIDI format에 정의된 다양한 파라미터들에 따라 응답하기 위한 다음의 것들을 의미한다.
- Velocity
- Controller 7: Volume
- Controller 10: Pan
- Controller 1: Modulation wheel
- Controller 64: Sustain
- Wheel (pitch bend)
어떤 음을 발생해서 만들어내든 위 요소는 어떻게든 반영을 해주어야 한다.
Velocity의 경우는 실제 악기의 녹음 샘플을 가져다가 쓰는 경우에는 각각 다른 샘플을 가져와야 하는 부담이 있고, 순수하게 wave를 generation하는 경우에는 ADSR control 패턴을 달리하여 효과를 내어줄 수 밖에 없는 문제라 본다.
7번과 10번은 단순한 믹서의 기능 요소라고 볼 수 있고, 1번과 wheel은 각각의 channel에 pitch shifter를 달아주거나 wave generator에서 frequency/phase modulation이 가능해야 함을 의미한다. 디지털 세계에서 이와 같은 기능을 구현하는 것은 쉬운 일이니까 전혀 걱정할 필요가 없다. 64번은 envelope control에서 sustain을 외부에서 컨트롤할 수 있게 만들어주어야 함을 의미한다.
Summary
Synthesizer 채널 하나의 구성은 다음의 블록 구성도와 유사하게 될 것이다. 다시 말해서 수많은 객채 팔레트에서 각각의 요소를 가져다가 연결해서 그 결과를 얻어 합산하는 그런 구조이다. 골치 아파해야 할 것은 각각의 요소들에 넣을 값들을 어떻게 정하면 좋은 소리가 날 것인가 이다.
- wave player: sine wave이건 외부에서 가져온 wave table이건 음색을 합성하기 전 최초의 파형을 만들어내는 요소이다. 음이 끊어질 때까지 같은 패턴을 계속 생산해 내야 한다. 이때 흘러가는 시간 (매 sample interval에서의 phase) 또한 컨트롤이 가능하다. 이를 통해 우린 FM/PM도 할 수 있고 wheel control도 가능하고 modulator control도 할 수 있다.
- mod/filter: 입력이 주어지면 출력을 만들어내는 이펙트의 조합이다.
- env control: envelope control이다. 주어진 값에 따라 ADSR 패턴을 만들어내는 것이다.
- vol/pan: 최종적인 volume과 pan을 결정하는 부분이다.
최종 결과는 하나의 음색이 될 수도 있고 아니면 한 가지의 출력이 하나의 음색이 될 수도 있다. 그것은 만드는 사람 마음이다.
이것은 거울 속의 내 모습을 보고 나라고 하는 것과 내 몸을 이루는 몸의 일부를 놓고 나라고 하는 것과 같다. 컴퓨터 기술과 속도가 발전해서 이젠 복잡도의 수준은 결코 중요하지 않은 문제가 되었다. 내가 듣기에 좋으냐 나쁘냐만 중요할 뿐이다.
복잡하다고 꽉차고 좋은 소리가 아니고 단순하다고 해서 나쁜 소리가 될 수 없다. 예전과 달리 음을 합성하는 최초의 기본음색은 sine/saw-tooth/square wave 같은 것을로 한정되는 것이 아니기 때문이다.