2016-04-29 10 views
0

aubioを使用してピッチを取得するサンプルコードが見つかりましたが、ピッチを2番目のインクリメントで表示するにはどうすればよいかわかりません:aubioを使用して、一連のトーンで各トーンの周波数を取得する方法

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を参照してください。

オービオの質問@https://github.com/aubio/aubioにお尋ねください。

関連する問題