android:检测声音级别

使用MediaRecorder我从设备的麦克风捕捉声音。 从我得到的声音,我只需要分析音量(声音响度),而不是将声音保存到文件。

两个问题:

  1. 如何在特定时间获得声音的响度?
  2. 如何在不将声音保存到文件的情况下进行分析?

谢谢。

  1. 使用mRecorder.getMaxAmplitude();

  2. 为了分析声音而不保存所有你需要的是使用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; } } 

如果要分析直接从麦克风获取的声音样本而不将数据保存到文件中,则需要使用AudioRecord对象,如下所示:

 int sampleRate = 8000; try { bufferSize = AudioRecord.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT); audio = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, bufferSize); } catch (Exception e) { android.util.Log.e("TrackingFlow", "Exception", e); } 

然后你必须在准备好的时候开始录音:

 audio.startRecording(); 

现在是时候开始阅读样品,如下所示:

 short[] buffer = new short[bufferSize]; int bufferReadResult = 1; if (audio != null) { // Sense the voice... bufferReadResult = audio.read(buffer, 0, bufferSize); double sumLevel = 0; for (int i = 0; i < bufferReadResult; i++) { sumLevel += buffer[i]; } lastLevel = Math.abs((sumLevel / bufferReadResult)); 

最后一个代码将所有不同的采样幅度组合起来,并将平均值赋给lastLeveLvariables,更多细节可以参考这篇文章 。

问候!

我玩了几个录音源代码应用程序,但它花了一段时间才得到它。

您可以复制Google的NoiseAlert源代码 – SoundMeter代码,这是我用过的。

getMaxAmplitude范围从0到32768. EMA的东西,我没有打扰使用。

在你的主要活动中,你必须声明一个MediaRecorder对象,并像Anna引用的那样调用它的start()函数。

欲了解更多信息,你可以参考我的项目: http : //kaitagsd.wordpress.com/2013/03/25/arduino-project-amplify-part-2-ie-how-to-transmit-send-data-from -android-to-arduino-bluesmirf-silver-using-bluetooth /我需要在BlueTooth上发送声音幅度的值。

准确的代码在这里: https : //github.com/garytse89/Amplify/tree/master/Android%20Code/src/com/garytse89/allin

只需浏览与MediaRecorder对象关联的部分即可。