Learning a Synthesizer: Programming

Algorithm

신디사이저 알고리즘에 특별난 것이 있을 수 없다. 단지 어떤 음색에 어떤 알고리즘이 적용되어있느냐가 관심거리일 뿐이고, 그 알고리즘이라는 것은 이미 앞서 설명했던 기본 요소들을 어떻게 조합했느냐에 관련된 것이다.

즉, wave generator와 filter, modulator, mixer 등의 요소를 어떻게 연결하여 조합했느냐가 알고리즘이 된다. 우리는 매우 빠른 CPU를 가지고 음을 합성할 수 있고 또 대용량의 메모리를 쓸 수 있기 때문에 sine wave가 아닌 다양한 패턴을 읽어서 사용할 수가 있기 때문에 그 응용 방법은 정말 무한대라고 할 수 있다.

Programming

다양한 synthesizer를 만져보면 만져볼 수록, 또 컴퓨터가 아닌 신디사이저 그 자체에서 프로그래밍을 해 본 사람은 알겠지만, 인터페이스가 (나름 편리하게 만들었다고 하지만) 불편하기 짝이 없다. GUI로 되어있어서 마우스로 노브를 조정하든 손바닥보다도 작은 LCD 창에 의지해서 조그 셔틀을 누르거나 키패드를 써가며 프로그래밍 하든 뭐든지 불편하다. 저장하는 것도 오직 그 신디사이저에 한정되고, 해당 신디사이저의 알고리즘 구성에 얽메이게 된다.

다시말하자면 universal한 programming 방법이 없다.

신디사이저가 나름 비싼 악기이던 시절에는 제조사마다 알고리즘이 영업비밀에 해당하고 자신들의 얼굴을 결정하는 요소나 다름없었으니 그렇다 치지만 사실 지금은 모든 것이 의미가 없어졌다. 음을 합성/변조하는 기술은 이미 널리 알려졌고 아날로그 부품을 써서 만들던 과거 악기들까지 완벽하게 모델링을 하는 시절이다. 물론 잡음만 쏙 빼놓고 말이다.

생각해보면 컴퓨터 기술이 미천하던 시절에 나왔던 신디사이저의 알고리즘이 복잡해봐야 얼마나 복잡할 것이며, 어려워 봐야 얼마나 어려울 것이냐다. 업체마다 음색이 달랐던 것은 각 요소들간의 연결의 특수함에서의 차이일 뿐, 또 악기에 붙어있는 브랜드의 차이일 뿐, 또 음색의 근원이 되는 웨이브 테이블이 조금씩 달랐을 뿐이다. 음악을 복잡한 수학이론으로 만들어야만 좋은 음악이 되는 것이 아니라 얼마나 자유롭게 만들 수 있느냐만 중요할 뿐이다.

따라서, 비록 늦은 시점이지만 universal한 synthesizer programming이 가능해야할 때가 되었다.

Synthesizer를 coding하듯이 만들어보자는 움직임은 이미 Sonic-pi에서 있어왔다. 그러나 보다 시피 이것은 즉석으로 어떤 소리를 만들어내는 것에 목표가 있는 것으로 보이지 신디사이저를 구현하는 요소들을 연결하고 세밀하게 튜닝하는 것과 관련된 일에는 별로 관심이 없어보인다.

What to do?

몇 가지 잘 알려진 신디사이저의 구조를 분석해보고 공통 분모를 찾아본 뒤에 어떻게 해볼지 생각해볼 수 있을 것이다. 이미 많은 시도가 있었어서 심지어는 webAudio 표준을 이용해서 신디사이저를 구현하는 프로젝트도 있고, 라스베리파이를 활용하는 프로젝트들도 있는데, 개발자들이 이 일이 돈이 되서 하는 일 같아 보이지는 않지만 Zynthian 같은 프로젝트는 생각보다 많이 진지해보인다.

왜 돈이 되지 않는지 증명해보이라면 내가 잘하는 일이니까.

따라서, 진정으로 사용자를 위한다거나 아니면 진정으로 사업으로 돈을 남기고 싶으면 방향으 바꿔야 할 것이다. 내 경우 이 일로 돈을 남길 수 있는 것도 아니고 내가 아닌 다른 사용자들이 불편함을 무릅쓰고 따라온다면 모를까 그것도 쉽지 않은 일이니 오직 나를 위해 이 일을 하려고 한다.

즉,

그런데 부정적인 시각이긴 하지만, 세상에 존재하는 다양한 음원들을 지원하려고 하다보면 결국에 배가 산으로 가게 되어 현존하는 지저분한 신디사이저들과 결을 같이하게 될 것 같다는 불안함이 생긴다.