wav 파일을 지정한 샘플링 레이트로 변환하기Python/Python - 오디오2024. 3. 16. 07:45
Table of Contents
반응형
wav 파일을 지정한 샘픒링으로 변환하는 예제 코드입니다.
2024. 3. 16 최초작성
import librosa import soundfile as sf import numpy as np import os from tqdm import tqdm def resample_and_save(input_folder, output_folder, target_sr, ouput_mono): # 폴더 내의 모든 파일을 대상으로 함 for filename in tqdm(os.listdir(input_folder)): # 파일의 확장자가 .wav인 경우에만 처리 if filename.endswith(".wav"): file_path = os.path.join(input_folder, filename) output_path = os.path.join(output_folder, filename) if ouput_mono: # 오디오 파일을 모노로 로드 y, sr = librosa.load(file_path, sr=None, mono=True) # 모노 데이터를 리샘플링 y_resampled = librosa.resample(y, orig_sr=sr, target_sr=target_sr) # 리샘플링된 모노 음성 파일 저장 sf.write(output_path, y_resampled, target_sr) else: # 스테레오로 오디오 파일 로드 y, sr = librosa.load(file_path, sr=None, mono=False) if y.ndim == 2: # 스테레오 처리 y_resampled = np.array([librosa.resample(y[i, :], orig_sr=sr, target_sr=target_sr) for i in range(y.shape[0])]) else: # 모노 처리 y_resampled = librosa.resample(y, orig_sr=sr, target_sr=target_sr) # 리샘플링된 스테레오 음성 파일 저장 # .T를 사용해 y_resampled를 전치함으로써 채널이 마지막 차원에 오도록 조정 sf.write(output_path, y_resampled.T, target_sr) input_folder_path = "test_wav". # wav 파일이 있는 경로 output_folder_path = "test_8000hz" # 지정한 샘플링 레이트로 변환한 wav 파일 저장할 경로 desired_sample_rate = 8000 # 원하는 샘플링 레이트로 if not os.path.exists(output_folder_path): os.makedirs(output_folder_path) # ouput_mono로 출력 파일을 모노 또는 스테레오로할지 결정합니다. resample_and_save(input_folder_path, output_folder_path, desired_sample_rate, ouput_mono=False) |
반응형
'Python > Python - 오디오' 카테고리의 다른 글
마이크를 사용하여 녹음하는 Python 예제 (1) | 2024.10.03 |
---|---|
WAV, MP3 파일을 일정 길이(단위 초)의 WAV 파일로 분할 (0) | 2024.03.16 |