티스토리 뷰

개요

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)

[좌]Scipy, [우]Librosa

두 방법으로 추출한 데이터를 살펴보면 Librosa로 가져온 데이터가 -1 ~ 1의 범위로 정규화가 되어있는 것을 알 수 있습니다.

또한 librosa의 입력에서 sr=None으로 지정하지 않고 임의의 sample_rate를 설정하면 load 할 때 resampling을 수행합니다.

 

참고

- librosa.core.load

- scipy.io.wavfile.read

- Difference between load of librosa and read of scipy.io.wavfile

- Source Code librosa.core.load

 

 

'Audio Signal Processing > Basics' 카테고리의 다른 글

Tacotron이란?  (0) 2020.07.16
WaveNet이란?  (0) 2020.07.16
MFCC(Mel-Frequency Cepstral Coefficient)란 무엇인가?  (0) 2020.04.23
스펙트로그램(Spectrogram)이란?  (1) 2020.04.20
스피커 채널(Speaker Channel)  (0) 2020.03.26
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함