2016-08-09 1 views
0

aubio 모듈을 사용하여 python 3.5를 사용하여 피치를 추출하고 싶습니다. 그러나 문서를 이해하기는 어렵습니다.Python : Aubio를 사용하여 피치 추출

import numpy 
import math 

sample_rate=44100 
x=numpy.zeros(44100) 
for i in range(44100): 
    x[i]=math.sin(i/225) 

어떻게 배열의 피치를 포함하는 배열을 추출 할 aubio를 사용하는 예에서

은 내가 NumPy와 배열을?

답변

0

다음은 예제입니다 (python2.x 및 python3 작동).

변경된 사인파 생성에 유의하십시오.

#! /usr/bin/env python 

import numpy as np 
import aubio 

sample_rate=44100 
x=np.zeros(44100) 
for i in range(44100): 
    x[i]=np.sin(2. * np.pi * i * 225./sample_rate) 

# create pitch object 
p = aubio.pitch("yin", samplerate = sample_rate) 
# other examples: 
# = aubio.pitch("yinfft", 4096, 512, 44100) 
# = aubio.pitch("yin", 2048, 512, 44100) 
# = aubio.pitch("mcomb", 4096, 512, 44100) 
# = aubio.pitch("schmitt", samplerate = 44100, hop_size = 512, buf_size = 2048) 

# pad end of input vector with zeros 
pad_length = p.hop_size - x.shape[0] % p.hop_size 
x_padded = np.pad(x, (0, pad_length), 'constant', constant_values=0) 
# to reshape it in blocks of hop_size 
x_padded = x_padded.reshape(-1, p.hop_size) 

# input array should be of type aubio.float_type (defaults to float32) 
x_padded = x_padded.astype(aubio.float_type) 

for frame, i in zip(x_padded, range(len(x_padded))): 
    time_str = "%.3f" % (i * p.hop_size/float(sample_rate)) 
    pitch_candidate = p(frame)[0] 
    print (time_str, "%.3f" % pitch_candidate)