2016-05-01 11 views
1

Ich entschied mich, für Android-Studio zu entwickeln und entwarf eine App, die auf einen Klatsch wartet und dann eine Art von Aktion durchführt. Mein Problem liegt in der Verwendung von TarsosDSP.TarsosDSP Clap Detection

Ich möchte die Listener Klasse als IntentService ausführen, damit ich mein Telefon sperren kann und es immer noch hört. Ich habe jedoch Probleme beim Einrichten der AudioDispatcher und TarsosDSPAudioInputStream.

Hier ist die onHandleIntent bisher:

protected void onHandleIntent(Intent Intent) { 
     AudioDispatcher mDispatcher = new AudioDispatcher(TarsosDSPAudioInputStream, SAMPLE_RATE, BUFFER_OVERLAP); 
     double threshold = 8; 
     double sensitivity = 20; 

     PercussionOnsetDetector mPercussionDetector = new PercussionOnsetDetector(22050, 1024, 
       new OnsetHandler() { 

        @Override 
        public void handleOnset(double time, double salience) { 
         Log.d(TAG, "Clap detected!"); 
        } 
       }, sensitivity, threshold); 

     mDispatcher.addAudioProcessor(mPercussionDetector); 
     new Thread(mDispatcher).start(); 
    } 

ich genauer gesagt denke, ich bin nicht sicher, wie ich das TarsosDSPAudioInputStream Objekt definieren soll. The documentation sagt, es ist eine Schnittstelle, aber ich weiß nicht, wie das funktioniert. Ich bin super neu in Android Studio und Java, habe aber ein Jahr Erfahrung mit C++, da es Teil meines Hauptfachs ist.

Antwort

1

TarsosDSP hat bereits eine Implementierung für Android. Sie haben eine AudioDispatcherFactory Klasse und vonDefaultMicrophone (...) -Methode.

Sie können diese Methode verwenden, um die Audio-Dispatcher-Instanz zu initialisieren und alle verfügbaren Prozessoren hinzuzufügen. In Ihrem Fall PercussionOnsetDetector

AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050,1024,0); 

    double threshold = 8; 
    double sensitivity = 20; 

    PercussionOnsetDetector mPercussionDetector = new PercussionOnsetDetector(22050, 1024, 
      new OnsetHandler() { 

       @Override 
       public void handleOnset(double time, double salience) { 
        Log.d(TAG, "Clap detected!"); 
       } 
      }, sensitivity, threshold); 

    mDispatcher.addAudioProcessor(mPercussionDetector); 
    new Thread(mDispatcher,"Audio Dispatcher").start(); 
+0

Okay, ich verstehe jetzt. Sie überschreiben also, was passiert, wenn der Perkussionsdetektor das Klatschen erkennt. Dann wird diese Implementierung in den "mDispatcher" und "Thread" wird in der allerletzten Zeile gestartet. Das macht Sinn, danke. Es ist immer ein Schmerz, neue Bibliotheken zu verstehen. – Ausche

+0

Kein Schmerz kein Gewinn :) und zum Glück ist Tarsosdsp eine gut dokumentierte Lib. Danke an die Autoren. – uguboz