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 |