Audio Signal Processing/Basics
librosa.load와 scipy.io.wavfile.read의 차이점
JG Ahn
2020. 7. 7. 20:05
개요
wav파일을 읽을 때 사용하는 대표적인 라이브러리로는 librosa와 scipy가 있습니다.
본 글에서는 두 방법 간에 어떤 차이가 있는지 알아보겠습니다.
요약
- librosa로 데이터를 읽으면 데이터의 범위가 -1 ~ 1의 범위로 정규화된다
- librosa의 입력에서 sr=None으로 지정하지 않고 임의의 sample_rate를 설정하면 load 할 때 resampling을 수행합니다.
librosa와 scipy 차이점
각 방법으로 wav 파일을 읽고 데이터를 살펴보겠습니다.
wav 파일은 Sample_rate 22050, 30초의 길이를 가지고 있습니다.
librosa에서 파일을 load 할 때 sr=None으로 지정하면 wav파일의 sr이 자동으로 지정됩니다.
from scipy.io import wavfile
import librosa
import numpy as np
import seaborn as sns
wav_file = 'blues.00000.wav'
scipy_sr, scipy_wav = wavfile.read(wav_file)
librosa_wav, librosa_sr = librosa.load(wav_file, sr=None)
# Scipy
print('scipy_wav.shape : ', scipy_wav.shape)
print('scipy_wav[0].type : ', type(scipy_wav[0]))
print('scipy_sr : ', scipy_sr)
print()
# Librosa
print('librosa_wav.shape : ', librosa_wav.shape)
print('librosa_wav[0].type : ', type(librosa_wav[0]))
print('librosa_sr : ', librosa_sr)
--> scipy_wav.shape : (661794,)
--> scipy_wav[0].type : <class 'numpy.int16'>
--> scipy_sr : 22050
--> librosa_wav.shape : (661794,)
--> librosa_wav[0].type : <class 'numpy.float32'>
--> librosa_sr : 22050
결과를 확인해보면 두 방법이 만들어내는 값의 type이 다른 것을 알 수 있습니다.
scipy와 librosa로 가져온 데이터의 분포를 살펴보겠습니다.
sns.distplot(scipy_wav)
sns.distplot(librosa_wav)
두 방법으로 추출한 데이터를 살펴보면 Librosa로 가져온 데이터가 -1 ~ 1의 범위로 정규화가 되어있는 것을 알 수 있습니다.
또한 librosa의 입력에서 sr=None으로 지정하지 않고 임의의 sample_rate를 설정하면 load 할 때 resampling을 수행합니다.
참고
- Difference between load of librosa and read of scipy.io.wavfile
- Source Code librosa.core.load