我想在这个链接上使用TarsosDSP包实现一个安卓应用程序:
https://github.com/srubin/TarsosDSP/releases/tag/TarsosDSPAndroid-v3-MAD
我为startRecording和stopRecording创建了两个按钮,我的应用程序可以“启动”,但不能“停止”。我的MainActivity是这样的:
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“类位于此链接上:
我不明白这个错误。有人能帮我吗?
提前谢谢。
发布于 2014-12-24 10:35:11
您必须为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();
}发布于 2014-09-25 17:45:00
首先,你提到的链接(TarsosDSPAndroid-v3-MAD)是一个兼容安卓的TarsosDSP分支。因为有一段时间不再需要它了,就像official site上描述的那样
不再需要GitHub用户
为加州大学伯克利分校的一项编程任务创建的TarsosDSP分支。
与你的主要问题相关的是,你不应该手动调用AudioDispatcher的run(),它应该像上面的链接中提到的那样从单独的线程中调用,类似这样:
new Thread(dispatcher,"Audio Dispatcher").start();https://stackoverflow.com/questions/24554000
复制相似问题