사운드 디자이너가 PureData + Heavy를 사용하여 DSP 플러그인을 개발하는 법 - 제 1부

사운드 디자인 / Wwise에 대한 팁과 도구

 

많은 사운드 디자이너들이 오디오 플러그인 개발을 오디오 프로그래머의 '흑마법' 영역이라 생각합니다. 보통 코딩 기술뿐만 아니라 수학, 물리학, 디지털 신호 처리 등 사운드 디자이너에게 꼭 필요하지 않은 기술을 필요로 하기 때문이죠. 

사운드 디자이너가 Wwise에서 제공되지 않는 DSP 효과를 다른 프로젝트에서 들을 경우, 아마도 이 효과가 어떻게 작동하는지 빠르게 이해하고 일반적인 도구를 사용하여 동일한 기능을 재현하는 기술적 프로토타입을 만들어낼 수 있을 겁니다. 하지만 성능에 제약이 있거나 이러한 도구의 출력을 저작 도구나 엔진 안에서의 플러그인으로 배포하기가 어렵기 때문에, 대부분의 아이디어가 프로토타입 단계에서 멈추고 실제 게임에서 활용되지 않는 경우가 많죠.

다행히 PureData(퓨어데이터)와 Heavy(헤비)라는 도구를 사용하면 저작 도구에서 사용하고 실제 게임에서 실행할 수 있는 효과나 음원 플러그인을 사운드 디자이너가 직접 제작할 수 있습니다.

PureData란 무엇인가요?

image001

PureData (PD)는 1990년대에 밀러 퍼켓(Miller Puckette)라는 사람이 상호작용 음악 제작과 멀티미디어 작업을 위해 개발한 시각적 프로그래밍 언어입니다. PD는 오픈 소스 프로젝트이며 새로운 확장을 작업하는 대규모의 개발자 기반을 갖고 있습니다. 이제는 심지어 이 안에 VST 플러그인도 로드할 수 있죠!

PD 코드를 담은 파일은 Patch(패치)라고 부릅니다. 그리고 PD는 SubPatch(하위패치)도 지원합니다. 모듈식 코드 단위를 사용하면 사용자가 복잡한 PD 프로젝트를 만들어낼 수 있습니다.

하지만 이 글은 PD 초보자 튜토리얼이 아닙니다. 이 도구에 대해 더 알고 싶은 분들은 https://puredata.info/를 참고해 주세요.

 

'Hello World'의 PD 버전 (중국어를 원하시면 여기를 클릭하여 동영상을 시청하세요)

 

위의 동영상에서 볼 수 있듯이 PD는 모듈식 신시사이저와 거의 동일한 방식으로 사용됩니다. 서로 다른 오브젝트를 연결하여 신호 시스템을 제작하고 매개 변수를 조절하여 실시간으로 상호작용할 수 있죠.

PD는 사운드 디자이너가 일반 도구를 사용해서 기술적 프로토타입을 제작한 후 올바른 컴파일러로 플러그인을 생성하게 해주는 '블루프린트 환경'이라고 할 수 있습니다.

image004마치 레고 블록으로 흥미로운 것들을 제작하는 것과 같죠

 

Heavy는 무엇인가요?

Heavy는 Enzien Audio(엔지안 오디오)가 개발한 PD Patch 컴파일러로, 사운드 디자이너가 제작한 PD Patch를 C/C++ 코드로 변환해 줍니다. 이 도구를 사용하면 사운드 디자이너가 직접 코드를 제작할 필요 없이 PD 환경에서 대상 플랫폼에서 실행할 수 있는 코드를 생성할 수 있죠.

Heavy는 사운드 디자이너가 제작한 '블루프린트'로 무언가를 제작해 낼 수 있는 '자동 워크숍'이라고 생각하시면 됩니다.

image006

그러면 이 도구로 무엇을 할 수 있을까요?

PD + Heavy로 제작한 플러그인으로 무엇을 할 수 있을까요?

1. 사운드 디자이너가 설계한 PD Patch를 기반으로 실시간 DSP 작동하기.

2. 오디오 입력과 출력 지원하기. 음원 Patch에 adc~ 오브젝트가 있을 경우 효과 플러그인이 생성됩니다. 이 오브젝트가 없을 경우 음원 플러그인  (예: Wwise SoundSeed Wind, Wwise SynthOne) 이 생성됩니다.

3. 제어 매개 변수의 입력과 출력 지원 제공. Wwise Sound Engine의 Game Parameter에 의해 제어되거나 Game Parameter로 데이터를 전송하여 LFO와 같은 여러 기능으로 사용될 수 있습니다.

4. UI 이벤트의 입력과 출력 지원 (Unity에만 해당).

이제 사운드 디자이너가 이러한 도구로 무엇을 할 수 있는지 알아보았으니, 이 도구로 무언가를 제작해봅시다.

Sample Divider(샘플 분리기)

 

image008래스터화(rasterized) 효과의 오디오 버전이라고 할 수 있습니다

