Impacter 플러그인 블로그 시리즈에 다시 오신 것을 환영합니다. 이전 두 블로그에서는 플러그인의 물리적 매개 변수와 이 매개 변수가 게임의 물리 시스템과 잘 통합될 수 있는 법에 대해 알아보았습니다. 이번 블로그에서는 Impacter의 다른 방면인 교차 합성 기능에 대해 알아봅시다.
첫 번째 Impacter 블로그에서 간단히 봤듯이 서로 다른 사운드의 '타격음(impact)'와 '골격(body)'이라는 요소를 서로 조합하여 맞추면 주어진 사운드로 수많은 변형음을 생성할 수 있습니다. 뿐만 아니라 플러그인에 랜덤 재생 작동 방식도 구현되어서 디자이너가 이 변형음을 쉽게 사용할 수 있죠.
이 교차 합성은 서로 다른 사운드에서 합성 모듈의 '타격음'(사인 곡선 & 필터 뱅크)과 '골격'(자극, excitation) 구성 요소를 가져옴으로써 생성됩니다.
하지만 교차 합성은 아주 광범위한 용어이기 때문에 Impacter의 교차 합성의 특징으로부터 어떤 종류의 변형을 얻을 수 있는지 더 자세히 설명하는 것이 좋을 것 같아요. 저희는 Impacter를 통해 사용자가 만들어낼 수 있는 변형음이 얼마나 현실적이고 일관적이면서도 여전히 원래 사운드와 의미 있게 연관되는지를 보여드리고자 합니다. 그리고 너무 반복적이거나 연관성이 떨어지는 사운드로 인해 게임 플레이가 몰입하는 데 방해가 되면 안된다는 것을 디자이너 분들께 강조해 드리고 싶습니다. 이 글을 통해 곧 알게 되겠지만, Impacter의 교차 합성을 유용하게 설명하는 것은 생각보다 쉽지 않습니다.
변형음 보고 듣기
Impacter는 플러그인으로 로드된 모든 파일을 로드된 다른 사운드와 서로 교차 합성할 수 있게 해줍니다. 예를 들어 12개의 파일을 로드할 경우 최대 144개의 조합을 만들어낼 수 있죠 (사용자가 음원 에디터서 특정 타격음과 골격 구성 요소를 생략할 수 있습니다). 이 경우 사운드 간의 어떤 차이가 있는지 확인하기 위해 144개의 타격음을 다 들어보기는커녕 눈으로 확인하는 것조차 너무 버겁다는 명백한 문제가 생깁니다.
예시:
87번째 파일까지 다 들어보고 난 후 11번째 소리가 어땠는지 기억하기란 거의 불가능하죠..
그렇다면 이 엄청난 양의 사운드를 어떻게 파싱할 수 있을까요?
차원 축소
차원 축소(dimensionality reduction)는 오디오를 더욱 광범위하게 분석하기 위한 기술로서 대량의 사운드를 2D 평면으로 매핑하여 볼 수 있게 해줍니다. 램싼 '하노이' 한트라클 클러스터(Lamtharn “Hanoi” Hantrakul’s Klustr)의 블로그 및 같이 제공되는 도구와 [1] ml4a (Machine Learning for Artists toolkit, 아티스트 머신 러닝 툴키트) 'Audio t-SNE' 뷰어 [2]는 모두 오디오 차원 축소를 잘 보여주는 훌륭한 예시입니다.
타격음의 잠재적 특징 비교
2D 공간에서 사운드를 '비교'하는 방법은 다양합니다. 타격음은 물리적 특성(단단함, 물렁함, 반성, 타격)이나 충돌하는 물체나 표면의 종류(유리, 모래, 나무)와 같은 직관적인 잠재적 특징을 가집니다. 우리가 원하는 잠재적인 특징이 어떤 것인지를 명시적으로(수학적인 용어로) 정의할 수는 없지만 사운드에서 다양한 음향적 특징을 추출해 내서 비교해 볼 수는 있죠.
오디오를 작업할 때 위에 보이는 원시적인 시간 영역 신호를 사용하여 서로 다른 사운드를 비교하는 것은 이상적인 방법이 아닙니다. 다행히 각 사운드를 비교 가능한 형식으로 변환하는 광범위한 오디오 분석 기술이 존재하죠. 이 글을 통해 차차 알게 되시겠지만 어떤 오디오 분석 기술을 선택하느냐에 따라 차원 축소로 생성되는 결과에 직접적인 영향이 미치게 됩니다.
각 변형에 대해 자세히 읽어볼 수 있는 자료가 수도 없이 많지만 이 글에서는 간단히 타격음 유형의 사운드에 적용된 변형의 시각적인 예시를 보여드리려고 합니다. 수많은 변형은 보통 1차원의 오디오 신호를 2D으로 확장하며 각 값의 레벨은 색깔로 표현됩니다.
오디오 특징 |
|
차원 축소는 궁극적으로 사운드의 시각적인 비교를 제공하기 때문에 두 사운드의 STFT가 어떻게 다른지 vs. 두 사운드의 MFCC가 어떻게 다른지를 직관적으로 생각해볼 수 있습니다. 물론 '드럼' 소리, '트럼본' 소리, '자갈' 소리의 잠재적인 특징을 비교하는 것만큼 차이가 크게 표현되지는 않습니다. 하지만 여전히 오디오 특징이 사운드 간의 잠재적인 차이점을 잘 예측해주는 2D 맵을 만들어낼 수도 있죠.
차원 축소의 역할
이제 오디오 특징이 생겼으니 차원 축소를 사용하면 그룹 내 각 사운드와 연관된 숫자를 2개의 숫자로 된 목록이나 쌍으로 '감소'시켜서 2차원 평면의 X-Y 좌표에 간단히 매핑할 수 있게 해줍니다. 하지만 중요한 것은 2D 평면에서 사운드 간의 근접성이나 거리가 사운드의 유의미한 유사점이나 차이점을 반영해야 한다는 것입니다. 어떤 의미로 보면 위에서 살펴본 모든 사운드 (혹은 특징) 간의 시각적인 비교를 단순화하는 방법이라 할 수 있죠.
각각 2초간 지속되며 샘플 레이트가 48k (즉 96000 샘플동안 지속됨) 사운드 그룹이 2D 좌표 그룹으로 감소됩니다
요약하자면 전체 '차원 축소' 파이프라인은 이렇습니다:
사운드 | 특징 추출 | 차원 축소 | 2D 도면 |
Impacter 교차 합성 시각화하기
차원 축소에서 좋은 결과를 얻으려면 충분한 양의 사운드 그룹을 사용하여 작업해야 합니다. 다행히 우리에게는 충분한 Impacter 변형음을 분석해보는 데 최적인, 살아 움직이는 Wwise 프로젝트가 있죠! 바로 Impacter Unreal Demo(임팩터 언리얼 데모)입니다. (블로그를 읽어보세요!)
Impacter 데모 프로젝트에는 여러 Impacter 인스턴스로부터 289개의 사운드가 있어서 총 2295개의 변형음을 조사해볼 수 있습니다. 저희는 실험을 위해 오프라인 버전의 Impacter 알고리즘을 실행해서 모든 변형음을 생성한 후 다양한 오디오 특징 추출 방법을 입력으로 사용하여 다양한 차원 축소 알고리즘으로 도면을 생성한 결과를 비교할 수 있었습니다.
어떤 사운드가 어떤 Impacter 인스턴스에서 나오는지를 알 수 있었기 때문에 각 Impacter SFX에 색깔과 모양을 지정해서 원본음을 변형음과 구별할 수 있었습니다. 아래의 경우 ‘X’는 원본 입력 사운드를 나타내며 동그라미는 Impacter가 만들어낸 변형음을 나타냅니다. 이렇게 색상 지정법을 사용하면 변형음이 얼마나 일관적인지를 보는 데에 도움이 됩니다. 변형음은 원본음과 비슷한 색상을 가질 뿐만 아니라 서로 중복되지 않아서 겹치지 않는 다는 것을 보여줍니다.
여러 가지 오디오 특징과 차원 축소 알고리즘을 사용해보았고 더 넓은 범위의 결과를 이 글 아래 제공해드겠지만, 저희가 가장 선호한 결과는 다음과 같습니다.
모든 경우에 각 Impacter 인스턴스의 원본음과 변형음 사이에 최소한의 균형이 있다는 것을 알 수 있었습니다 (색깔별로). Impacter는 단지 '랜덤'성을 만들어내는 것만이 아닙니다. 색상 분류된 사운드가 여전히 함께 모여있다는 것을 통해 변형음과 원본음 간에 일관성이 있다는 것을 확인할 수 있죠.
STFT 특징에서의 t-SNE와 도면을 가까이 살펴보면 각 Impacter 사운드의 STFT 간 변형음의 혼합된 정도를 볼 수 있습니다. 특히 오른쪽 아래 있는 콘크리트, 나무, 금속 소리는 원본음 주위의 변형음이 거의 균일하게 변위된 이상적인 결과를 보여줍니다.
반면 X의 윗쪽에 점들이 서로 거의 겹쳐 있는 와인잔이나 대포 소리는 각 변형음의 STFT가 원본음과 훨씬 더 비슷하다는 것을 보여줍니다.
상대적으로 왼쪽 위에 있는 자갈 소리는 중간 지대에 있어서 변형음이 있기는 하지만 각 원본 파일 주변에 있는 변형음이 변형음-원본 파일이 옹기종기 모여 있는 것과는 다르다는 것을 보여줍니다.
하지만 'mfcc++' 도면과 같이 다른 오디오 특징은 더 작은 차이점을 강조할 수 있습니다. 첫 번째와 두 번째 델타를 포함하면 ('mfcc++'의 '++' 부분) [3] 와인잔처럼 STFT 도면에서는 더 밀집되어 있던 파일들이 확산됩니다.
이제 모든 변형음을 한 번에 볼 수 있을 뿐만 아니라 줌 인 해서 특정 사운드가 어떻게 다른지를 가까이 확인할 수 있도록 2D 공간에서 사운드 간의 차이점을 확장시켜주는 도면을 찾았습니다. 보기에도 멋질 뿐만 아니라 Impacter가 어떻게 작동하는지를 잘 보여주죠.
Impacter는 타격음을 모델링하는 분석 및 합성 시스템이며, 알고리즘에 의해 모델링되는 서로 다른 입력 사운드의 질에 차이가 있을 수 있습니다. 이 도면을 사용하면 Impacter에 의해 사운드가 얼마나 잘 모델링되는지를 간단하게 측정해볼 수 있죠. 보시다시피 유리 소리는 서로 많이 다르기 때문에 Impacter에서 모델링하기에 금속, 나무, 콘크리트 소리보다는 덜 이상적이라고 할 수 있습니다. 뻔한 소리로 들릴 수도 있지만 Impacter에 사용할 사운드를 선택할 때 교차 합성 기능의 효율성이 사운드에 따라 다르다는 것을 염두에 두어야 합니다. 간단히 말해 어떤 사운드는 더 변형될 수도 있고 어떤 사운드는 덜 변형될 수 있죠!
물론 이 중 어느 것도 Impacter의 정확성에 대한 공식적인 근거는 아닙니다. 직관적인 방식으로 많은 사운드의 모든 차이점을 전달하기 위한 일화이자 흥미로운 데이터 시각화 기술을 실험하기 위한 변명이랄까요.
그 외 의문점들
저희는 Impacter가 할 수 있는 일을 시각화하기 위해 차원 축소를 사용하여 여러 다른 것들을 비교해봤습니다. 그 중 한 가지로 타일을 밟는 88개의 서로 다른 발자국 소리로부터 생성된 변형음을 시각화해서 총 7744 타일 사운드를 확인해봤죠. 마찬가지로 UMAP로 도면화된 ‘MFCC++’ 특징은 원본음 간에 일어나는 변형음을 확인하여 Impacter의 유용함을 잘 볼 수 있었습니다. 이 실험에서는 Impacter에 넣은 88개의 사운드 중 일부 사운드만으로 기존의 88개의 사운드가 가진 비슷한 범위의 변형음을 재구성할 수 있다는 것이었습니다. 두 번째 이미지는 22개의 원본음만으로 만든 변형음과 88개의 사운드로 만든 변형음을 보여줍니다.
88개의 발자국 소리로부터 만든 변형음 | 22개의 하위 그룹 발자국 소리로부터 만든 변형음 |
크게 보시려면 이미지를 우클릭하여 '새로운 탭에서 열기'를 선택해 주세요.
결론
이 블로그를 통해 Impacter의 교차 합성 알고리즘이 어떤 종류의 변형음을 만들어내는지에 대한 해답에 도움이 되었으면 합니다. 위에서 말씀드렸듯이 이 글은 모든 변형음이 정확히 다르다는 철저하거나 통계적인 증거는 아닙니다. 하지만 플러그인이 만들어낼 수 있는 다양한 종류의 사운드를 직관적으로 살펴봄으로써 여러분이 Impacter를 사용할 때 더 나은 아이디어를 얻는 데에 도움이 되기를 바랍니다.
더 자세한 정보…
데이터 형식에 관한 메모
차원 축소 알고리즘은 단순히 데이터 목록 혹은 벡터의 모음을 받습니다. 차원 축소 알고리즘은 입력 데이터에 영향을 받지 않으며 STFT나 MFCC와 같은 2D 입력 데이터의 차원을 고려하지 않기 때문에 실제로 2D 데이터를 평면화할 수 있을 뿐만 아니라 알고리즘을 제공하기 위해 위에서 제공하는 여러 특징을 한 목록으로 연결할 수도 있습니다.
차원 축소 알고리즘
기존의 차원 축소 알고리즘 중 많은 알고리즘이 데이터 목록이나 벡터의 모음을 단순히 받아들입니다. 저희 알고리즘의 경우 첫 번째 단계에서 각 사운드의 특징이 추출됩니다.
파이썬(Python)의 sklearn 과 umap-learn 패키지(pip에서 제공)는 저희가 사용할 수많은 차원 축소 알고리즘의 구현을 제공합니다. 마찬가지로 이러한 알고리즘의 작동 방식에 관한 정보가 수도 없이 많지만 이 글에서는 추가로 읽을 링크만 제공해드리겠습니다.
t-distributed Stochastic Neighbor Embedding (t-SNE, t-분포 확률적 임베딩)
from sklearn.manifold import TSNE
tsne = TSNE(
n_components=tsne_dimensions,
learning_rate=200,
perplexity=tsne_perplexity,
verbose=2,
angle=0.1).fit_transform(data)
import umap
umap = umap.UMAP(
n_neighbors=50,
min_dist=0.5,
n_components=tsne_dimensions,
metric='correlation').fit_transform(data)
Principal Component Analysis (PCA, 주성분 분석)
from sklearn.decomposition import PCA
pca= PCA(n_components=tsne_dimensions).fit_transform(data)
Multidimensional Scaling (MDS, 다차원 척도법)
from sklearn.manifold import MDS
mds = MDS(
n_components=tsne_dimensions,
verbose=2,
max_iter=10000).fit_transform(data)
모든 결과
Impacter 시험에서는 위에 있는 4개의 차원 감소 알고리즘을 비교했습니다. 저희는 다양한 오디오 특징 세트를 입력으로 하여 각 알고리즘을 실행했습니다. STFT, MFCC, 델타와 델타-델타가 추가된 MFCC (mfcc++) [3], 그리고 마지막으로 다양한 오디오 특징의 연속(RMS, 스펙트럴 중심, 스펙트럴 크레스트, 스펙트럴 플럭스, 스펙트럴 롤오프, 제로 크로싱 레이트)을 입력으로 사용했습니다.
STFT | mfcc | mfcc++ | “오디오 특징 목록” | |
t-SNE | ||||
MDS | ||||
PCA | ||||
UMAP 50 0.5 |
크게 보시려면 이미지를 우클릭하여 '새로운 탭에서 열기'를 선택해 주세요.
위에서 볼 수 있듯이 STFT와 MFCC++ (델타와 델타-델타)에서 실행된 UMAP와 t-SNE 알고리즘이 가장 유용한 도면을 제공했습니다.
참고 자료:
[1] - Hantrakul, L. “H. (2017, December 31). klustr: a tool for dimensionality reduction and visualization of large audio datasets. Medium. https://medium.com/@hanoi7/klustr-a-tool-for-dimensionality-reduction-and-visualization-of-large-audio-datasets-c3e958c0856c
[2] - Audio t-SNE. https://ml4a.github.io/guides/AudioTSNEViewer/
[3] -Bäckström, T. (2019, April 16). Deltas and Delta-deltas. Aalto University Wiki. https://wiki.aalto.fi/display/ITSP/Deltas+and+Delta-deltas
댓글