[Python] 연습

[Python] 목소리 음 높이 확인하기(Voice Pitch Tracker)

Simon Yoon 2022. 8. 16. 22:15

Python 라이브러리 중에 목소리 pitch tracker 가 가능한 라이브러리가 있어서 이에 대해 포스팅하고자 합니다.

 

소개


CREPE 라는 라이브러리는 A Convolutional Representation for Pitch Estimation 이라는 이름의 약자로,

"monophonic pitch tracker based on a deep convolutional neural network operating directly on the time-domain waveform input" 이라고 소개되어 있습니다.

위의 그림과 같이 WAV audio file을 input으로 하면, 6개의 컨볼루션 레이어를 거쳐서 output vector 를 만들어내게 됩니다.

결과적으로 해당 audio signal을 변환하여, 다음과 같은 plot을 생성해낼 수도 있습니다.

 

참고로, Python 3.8 이상의 환경에서, Google Colab에서의 실행을 기준으로 작성하였습니다.

 


Installing CREPE

$ pip install --upgrade tensorflow  # if you don't already have tensorflow >= 2.0.0
$ pip install crepe

tensorflow 가 2.0.0 이상이 아닌 경우 업그레이드 해주시고, crepe를 pip로 설치해주시면 됩니다.

 


파이썬으로 CREPE 사용하기

crepe를 설치했기 때문에 python에서 module을 불러와서 바로 사용할 수 있습니다.


- crepe.predict() 함수 사용 예시

import crepe
from scipy.io import wavfile

sr, audio = wavfile.read('/path/to/audiofile.wav')
time, frequency, confidence, activation = crepe.predict(audio, sr, viterbi=True)

sr 은, Sample rate of the audio samples 를 의미하며 The audio will be resampled if the sample rate is not 16 kHz. 라고 합니다.

crepe.predict() 를 실행하게 되면, time, frequency, confidence, activation 에 대한 수치 결과를 확인하고 csv 파일 형태로도 저장할 수 있습니다. 아래는 예시 입니다.

time,frequency,confidence
0.00,185.616,0.907112
0.01,186.764,0.844488
0.02,188.356,0.798015
0.03,190.610,0.746729
0.04,192.952,0.771268
0.05,195.191,0.859440
0.06,196.541,0.864447
0.07,197.809,0.827441
0.08,199.678,0.775208
...

- process_file() 함수 사용 예시

from crepe.core import process_file
process_file('/your/audio/file/directory.wav',
             save_plot=True, plot_voicing=True)

plot_voicing=True 로 설정하면 visual representation 즉, 위의 예시와 같은 plot을 생성합니다.

save_plot=True 로 설정하면 plot을 생성하고 wav 파일이 있는 경로로 저장합니다.

또한 이렇게 실행한 경우 바로 위의 time, frequency, confidence, activation 에 대한 csv 파일도 생성하여 wav 파일이 위치한 경로로 자동 저장합니다.

 


추가적으로 좀 더 자세한 내용을 알기를 원하시면 아래의 공식 페이지들을 방문하여 확인하시면 됩니다.

감사합니다.

 

Reference

1) https://pypi.org/project/crepe/

2) https://github.com/marl/crepe.git

3) https://arxiv.org/abs/1802.06182

 

'[Python] 연습' 카테고리의 다른 글

Python을 활용한 AI 모델링 - 전처리 파트  (0) 2022.09.11
[Python] SPICE를 사용한 Voice Pitch 감지  (0) 2022.08.21
[AIFB] Pandas DataFrame  (0) 2022.08.14
[AIFB] DataFrame 변형하기  (0) 2022.08.13
[AIFB] Python Basic  (0) 2022.08.12