2016-04-29 199 views
0

我发现了一些使用aubio获取音调的示例代码,但我不确定要更改哪个以使其以第二增量显示音高:如何使用aubio获取python中的一系列音调中的每个音调的频率

import sys 
from aubio import source, pitch, freqtomidi 

if len(sys.argv) < 2: 
    print "Usage: %s <filename> [samplerate]" % sys.argv[0] 
    sys.exit(1) 

filename = sys.argv[1] 
downsample = 1 
samplerate = 44100/downsample 
if len(sys.argv) > 2: samplerate = int(sys.argv[2]) 

win_s = 4096/downsample # fft size 
hop_s = 512/downsample # hop size 


s = source(filename, samplerate, hop_s) 
samplerate = s.samplerate 

tolerance = 0.8 


pitch_o = pitch("yin", win_s, hop_s, samplerate) 
pitch_o.set_tolerance(tolerance) 

pitches = [] 
confidences = [] 

total_frames = 0 
while True: 
    samples, read = s() 
    pitch = pitch_o(samples)[0] 
    pitch = int(round(pitch)) 
    confidence = pitch_o.get_confidence() 
    #if confidence < 0.8: pitch = 0. 
    print "%f %f %f" % (total_frames/float(samplerate), pitch, confidence) 
    pitches += [pitch] 
    confidences += [confidence] 
    total_frames += read 
    if read < hop_s: break                                             

另外,我可以直接从输出而不是wav文件做到这一点吗?

回答

0

该脚本(也在aubio/python/demos/demo_pitch.py)为每个音频帧提取音调候选(这里为512./44100 * 1000 = 11.6ms)。

显示在第二个增量

在球场你是什么意思“在第二增量”是什么意思?每个连续1秒长的段的“总体”音高?你可以拿np.median(pitches)

每个音符改变后的新音高?您可以处理输出并将类似的音调候选组合成音符。

或直接使用aubionotes

直接从输出

从其中 “产出” 你的意思是这样做呢?

另请参阅run aubiopitch continuously on a file descriptor

请问你的aubio问题@https://github.com/aubio/aubio