Sample Divider 효과는 보통 Bitcrusher(비트크러셔)와 같은 디스토션 플러그인에 들어있습니다. 이 기능을 PD + Heavy를 사용해서 재현해봅시다.

이 효과를 재현해보려는 이유는 다음과 같습니다:

1. Wwise에는 Sample Divider 플러그인이 없습니다.

2. Sample Divider는 사실 굉장히 유용합니다. 특히 사이버펑크가 다시 인기 있어진다면요 (예를 들어 니어 오토마타나 타이탄 폴 2에서 흔히 등장하는 오작동 효과를 사용하고 싶다면 Sample Divider 없이 어떻게  이 효과를 낼 수가 있을까요?).

걱정 없는 DSP 처리

Patch 파일을 사용해서 '블루프린트'를 제작하기 전에 먼저 Sample Divider가 어떻게 작동하는지 이해해야 합니다.

Sample Divider는 원래의 샘플 레이트(표본화율)보다 낮은 주파수로 입력 신호를 다시 샘플링한 후 보다 낮은 출력 음질로 원본 신호를 왜곡합니다.

다음 이미지는 Sample and Hold (S/H) 모듈이 작동하는 방식을 보여줍니다 (밀러 퍼켓의 '전자 음악의 이론과 기술'에서 가져옴).

image009입력 신호
샘플 클록
샘플 출력

S/H 모듈

위의 이미지에서는 정현파 신호가 S/H 모듈의 IN 지점으로 전송되며, 톱니파  신호가 Sample & Hold 작업을 트리거 하기 위해 OUT 지점으로 전송됩니다. 톱니파 값이 0으로 떨어지면, S/H 오브젝트가 남은 시간 동안 샘플값을 그대로 유지하면서 입력 신호를 다시 샘플링하도록 트리거 합니다. 이렇게 하면 톱니파 주파수가 입력 신호의 샘플 레이트와 비슷해져서 출력 신호가 입력 신호와 비슷해집니다. 그렇지 않으면 디스토션이 더 심하게 되죠.

다음은 VCVRack (물리적 신시사이저와 비슷함)에서 S/H 모듈이 작동하는 방식을 보여줍니다.

SCOPE를 사용하여 계단 모앙을 만드는 법 (중국어를 원하시면 여기를 클릭하여 동영상을 시청하세요)

블루프린트 제작하기

이제 S/H 모듈이 작동하는 방식을 알아보았으니 Patch 파일을 사용해서 '블루프린트'를 제작해봅시다.

Heavy로 Patch 파일을 올바르게 컴파일하기 위해서는 지원되는 PD 오브젝트만 사용해야 합니다. 그렇지 않으면 컴파일 오류가 생기게 됩니다. Heavy가 지원하지 않는 PD 오브젝트의 목록은 제 2부에서 알려드리겠습니다.

대상 플랫폼 (이 경우 Wwise)에서 매개 변수가 보이도록 하기 위해서는 다음 방식으로 매개 변수를 선언해야 합니다.

  • PD에서 Ctrl+1을 눌러 오브젝트를 생성하고 'r SampleRateDivisionL @hv_param 4 24000 24000'을 입력합니다.
  • 'r'은 PD 밖에서 정보를 수신하는 오브젝트를 나타냅니다.
  • SampleRateDivisionL이 플러그인 UI에서 매개 변수 이름을 표시합니다.
  • '@hv_param'은 이 오브젝트가 Heavy에 의해 인터페이스 매개 변수로 컴파일될 것을 의미합니다.
  • 4, 24000, 24000은 최소, 최대, 기본 매개 변수 값입니다.

image014

r은 이 오브젝트가 외부에서 매개 변수 값을 수신함을 의미합니다.
(필수) @hv-param은 입력/출력값이 매개 변수임을 의미합니다. @hv_event는 이 매개 변수가 이벤트임을 의미합니다.
SampleRateDivisionL은 Wwise 안의 플러그인 UI에서 매개 변수 이름을 표시해 줍니다.
최소값
최대값
기본값

1. 좌우 채널에서 입력 신호를 개별적으로 처리하여 더 비대칭적으로 만들기 위해서 각 채널에 매개 변수를 만들어봅시다.

  • phasor~ 오브젝트는 샘플 클록으로 사용되는 톱니파 발진기입니다.
  • samphold~ 오브젝트는 S/H 모듈 자체입니다.
  • dac~ 오브젝트는 오디오 신호가 출력되는 대상입니다.

image015

참고: 이 Patch에서 adc~는 입력 신호를 말합니다. 음원 Patch에 adc~ 오브젝트가 들어있을 경우 효과 플러그인이 생성되며, 그렇지 않을 경우 음원 플러그인이 생성됩니다.

2. Patch 코드가 작동하는 방식을 살펴봅시다.

 

참고: 샘플 레이트를 제어하기 위해 hslider 오브젝트를 추가했습니다. 플러그인을 생성한 후에는 이 오브젝트가 불필요하기 때문에 꼭 제거해 주세요.

