본문 바로가기

Project/AI_Human(GAN)

[AI Human 1] Python 음성데이터 (wav 파일) 길이 분포 알아보기

프로젝트를 진행하며 먼저 수집한 음성데이터의 길이 분포를 알아보기 위해 짠 코드.

 

길이 분포가 너무 다른 사람 간에 voice conversion을 시행하면 잘 안될 거 같기도 하고

 

그냥 뭐 하나라도 더 해보려고 해봄.

 

모듈은 soundfile 사용. librosa나 뭐 다른거 이용해도 될 거 같긴 한데 그냥 이걸로 함

import matplotlib.pyplot as plt
import numpy as np
import wave
import soundfile as sf

import os

DIR = "/content/drive/MyDrive/StarGAN-Voice-Conversion-master/data/custom/wav16/"

files = os.listdir(DIR)
files.sort()

lengDict=dict()
for target_id in files[0:]:
  print(target_id)
  subDir=os.listdir(DIR+str(target_id))
  subDir.sort()
  lengDict[target_id]=[]
  for num,file in enumerate(subDir):
    if num%20 ==0:
      print("file :",file)
    f = sf.SoundFile(DIR+str(target_id)+"/"+str(file))

    lengDict[target_id].append(f.frames / f.samplerate)

 

참고로 directory는 다음과 같이 설정 되어있었고 사람별로 모은 데이터 폴더가 p1,p2로 명명되어 있음

print("mean value: ",sum(lengDict['p1'])/len(lengDict['p1']))
plt.hist(lengDict['p1'])
print("sample_n: ",len(lengDict['p1']))
x=list(range(int(min(lengDict['p1'])),int(max(lengDict['p1']))))
plt.xticks(x)
plt.title("Data length distribution of Kim sang joong")
plt.show()

 

첫번째 코드 블럭을 실행하는게 끝나면 'p1', 'p2'를 키로 갖는 딕셔너리 구조 안에 해당 인물의 음성파일 길이가 리스트로 저장되게 됨. 두번째 코드 블럭을 실행하면

이런식으로 (내 프로젝트의 경우에는 p1이 김상중이였음) 음성 길이의 히스토그램과, 음성 길이들의 mean, 샘플 갯수를 출력하게 만듦.