SIR과 스피커 시뮬레이션..

0..

그간 맥빠지는 기타릭의 스피커 시뮬레이터와 너무 강한 소릴 뿜는 Trash의 box simulator 사이에서 갈등하다가 뭔가 더 좋은 방법이 없을까 싶어서 찾아낸 방법이 SIR을 이용하는 방법이다.

SIR은 일부 리버브 매니아들 사이에서 쓰이는 FIR(Finite Impulse Response) filter VST 플러긴이다. FIR filter는 전기/전자를 전공한 사람이 아니라도 디지털 세상을 살아가는 사람이라면 한 두번 쯤은 들어봤을 용어이다. 내게는 ‘전자공학은 사실상 필터가 전부다.’라고 했던 어떤 선배의 말과 함께, (이 책을 다 보면) 쓸만한 디지털 이펙터를 하나 만들 수 있지 않을까 생각했던 Digital Signal Processing 책에서 다루는 내용의 절반이상이 FIR filter라는 사실에 ‘왜 코러스/플렌져/디스토션 이펙트를 가르쳐주진 않을까’하며 실망했던 기억도 있다..

선배의 그 말을 들은지 십수년이 흐른 지금에 완벽하게 동의하진 않지만, 적어도 전자공학을 음악에 응용하는 분야에 있어서는 필터가 전부다라고 할 수 있을 것 같다. 왜냐면 필터를 뺀 나머지가 필터처럼 엄청난 영향을 미친다고 보기 어렵기 때문이라고나 할까. 사실 필터는 너무 너무 많은 부분에 들어있기 때문에 그 중요성을 모를 정도라고 할 수 있기 때문이다. 흔히 필터하면 EQ나 Tone 정도로 생각할지 모르지만, 그것은 사람으로 하여금 control할 수 있게 한 필터이고 그렇지 않은 많은 필터들이 이미 소리의 대부분을 결정해버린 것이다라고 할 수 있다.

1..

쓸데없는 소리는 접고, SIR이란 플러그인의 역할에 대해서 먼저 얘기하자. 일반적으로 우리가 어떤 시스템의 특성을 종합하는 뭔가를 얘기할 때, 먼저 impulse response를 얘기한다. 여기서, 시스템이라고 얘기하는 것은 예를 들어 스피커면 스피커, 앰프면 앰프, 또는 앰프+스피커+마이크+청자의 스피커라고 볼 수 있다. 다시말해 시스템이란 말은 추상적인 의미로 쓰인 것이라 단순히 저항이나 cap 한개에서부터 그 복잡도가 무한대인 세계를 의미할 수도 있다.

다시 돌아와서, 내가 흉내내고 싶은 system이 울림이 매우 좋은 어떤 hall이라고 할 때, 우리는 단순히 hall에 impulse를 쏘고 (우리가 어떤 주파수 대역까지 흉내내려 하느냐에 따라 impulse를 얼마나 뾰족하게 가공해야 할지, 어떤 transducer를 써야할지 알 수 있을 것이다) 그것을 마이크로 잡아내어, 그 결과(impulse response)를 우리의 필터에 넣고 쓰게 된다.

유명한 480L이나 960L과 같은 reverber는 그런 기계이다. 일반적으로 reverb는 그 response의 길이가 상당히 긴 FIR filter인데, 당대에 그것을 모두 디지털로, 실시간에, approximation이나 truncation에 의한 artifact가 들리지 않을 정도로 만들기 위해서는 높은 정확도의 DSP를 병렬로 연결해서 처리해야만 했다. 다시말해 480L이나 960L은 impulse response database와 DSP farm(FIR filter)의 결합이란 얘기다.

시간이 다시 흘러 PC의 계산 능력이 엄청나게 향상되고 VST 덕택에 S/W로도 매우 훌륭한 (준)실시간 reverb가 많이 등장했다. SIR이란 플러그인은 그런 플러그인 중에서 핵심적인 기능(FIR filter)만 잘 구현해놓은 플러그인이라고 할 수 있다. 언뜻보면 실시간 같지만, 그것은 VST 호스트가 latency를 전부 계산해서 보상해주었기 때문이지, latency가 매우 긴 (그러나 고정된) 플러그인이라고 할 수 있다. 용도는 정해진 impulse response를 파일에서 읽어와서 FIR filtering (discrete convolution)한 뒤에 내보내는 일이다. 이것이 왜 중요하냐 하면, 대부분의 플러그인은 이미 제작사가 정해놓은 impulse response를 가지고 작업하도록 되어있는데, 막상 내가 원하는 impulse response로 convolve하려면 쉽지 않다. SIR이 그 해답이다.

