반응형
오디오를 사용한 딥러닝을 하던 중,
오디오를 잘라야 하는 상황이 발생하였습니다.
참고 링크에서 librosa 라이브러리를 이용하여 오디오를 자르는 방법은 나와 있었지만,
제가 원하는 것은 4초 간격으로 0초부터 4초, 1초부터 5초, .. 등으로 잘라서,
1분짜리 오디오의 경우 56초부터 1분까지의 오디오로 총 57개의 파일로 저장하는 법의 스크립트를 공유합니다.
이를 위해서는, 오디오 파일의 길이를 측정하는 방법을 구하였고,
SoundFile이라는 라이브러리를 사용하여, frame 수와 samplerate를 활용하였습니다.
import os
import librosa
import numpy as np
import soundfile as sf
def trim_audio_data(audio_file, save_file, start_time=0, sec=4):
sr = 44100
y, sr = librosa.load(audio_file, sr=sr)
ny = y[start_time*sr:sr*(sec + start_time)]
sf.write(save_file + f"_{start_time}.wav", ny, sr)
base_path = "dataset/"
audio_path = base_path + "audio/"
save_path = base_path + "save/"
audio_list = os.listdir(audio_path)
for audio_name in audio_list:
if audio_name.find('wav') != -1:
audio_file = audio_path + "/" + audio_name
save_file = save_path + "/" + aduio_name[:-4]
f = sf.SoundFile(audio_file)
f_sec = f.frames // f.samplerate
print(audio_file, " seconds, ", f_sec)
sec = 4
for i in range(f_sec - sec):
trim_audio_data(audio_file, save_file, i, sec)
참조 : 음성 데이터 자르기 , librosa 에러 수정
반응형
'Audio Processing' 카테고리의 다른 글
소리 데이터를 활용한 딥러닝 - Mel Spectrogram (0) | 2022.07.22 |
---|