如何使用Recorder检测android中的环境噪音

时间:2014-04-07 20:13:20

标签: java android mediarecorder

我试图检测何时有太多的听觉噪音。我是Android的新手,我不知道如何检测外部噪音水平。

我尝试尝试使用recorder方法显示噪音值:getAudioSourcegetMaxAmplitude方法。

 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中的音频噪音水平,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

从此link

  1. 使用mRecorder.getMaxAmplitude();

  2. 对于声音分析而不保存所有你需要的是使用mRecorder.setOutputFile(“/ dev / null”);

  3. 这是一个例子,我希望这有帮助

    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   在设置音频源之前调用。