我正在女巫中创建一个项目,我必须找到录制声音的响度。
无论我调用getMaxAmplitude()
多少次,它始终显示0,而通过编写amplitudeDb
则始终显示-infinity。
请帮助我。
这是我的代码。
record1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
record[0] = new MediaRecorder();
record[0].setAudioSource(MediaRecorder.AudioSource.MIC);
record[0].getMaxAmplitude();
record[0].setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
record[0].setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
record[0].setOutputFile(FilePath);
try {
record[0].prepare();
record[0].getMaxAmplitude();
} catch(IOException e) {
e.printStackTrace();
}
try {
record[0].start();
}
catch(Exception e) {
e.printStackTrace();
}
}
});
stop.setOnClickListener(new View.OnClickListener() {@Override
public void onClick(View v) {
try {
record[0].stop();
}
catch(Exception e) {
e.printStackTrace();
}
try {
int amp = record[0].getMaxAmplitude();
//String ampl = amp.toString();
int x = 1;
System.out.println("amp: " + amp);
System.out.println("hello");
//double amplitudeDb = 20 * Math.log10((double) Math.abs(amp));
ampli.setText("" + amp);
}
catch(Exception e) {
e.printStackTrace();
}
try {
record[0].release();
}
catch(Exception e) {
e.printStackTrace();
}
}
});
最佳答案
最后,我了解了getMaxAmplitude()的逻辑,只是必须在record [0] .stop()之前写record [0] .getMaxAmplitude()
那一切都会好起来的:)