본문 바로가기

wav 파일을 지정한 샘플링 레이트로 변환하기

webnautes 2024. 3. 16.
반응형

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://freewriting2024.tistory.com


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

댓글