MFCC 파이썬 코드 01

 | #Artifical Intelligence#Machine Learning#Audio

MFCC의 파이썬 구현 코드를 살펴보자.

일단 코드를 설명하기 전에, librosa 라이브러리에 대한 간단한 설명이 필요할 것이다.

librosa_logo_text

librosa는 음악과 오디오 분석을 위한 파이썬 라이브러리로, 설치는 여타 라이브러리와 다르지 않게 매우 간단하다. 본인도 아직 librosa에 대한 기능을 완벽하게 이해하거나 숙지하진 못하였지만, 아주x100 유용한 툴임에는 틀림없다.

자 이제 코드를 한번 뜯어보도록 하자. 일단 필요한 라이브러리들을 임포트하도록 하자. matplotlib 라이브러리는 그래프 표현에 사용되고, librosa는 분석에, numpy 최댓값 기능을 사용하기 위하여 임포트하였다.

이제 분석할 오디오 파일을 불러오도록 하자. 이 포스트에서는 Palebabyblue-사랑방 손님을 사용하였다. 작업을 48khz로 하였기에 sample_rate를 48000으로 설정해 주었다.

어려운거 시작이다. 일단 오디오 파일을 time series로 로드하자. librosa.load() 는 다양한 인자를 받는다. 받을 수 있는 파라미터들은 다음과 같다.

path: string, int, pathlib.Path or file-like object.

  • 인풋으로 사용될 오디오 파일의 경로.

sr: number > 0[scalar]

  • 인풋으로 사용될 오디오. 파일의 샘플 레이트(현재 코드에서는 48000)

mono: bool

  • 스테레오를 모노로 변환하기

offset: float

  • 몇 초부터 로드할지 결정

duration: float

  • 몇 초까지 로드할지 결정

dtype: numeric type

  • 반환할 audio time series의 데이터 타입.

res_type: str

  • resample 타입

현재 코드에서는 path와 sr 만 파라미터로 전달해 주었다.
이제 Mel-scaled Spectogram을 구해 보자.

librosa.feature.melspectogram()은 로드된 오디오를 mel-scaled spectogram으로 연산하는 코드이다.
인자로는 auidio time-series, sample rate, spectrogram, FFT window의 길이, hop_length, win_length 등이 있지만, 이 코드에서는 y(audio time-series), sr(sample rate), n_mels(128)만을 전달해 주었다.
n_mels는 생성할 Mel Band의 수를 정해준다.

위 코드에서 Mel Spectrogram을 받았으니, 이제 이를 데시벨 유닛(Decibel Unit)으로 변환해 주어야 한다.

librosa.power_to_db() 함수는 Power spectrogram을 데시벨 유닛으로 변환해 주는데, 여기서 power spectrogram은 amplitude squared이다.
인자로는 S(input power), ref(scalar or callable), amin(최소 threshold) 등을 받지만, 이 코드에서는 input power와 ref 값만을 인자로 전달해 주었다. power spectrogram에 대한 자세한 설명은 다음에 다시 다루도록 하자.

이제 MFCC를 구할 차례다.

librosa.feature.mfcc는 MFCC를 구하는 것으로, 인자로는 y(audio time-series), sr(sample rate), S(log-power Mel spectrogram), n_mfcc(반환할 MFCC의 수) 등이 있지만, 이 코드에서는 S와 n_mfcc 만을 인자로 전달해 주었다.

이제 구할 거 다 구했다. 이제 그래프를 구하기 위해 Delta Feature를 구해보자.

librosa.feature.delta()는 받은 인풋 데이터에 대한 delta matrix를 반환한다.

스크린샷 2021-07-29 오후 8 17 22

요렇게 생겨먹었다. 기분 나쁘게 생겼다.

이제 matplotlib을 사용하여 그래프를 그려보자.

결과물은 아래와 같다.

image

여기서는 짧은 코드를 사용하지 않고 긴 소스를 사용하여 작업하였더니, 보기가 쉽지 않다.

레퍼런스:
MFCC 파이썬 구현과 의미
librosa