2016-05-01 2 views
1

Я решил попробовать разработку для студии android и разработал приложение, которое прослушивает хлопок, а затем выполняет какое-то действие. Моя проблема заключается в использовании TarsosDSP.TarsosDSP Clap Detection

Я хочу запустить класс Listener как IntentService, поэтому я могу заблокировать свой телефон, и он все равно слушает. Однако у меня возникают проблемы с настройкой AudioDispatcher и TarsosDSPAudioInputStream.

Вот onHandleIntent до сих пор:

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(); 
    } 

Я думаю, более конкретно, я не знаю, как я должен определить TarsosDSPAudioInputStream объект. The documentation говорит, что это интерфейс, но я не знаю, как это работает. Я супер новичок в Android Studio и java, но имею год опыта работы с C++, поскольку это часть моего основного.

ответ

1

TarsosDSP уже имеет реализацию для android. Они имеют класс AudioDispatcherFactory и методDefaultMicrophone (...).

Таким образом, вы можете использовать этот метод для инициализации экземпляра аудиодиспетчера и добавления к нему любых доступных процессоров. В вашем случае 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

Хорошо, теперь я понимаю. Поэтому вы переопределяете то, что происходит, когда детектор перкуссии обнаруживает хлопок. Затем эта реализация помещается в 'mDispatcher', а' Thread' запускается в последней строке. Это имеет смысл, спасибо. Это всегда боль, пытаясь понять новые библиотеки. – Ausche

+0

Без боли нет выгоды :) и, к счастью, tarsosdsp - хорошо документированная библиотека. благодаря авторам. – uguboz