2015-07-05 10 views
5

Piszę na progu, który analizuje wysokość dźwięku pliku dźwiękowego. Natknąłem się na bardzo dobry API o nazwie "TarsosDSP", który oferuje różne analizy nachylenia. Jednak mam problem z jego konfiguracją. Czy ktoś może mi pokazać kilka szybkich wskazówek, jak korzystać z tego API (szczególnie klasy PitchProcessor)? Niektóre fragmenty kodu byłyby niezwykle doceniane, ponieważ jestem naprawdę nowy w analizie dźwięku.Analiza nachylenia TarsosDSP dla manekinów

Dzięki

EDIT: znalazłem jakiś dokument na http://husk.eecs.berkeley.edu/courses/cs160-sp14/index.php/Sound_Programming gdzie istnieją pewne przykład kodu, który pokazuje w jaki sposób skonfigurować PitchProcessor ...

int bufferReadResult = mRecorder.read(mBuffer, 0, mBufferSize); 
// (note: this is NOT android.media.AudioFormat) 
be.hogent.tarsos.dsp.AudioFormat mTarsosFormat = new be.hogent.tarsos.dsp.AudioFormat(SAMPLE_RATE, 16, 1, true, false); 
AudioEvent audioEvent = new AudioEvent(mTarsosFormat, bufferReadResult); 
audioEvent.setFloatBufferWithByteBuffer(mBuffer); 
pitchProcessor.process(audioEvent); 

... Jestem zupełnie zagubiony, co dokładnie są mBuffer i mBufferSize? Jak znaleźć te wartości? I gdzie mogę wprowadzić moje pliki audio?

Odpowiedz

7

Podstawowy przepływ dźwięku w środowisku TarsosDSP jest następujący: przychodzący strumień audio pochodzący z pliku audio lub mikrofonu jest odczytywany i dzielony na ramki np. 1024 próbki. Każda ramka przechodzi przez rurociąg, który modyfikuje lub analizuje (na przykład analizę nachylenia).

W oprogramowaniu TarsosDSP AudioDispatcher odpowiada za obcięcie dźwięku w ramkach. Zawijany jest także ramka audio do obiektu AudioEvent. Ten obiekt AudioEvent jest wysyłany za pośrednictwem łańcucha AudioProcessors.

Więc w kodzie cytowanym mBufferem jest ramka audio, mBufferSize to rozmiar bufora w próbkach. Możesz sam wybrać rozmiar bufora, ale przy wykrywaniu wysokości nachylenia 2048 próbek jest uzasadnione.

Do wykrywania skoku można zrobić coś takiego z biblioteką TarsosDSP:

PitchDetectionHandler handler = new PitchDetectionHandler() { 
     @Override 
     public void handlePitch(PitchDetectionResult pitchDetectionResult, 
       AudioEvent audioEvent) { 
      System.out.println(audioEvent.getTimeStamp() + " " pitchDetectionResult.getPitch()); 
     } 
    }; 
    AudioDispatcher adp = AudioDispatcherFactory.fromDefaultMicrophone(2048, 0); 
    adp.addAudioProcessor(new PitchProcessor(PitchEstimationAlgorithm.YIN, 44100, 2048, handler)); 
    adp.run(); 

W tym kodzie pierwszy treser, który jest tworzony po prostu drukuje wykrytej boiska. Model AudioDispatcher jest podłączony do domyślnego mikrofonu i ma bufor 2048. Procesor audio wykrywający tonację jest dodawany do AudioDispatcher. Używany jest również przewodnik.

Ostatnia linia rozpoczyna proces.

+0

Dziękuję bardzo, proszę pana! – STELLARWIND

+0

Dzięki @Joren Naprawdę doceniam pracę, którą wykonałeś na Tarsos. Jako heads-up dla innych, System.out.println() brakuje "+" i musiałem dodać częstotliwość próbkowania jako pierwszy argument do .fromDefaultMicrophone() – Sam