我决定尝试为android工作室开发,并设计了一个应用程序,可以听一声掌声,然后执行某种动作。我的问题在于使用TarsosDSP。
我想将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对象。文献资料说这是一个接口,但我不知道它是如何工作的。我是Android和java的超级新手,但我对C++有一年的经验,因为这是我专业的一部分。
发布于 2016-05-01 21:46:07
TarsosDSP已经为android提供了一个实现。他们有一个AudioDispatcherFactory类和fromDefaultMicrophone(.)方法。
因此,您可以使用此方法初始化音频dispatcher实例,并向其添加任何可用的处理器。在你的例子中,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();发布于 2022-06-17 21:29:37
接受的答案是正确的,但是它没有检测到
threshold = 8 对我来说。下面的代码很好地检测到了clap:
final AudioDispatcher fromDefaultMicrophone = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
double threshold = 6; // lower it a bit
double sensitivity = 20;
PercussionOnsetDetector mPercussionDetector = new PercussionOnsetDetector(22050, 1024,
new OnsetHandler() {
@Override
public void handleOnset(double time, double salience) {
Log.d(TAG, "Clap detected!");
startAlarm();
}
}, sensitivity, threshold);
fromDefaultMicrophone.addAudioProcessor(mPercussionDetector);
new Thread(fromDefaultMicrophone,"Audio Dispatcher").start();https://stackoverflow.com/questions/36971839
复制相似问题