반응형

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)



반응형

문제 발생시 지나치지 마시고 댓글 남겨주시면 가능한 빨리 답장드립니다.

도움이 되셨다면 토스아이디로 후원해주세요.
https://toss.me/momo2024


제가 쓴 책도 한번 검토해보세요 ^^

+ Recent posts