android:检测声音级别
使用MediaRecorder
我从设备的麦克风捕捉声音。 从我得到的声音,我只需要分析音量(声音响度),而不是将声音保存到文件。
两个问题:
- 如何在特定时间获得声音的响度?
- 如何在不将声音保存到文件的情况下进行分析?
谢谢。
-
使用
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; } }
如果要分析直接从麦克风获取的声音样本而不将数据保存到文件中,则需要使用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对象关联的部分即可。