서론

가끔 오디오를 입/출력 할 수 있는 모델을 쓰고 싶을 때가 생긴다.

그럴 때 의존성으로 librosa 라는 놈이 걸려있는 것을 자주 볼 수 있다.

설치할 때 오만 가지 에러를 뱉어서 사람 열불나게 하는 놈인데

그래서 이게 대체 뭐 하는 놈이기에 나한테 이 고생을 시키는가? 싶어 검색해 보면 오디오와 spectrogram, 좀 더 정확히는 MFCC간의 변환과 그 처리를 위해 쓰는 라이브러리라고 한다. 이게 무슨 말일까?

그냥 .mp3(.wav) 파일 쓰면 안됨?

컴퓨터는 소리를 들을 수 없다. 정확히 말하면 가능하기는 한데 feasible하지 않다. 소리는 결국 파동이고, 파동은 시간을 축으로 정의된다. 시간(또는 순서)에 따라 나열된 데이터를 처리하려면 결국 “어디부터 어디까지가 동시인가?” 라는 질문에 대한 답이 필요하다. 보통 (AI 이전 시대의) 음악 파일 처리 SW에서는 이 행위를 quantization이라고 불렀는데, 슬프게도 사용자가 직접 입력한 메타데이터에 전적으로 의존할 수밖에 없었다.

그렇지만 AI 모델은 그런 식으로 동작해서는 안 된다. 가령 영상 처리 모델을 생각해 보자. 영상은 결국 아주 빠르게 찍어 놓은 사진들의 모음이 아닌가. 아주 naive한 접근은 따라서, 그 개개의 사진들을 전부 일자로 나열한 뒤 모델에 태우는 것이다. 영상처리 분야는 잘 모르긴 하지만, 아마도 이렇게 하진 않을 것 같다. 왜냐면 영상 파일에 따라 다르겠지만 24프레임부터 수백 프레임에 달하는 슬로모션 영상들도 존재하기 때문이다.

그렇다면 음악 파일은 어떨까? 여러분이 듣는 상업 음반은 일반적으로 44.1k 또는 48k의 프레임 레이트로 배포된다는 사실을 혹시 알고 있다면, 영상보다도 오디오가 사정이 훨씬 나쁘다는 것을 어렵지 않게 짐작할 수 있을 것이다. 심지어 그것은 전문가의 워크스테이션 컴퓨터와 그 소프트웨어에서 96k, 때로는 192k에서 작업되다가 발매 직전 단계에서 다운샘플링하는 것이다. 초당 19만 2천 개의 토큰이 들어오는데 전체 인풋 길이가 4분이라는 것은 재앙에 가깝다. 그리고 이것은 고작 한 개의 파일에 불과하다.

인정하자. 우리는 모든 ‘quantum’을 일일이 볼 수 없다. 동시성에 대한 적당한 정의 없이는 다음 단계로 넘어갈 수 없다. 다행히도, 수학적으로 그럴듯한 접근이 하나 존재한다.

푸리에 변환

이라는 말을 혹시 들어본 적이 있는가? 공학수학 시간이 아니니까 간단하게만 설명하자면

image.png

얘를

image.png

이렇게 바꾸는 행위이다.