停止失败,带有TarsosDSP的Android应用程序
我想在此链接上使用TarsosDSP包实现一个android应用程序: 我为startRecording和stopRecording创建了两个按钮,我的应用程序会“开始”,但不会“停止”。我的主要活动是:停止失败,带有TarsosDSP的Android应用程序,android,button,audio,record,Android,Button,Audio,Record,我想在此链接上使用TarsosDSP包实现一个android应用程序: 我为startRecording和stopRecording创建了两个按钮,我的应用程序会“开始”,但不会“停止”。我的主要活动是: public class MainActivity extends ActionBarActivity { private Button start; private Button stop; MicrophoneAudioDispatcher audioDispatch
public class MainActivity extends ActionBarActivity {
private Button start;
private Button stop;
MicrophoneAudioDispatcher audioDispatcher = new MicrophoneAudioDispatcher(44100, 2048, 1024);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setButtonHandlers();
start = (Button) findViewById(R.id.btStart);
stop = (Button) findViewById(R.id.btStop);
}
private void setButtonHandlers() {
((Button)findViewById(R.id.btStart)).setOnClickListener(btnClick);
((Button)findViewById(R.id.btStop)).setOnClickListener(btnClick);
}
private void startRecording() {
audioDispatcher.run();
}
private void stopRecording() {
audioDispatcher.stop();
}
private View.OnClickListener btnClick = new View.OnClickListener() {
public void onClick(View v) {
switch(v.getId()){
case R.id.btStart:{
startRecording();
break;
}
case R.id.btStop:{
stopRecording();
break;
}
}
};
};
}
“MicrophoneAudioDispatcher”类位于此链接上:
我不理解这个错误。有人能帮我吗
提前感谢。首先,您提到的链接(TarsosDSPAndroid-v3-MAD)是一个与Android兼容的TarsosDSP fork。由于一段时间后不再需要它,如上所述: GitHub用户srubin为加州大学伯克利分校(UC Berkley)的编程任务而创建的TarsosDSP分支已经不再需要了 与您的主要问题相关的是,您不应该手动调用AudioDispatcher的
run()
,它应该从单独的线程调用,如上面的链接中所述,如下所示:
new Thread(dispatcher,"Audio Dispatcher").start();
首先,您提到的链接(TarsosDSPAndroid-v3-MAD)是一个与Android兼容的TarsosDSP fork。由于一段时间后不再需要它,如上所述: GitHub用户srubin为加州大学伯克利分校(UC Berkley)的编程任务而创建的TarsosDSP分支已经不再需要了 与您的主要问题相关的是,您不应该手动调用AudioDispatcher的
run()
,它应该从单独的线程调用,如上面的链接中所述,如下所示:
new Thread(dispatcher,"Audio Dispatcher").start();
您必须为AudioDispatcher初始化一个线程,才能直接调用AudioDispatcher.run()
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
dispatcher.addAudioProcessor(new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, new PitchDetectionHandler() {
@Override
public void handlePitch(PitchDetectionResult pitchDetectionResult,
AudioEvent audioEvent) {
final float pitchInHz = pitchDetectionResult.getPitch();
runOnUiThread(new Runnable() {
@Override
public void run() {
mFrequencyView.setText(String.valueOf(pitchInHz));
}
});
}
}));
new Thread(dispatcher, "Audio Dispatcher").start();
该线程将一直运行,直到调用AudioDispatcher.stop()。重要的是要避免线程留在背景上
@Override
protected void onPause() {
super.onPause();
dispatcher.stop();
}
您必须为AudioDispatcher初始化一个线程,才能直接调用AudioDispatcher.run()
dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);
dispatcher.addAudioProcessor(new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN, 22050, 1024, new PitchDetectionHandler() {
@Override
public void handlePitch(PitchDetectionResult pitchDetectionResult,
AudioEvent audioEvent) {
final float pitchInHz = pitchDetectionResult.getPitch();
runOnUiThread(new Runnable() {
@Override
public void run() {
mFrequencyView.setText(String.valueOf(pitchInHz));
}
});
}
}));
new Thread(dispatcher, "Audio Dispatcher").start();
该线程将一直运行,直到调用AudioDispatcher.stop()。重要的是要避免线程留在背景上
@Override
protected void onPause() {
super.onPause();
dispatcher.stop();
}
第一步是确保实际调用了
stopRecording
(例如,通过添加一些日志打印)。第一步是确保实际调用了stopRecording
(例如,通过添加一些日志打印)。