728x90

오늘 포스트 할 내용은 flac 데이터셋을 wav로 변환하여 진행하는 것이다.

 

일반적으로 음성 처리 분야에서 22.5kHz, 16kHz를 많이 사용하는데,

 

TIDIGITS 데이터셋 같은 경우 20kHz로 되어 있다.

 

또한 flac 확장자로 되어 있는데, 이번 포스팅의 목표는 1) convert flac to wav, 2) downsampling 20kHz -> 16kHz 이다.

 

 

먼저 저장할 경로를 설정해주고, flac 음성을 불러온다.

그 뒤 음성의 path와 file id를 얻는다.

file id 는 file.flac 으로 되어 있기 때문에 [:-5]로 name만 얻어오는 작업을 하고,

soundfile 의 read 함수를 이용하여 data부분을 get한다.

 

그 뒤에 1단계인 flac -> wav 로 저장을 진행한다.

 

이 데이터셋은 20000Hz이기 때문에 2번째로 해야 할 일은 librosa로 wav를 read 한 뒤 16000으로 downsampling을 진행한다.

 

전체 코드는 아래와 같다.

import soundfile as sf
import librosa
import os
save_dir = '/mnt/junewoo/speech/TIDIGITS/tidigits_flac/' # save dir

w_flac = '/mnt/junewoo/speech/TIDIGITS/tidigits_flac/data/adults/train/woman/sp/o31oa.flac' # read file
m_flac = '/mnt/junewoo/speech/TIDIGITS/tidigits_flac/data/adults/train/man/st/ooo5a.flac'

_, w_id = os.path.split(w_flac) # get dir, file name for saving
_, m_id = os.path.split(m_flac)

w_id = w_id[:-5] # change name o31oa.flac -> o31oa
m_id = m_id[:-5] # change name ooo5a.flac -> ooo5a

w_data, w_sr = sf.read(w_flac) # data, sampling rate divide
m_data, m_sr = sf.read(m_flac)


sf.write(save_dir + w_id + '.wav', w_data, w_sr, format='WAV', endian='LITTLE', subtype='PCM_16') # file write for wav
sf.write(save_dir + m_id + '.wav', m_data, m_sr, format='WAV', endian='LITTLE', subtype='PCM_16')

w, sr = librosa.load(save_dir+w_id+'.wav', sr=20000)
m, _ = librosa.load(save_dir+m_id+'.wav', sr=20000)

g_sr = 16000 # goal sampling rate

w_resample = librosa.resample(w, sr, g_sr)
m_resample = librosa.resample(m, sr, g_sr)

sf.write(save_dir + w_id + '_resample16k.wav', w_resample, g_sr, format='WAV', endian='LITTLE', subtype='PCM_16') # file write for wav
sf.write(save_dir + m_id + '_resample16k.wav', m_resample, g_sr, format='WAV', endian='LITTLE', subtype='PCM_16')

 

데이터 크기는 아래의 사진과 같다.

 

o31oa.wav 의 size는 73인데, 20kHz 에서 16kHz로 즉 20%만큼 downsampling을 해버렸기 때문에

73 * 0.8  = 58.4 ==> 58kB의 크기를 갖는다.

 

그러나 실제로 음성을 들어보면 큰 차이가 없음을 알 수 있다.

728x90

+ Recent posts