유사한 플러그인들이 여럿 있는데, 이들 중 SIR이 특히 매력이 있는 것은 아마도 convolution 연산을 제대로 해내기 때문일 것이다. 불행히도 그 때문에 latency가 매우 크다. 따라서, 실시간으로 외부에서 입력을 넣고 그것을 처리한 결과를 듣기까지 latency가 심해서 곧바로 쓸 수는 없다. 이를 위한 480L의 일부 reverb에 대한 impulse response들이 돌아다니고 있다.

2..

그렇다면 이것을 가지고 어떻게 cabinet simulation에 적용해야할까? 대답은 간단하다. 내가 흉내내기 원하는 앰프를 마이킹한 소리와 같은 플레이에 대한 프리앰프 출력이 있다면, spectral analysis의 극히 원초적인 방법을 이용하여 흉내낼 수 있다.

일단 프리앰프 출력의 주파수 영역의 표현식을 [tex]X(f)[/tex]라고 하고, 그것을 파워앰프/마이킹한 것을 [tex]Y(f)[/tex]라고 하자. 물론 파워앰프와 스피커의 비선형성은 없다고 가정하거나 무시해야한다. 그것을 인정하면 사실상 프리앰프 출력으로 파워앰프의 출력을 흉내내는 것은 불가능해진다.

파워앰프-케비넷-(AIR)-마이크의 frequency response를 [tex]H(f)[/tex]라고 할 때, [tex]Y(f)=H(f)X(f)[/tex] 관계가 얻어진다. 여기서, 쉽사리 H(f)를 X(f)와 Y(f)로부터 얻어낼 수 있을 것 같으나, 이것은 매우 단편적인 특성이 되므로, 충분한 기간동안의 power spectral density를 추정하여 다음과 같이 계산한다.

즉, [tex] Y(f) ^2 = H(f) ^2 X(f) ^2[/tex]이므로, [tex]H(f) \approx \sqrt{ Y(f) ^2/ X(f) ^2}[/tex].

이러한 원리를 바탕으로 작업을 수행하지만, 실제 과정은 매우 복잡하므로 생각한다. 아마도 POD 씨리즈도 유사한 방법을 사용할 것으로 예상된다.

다음은 Dual Rectifer + Marshall Cab. + SM58로 실황 녹음 한 샘플에서 특성을 추출하여 필자의 프리앰프 출력에 입혀본 것이다. 앞부분은 프리앰프 출력을 그대로 녹음한 것이고, 뒷부분은 추출된 impulse response로 FIR filtering한 것이다.

들어보기

3..

앞서 얘기한 방법대로 원하는 톤의 샘플을 가져다가 특성을 추출할 수 있을 정도의 길이로 잘라서 spectral analysis를 하게 되면, 원하는 주파수 특성을 가지고 있는 filter의 impulse response를 찾을 수 있다. 이것을 SIR에 적용하면, 프리앰프 출력으로 부터 곧바로 마이킹 아웃을 얻을 수 있다. 불행히도 완벽한 샘플을 얻는 것은 쉽지 않다.

예를 들어 프리앰프로 E 파워 코드를 쳤을 때의 샘플과 이에 상응하는 마이킹 샘플이 동시에 존재해야 어느 정도 정확도가 높은 결과를 얻을 수 있는데, 실제 우리가 얻을 수 있는 샘플은 마스터링이 되어있다거나 다른 소리 (드럼, 베이스)가 포함되어있는 소리가 대부분이라 순수하게 앰프의 소리만을 취해서 작업하기가 쉽지 않단 얘기다.

다음은 설명한 방법으로 작업한 것이다. 위에 있는 것은 기타릭의 cab sim (recto cab + SM57)을 쓴 것이고, 아래 있는 것은 Metallica의 Blackened에서 잘라낸 샘플로 스피커 시뮬레이터의 특성을 뽑아내어 guitarRig 대신 SIR로 작업한 것이다. SIR을 적용하기 바쁘다보니 음량이 맞지 않으나 이해바란다.

GuitarRig으로 작업 들어보기 SIR 작업 후 들어보기