3. 이 Patch 파일을 J:\HeavyAudioPlayground\bitcrusher.pd로 저장하세요.

image019

이제 '블루프린트'가 생겼습니다. 이 블로그의 제 2부에서는 Heavy 컴파일러를 사용하여 '자동 워크숍'을 제작하고 이 워크숍을 사용하여 플러그인을 생성하고 게임에 배포하는 법을 알아보겠습니다. 기대해 주세요!

 

이 블로그는 중국어에서 영어로 번역되었으며, 그 후 한글로 번역되었습니다.
 

 

천종 호(Chenzhong Hou)

제품 전문, 개발자 관계 - 대중화권

Audiokinetic

천종 호(Chenzhong Hou)

제품 전문, 개발자 관계 - 대중화권

Audiokinetic

천종 호는 사운드 디자이너 겸 작곡가 및 음악 기술 연구자입니다. Ubisoft Shanghai(유비소프트 상하이)에서 일한 경력이 있으며 저스트 댄스(Just Dance)와 파 크라이(Far Cry) 시리즈의 사운드 디자인에 참여했습니다. 현재 Audiokinetic(오디오키네틱)의 대중화권에서 제품 전문가로 활동하고 있습니다.

댓글

댓글 달기

이메일 주소는 공개되지 않습니다.

다른 글

게임의 사회성에 큰 역할을 하는 음성 채팅: Wwise GME 서비스 시작!

상호작용 요소가 많은 인기 게임의 사운드는 잘 만들어진 게임 자체의 '개별적인 캐릭터'를 뒷받침해줄 뿐만 아니라 더 풍부한 플레이 경험을 제공하고 게임 시스템을 강화하는 데 큰...

8.1.2020 - 작성자: 시몽 아슈비 (Simon Ashby)

라우드니스를 처리하는 최상의 방법, 제 3강: 게임을 위한 측정 가능한 라우드니스 처리

우리는 대부분의 경우 복잡한 사운드를 다룹니다. 게임에서는 각 사운드가 전반적인 출력 라우드니스에 기여합니다. 영화나 텔레비전 제작과 달리 작은 세그먼트의 다이내믹과 주파수 반응을...

27.5.2020 - 작성자: 지에 양 (Jie Yang, 디지몽크)

상호작용 사운드를 통한 기능적 오디오 인터페이스: 자동차 안전, 안내 및 엔터테인먼트 응용을 위한 청각적 디스플레이 사용하기

본 백서에서는, 자동차 HMI(Human-Machine Interface)를 향상시키고 전반적인 사용자 환경을 개선하기 위해 소리가 혁신적인 방법으로 사용되는 고급 사용 사례를...

15.7.2020 - 작성자: 프랑수아 티볼트 (François Thibault)

Hitman 2: 최신 CPU에서 잔향(Reverb) 향상시키기

6 코어와 8 코어 CPU의 대중화는 아직 손대지 않은 여유 처리 능력을 게임에 사용할 수 있게 된다는 것을 의미하며, 그 중 일부를 플레이어의 오디오 환경을 향상시키는 데 사용할...

5.8.2020 - 작성자: 스테판 보예프 (STEPAN BOEV)

합성 만으로 빗소리 만들기

몇 년 전 저는 원하는 모든 사운드를 합성할 수 있을까 하는 궁금증이 생겼습니다. 바람, 새의 노랫소리, 곤충 소리 등 다양한 자연 소리를 합성하기 시작했죠. 이런 작업에서는...

3.9.2020 - 작성자: 알렉산더 킬코(ALEKSANDR KHILKO)

WAAPI 간소화하기

Wwise 저작 API (Wwise Authoring API, WAAPI)를 사용하신 적이 없으시다면 이 글을 통해 사용해볼 기회가 생기기를 바랍니다. 네, 프로그래머가 아닌...

4.11.2020 - 작성자: Adam T. Croft

다른 글

게임의 사회성에 큰 역할을 하는 음성 채팅: Wwise GME 서비스 시작!

상호작용 요소가 많은 인기 게임의 사운드는 잘 만들어진 게임 자체의 '개별적인 캐릭터'를 뒷받침해줄 뿐만 아니라 더 풍부한 플레이 경험을 제공하고 게임 시스템을 강화하는 데 큰...

라우드니스를 처리하는 최상의 방법, 제 3강: 게임을 위한 측정 가능한 라우드니스 처리

우리는 대부분의 경우 복잡한 사운드를 다룹니다. 게임에서는 각 사운드가 전반적인 출력 라우드니스에 기여합니다. 영화나 텔레비전 제작과 달리 작은 세그먼트의 다이내믹과 주파수 반응을...

상호작용 사운드를 통한 기능적 오디오 인터페이스: 자동차 안전, 안내 및 엔터테인먼트 응용을 위한 청각적 디스플레이 사용하기

본 백서에서는, 자동차 HMI(Human-Machine Interface)를 향상시키고 전반적인 사용자 환경을 개선하기 위해 소리가 혁신적인 방법으로 사용되는 고급 사용 사례를...