음성처리 (1) - 오디오 파일 타입 변환 코드

🙂·2023년 8월 5일
0
post-thumbnail
음성데이터를 다루다보면 데이터의 타입을 만져야 할 경우가 종종 있다. 2022년도에 진행했던 국가과제에서 음성 데이터를 납품하는 일을 하였고, 그 과정에서 음성데이터를 전체적으로 손봐야하는 경우가 있었는데, 그때 썼던 코드들이다.

위의 이미지는 골드웨이브라는 음성 파일 프로그램이다. 간단하게 Trim하거나 두 개 이상의 음성파일을 동시에 틀어볼 수 있고 음성 파장을 볼 수 있어서 주로 활용하였다. 과제가 진행되는 동안 가장 크게 공들여서 작업했던 부분이 음성 파일 앞 뒤에 0.2~0.5초의 무음구간을 삽입하는거였고, 그럴려면 시각적으로 보는게 검수하기 편했었다.

샘플레이트, 비트, 채널이 무엇인지는 링크를 참조하자.

from pydub import AudioSegment
import matplotlib.pyplot as plt
import scipy.fftpack
import scipy.io.wavfile
import numpy as np
import os
import shutil

def print_wavfile_info(filepath):
    wav = AudioSegment.from_wav(filepath)
    
     # 샘플레이트(44100, 24000, 8000 등)
    print("SampleRate : ", wav.frame_rate)
    
     # 1은 8비트, 2는 16비트
    print("SampleByte : ",  wav.sample_width*8, "bit")
    
     # channel * 샘플의바이트수가 됨. 채널은 1은 모노, 2는 스테레오
    print("Channel : ", int(wav.frame_width/wav.sample_width))
#샘플링레이트 변경
def wavfile_sampling_change(filepath, frame_rate):
    wav = AudioSegment.from_wav(filepath)
    wav = wav.set_frame_rate(frame_rate)
    wav.export(filepath, format='wav')
 
#비트레이트 변경
def wavfile_bitrate_change(filepath, bitrate):
    wav = AudioSegment.from_wav(filepath)
    wav = wav.set_sample_width(sample_width=bitrate)
    wav.export(filepath, format='wav')

#채널 변경(스테레오 --> 모노 변경)
def wavfile_channel_change(filepath, channel): # 1은 모노 2는 스테레오 
    wav = AudioSegment.from_wav(filepath)
    wav = wav.set_channels(channels=channel)
    wav.export(filepath, format='wav')

result_path=os.getcwd()+'\\result_files'
raw_file_folderlist=os.listdir(os.getcwd()+'\\raw_files')

for i in raw_file_folderlist:
    file_list=os.listdir(os.getcwd()+'\\raw_files'+'\\'+i)
    
    for j in file_list:
        src=os.getcwd()+'\\raw_files'+'\\'+i+'\\'+j
        if not os.path.exists(result_path+'\\'+i):
            os.mkdir(result_path+'\\'+i)
        shutil.copy2(src, result_path+'\\'+i)
        
        dst=result_path+'\\'+i+'\\'+j
        
        wavfile_sampling_change(dst, 16000) #44.1 khz --> 16 khz 로 변경
        wavfile_channel_change(dst, 1)# stereo --> mono 변경
        #wavfile_bitrate_change(filepath, bitrate)

1개의 댓글

comment-user-thumbnail
2023년 8월 5일

좋은 정보 얻어갑니다, 감사합니다.

답글 달기