如何使用 Recorder 在 android 中检测环境噪声

Posted

技术标签:

【中文标题】如何使用 Recorder 在 android 中检测环境噪声【英文标题】:How to detect ambient noise in android using Recorder 【发布时间】:2014-04-07 20:13:20 【问题描述】:

我正在尝试检测何时有太多的听觉噪音。我是 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】:

来自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 如果它 在设置音频源之前调用。

【讨论】:

mRecorder.getMaxAmplitude() 始终为0。如果检测到噪声应该有什么值? 所以,我没有使用正确的方法来查找是否有噪音。我该如何解决我的问题?

以上是关于如何使用 Recorder 在 android 中检测环境噪声的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何录制简单的声音片段?

Android Media Recorder 无法在 Google Glass 上录制长视频

录制 .m4a 文件 Android

android:在模拟器上使用 MediaPlayer 录制音频

Android Studio 2.2 Espresso Test Recorder-----解放双手,通过录制测试过程实现测试

如何使用 recorder.js 对象调用此函数“.record()”?