2016-04-29 11 views
0

Ich habe einen Beispielcode gefunden, um Tonhöhe mit aubio zu bekommen, aber ich bin mir nicht sicher, was geändert werden soll, um die Tonhöhe in zweiten Schritten anzuzeigen :Wie man Aubio benutzt, um die Frequenz jedes Tons in einer Reihe von Tönen in Python zu erhalten

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                                             

Ist es mir auch möglich, dies direkt von der Ausgabe anstelle einer WAV-Datei zu tun?

Antwort

0

Dieses Skript (ebenfalls unter aubio/python/demos/demo_pitch.py) extrahiert Tonhöhenkandidaten für jeden Audioframe (hier 512./44100 * 1000 = 11.6ms).

Anzeige der Tonhöhe in Sekunden-Schritten

Was meinst du mit "in-Sekunden-Schritten"? Die "Gesamt" Tonhöhe für jede aufeinanderfolgende 1 Sekunde lange Segmente? Sie könnten np.median(pitches) nehmen.

Die neue Tonhöhe nach jeder Notenänderung? Sie könnten die Ausgabe bearbeiten und ähnliche Tonhöhenkandidaten in Noten gruppieren.

Oder einfach aubionotes direkt verwenden.

dies vom Ausgang direkt tun

Von der "Ausgang" meinen Sie das?

Siehe auch run aubiopitch continuously on a file descriptor.

Bitte fragen Sie Ihre aubio Fragen @https://github.com/aubio/aubio.