我试图从它检测到的每个拍手中获取振幅读数,但每次它检测到拍手时,我总是得到 IllegalStateException
或0
来自getMaxAmplitude()
。我做错了什么吗?有没有解决的办法?请告诉我!
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Checks Permission
checkPermission(Manifest.permission.RECORD_AUDIO,REQUEST_RECORD_AUDIO_PERMISSION);
double threshold = 8;
double sensitivity = 45;
PercussionOnsetDetector mPercussionDetector = new PercussionOnsetDetector(22050, 1024,
new OnsetHandler() {
@Override
public void handleOnset(double time, double salience) {
/* try {
new MediaRecorder().setAudioSource(MediaRecorder.AudioSource.MIC);
new MediaRecorder().setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
new MediaRecorder().setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
new MediaRecorder().setOutputFile("dev/null");
new MediaRecorder().prepare();
new MediaRecorder().start();
} catch (Exception e) {
e.printStackTrace();
} */
runOnUiThread(new Runnable() {
@Override
public void run() {
System.out.println(new MediaRecorder().getMaxAmplitude());
System.out.println("YAAAYYY");
}
});
}
}, sensitivity, threshold);
dispatcher.addAudioProcessor(mPercussionDetector);
new Thread(dispatcher,"Audio Dispatcher").start();
}
最佳答案
检查javadoc for MediaRecorder#getMaxAmplitude method
它说应该先调用 setAudioSource 方法。
请注意本 javadoc 开头的状态和使用示例。 getMaxAmplitude 只是一个 getter,它不执行实际记录。
关于java - Android:使用 MediaRecorder 中的 getMaxAmplitude(),同时使用 TarsosDSP 中的 PercussionOnsetDetector,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58947471/