我试图检测何时有太多的听觉噪音。我是Android的新手,我不知道如何检测外部噪音水平。
我尝试尝试使用recorder
方法显示噪音值:getAudioSource
和getMaxAmplitude
方法。
public void startRecording() throws IOException {
numeSunet=Environment.getExternalStorageDirectory().getPath()+"/"+System.currentTimeMillis()+".3gp";
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(Environment.getExternalStorageDirectory().getPath()+"/"+System.currentTimeMillis()+".3gp");
recorder.prepare();
recorder.start();
int x = recorder.getMaxAmplitude();
snt.setText(""+x);
}public void stopRecording() {
recorder.stop();
recorder.release();
}
就我而言,y始终为0,x始终为8。 如果有人知道如何检测android中的音频噪音水平,我将不胜感激。
答案 0 :(得分:1)
从此link:
使用mRecorder.getMaxAmplitude();
对于声音分析而不保存所有你需要的是使用mRecorder.setOutputFile(“/ dev / null”);
这是一个例子,我希望这有帮助
public class SoundMeter {
private MediaRecorder mRecorder = null;
public void start() {
if (mRecorder == null) {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile("/dev/null");
mRecorder.prepare();
mRecorder.start();
}
}
public void stop() {
if (mRecorder != null) {
mRecorder.stop();
mRecorder.release();
mRecorder = null;
}
}
public double getAmplitude() {
if (mRecorder != null)
return mRecorder.getMaxAmplitude();
else
return 0;
}
}
编辑:
阅读API for MediaRecorder显示了这个......
public int getMaxAmplitude()
在API级别1中添加
返回自上次采样以来采样的最大绝对振幅 打电话给这个方法。只在setAudioSource()之后调用它。
返回自上次调用以来测量的最大绝对振幅, 或第一次调用时为0如果是,则抛出IllegalStateException 在设置音频源之前调用。