Skip to content

Instantly share code, notes, and snippets.

@easternHong
Created January 26, 2015 13:35
Show Gist options
  • Select an option

  • Save easternHong/b3ecadd63a5e7b6baec0 to your computer and use it in GitHub Desktop.

Select an option

Save easternHong/b3ecadd63a5e7b6baec0 to your computer and use it in GitHub Desktop.
实时输出mic音量
package com.hunt.androidtext;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
/**
* Created by hunt on 2015/1/26.
*/
public class RecordThread {
private static final String TAG = "AudioRecord";
static final int SAMPLE_RATE_IN_HZ = 8000;
static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ,
AudioFormat.CHANNEL_IN_DEFAULT, AudioFormat.ENCODING_PCM_16BIT);
AudioRecord mAudioRecord;
boolean isGetVoiceRun;
Object mLock;
public RecordThread() {
mLock = new Object();
}
public void getNoiseLevel(final Handler handler) {
if (isGetVoiceRun) {
Log.e(TAG, "还在录着呢");
return;
}
mAudioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_IN_DEFAULT,
AudioFormat.ENCODING_PCM_16BIT, BUFFER_SIZE);
if (mAudioRecord == null) {
Log.e("sound", "mAudioRecord初始化失败");
}
isGetVoiceRun = true;
new Thread(new Runnable() {
@Override
public void run() {
mAudioRecord.startRecording();
short[] buffer = new short[BUFFER_SIZE];
while (isGetVoiceRun) {
//r是实际读取的数据长度,一般而言r会小于buffersize
int r = mAudioRecord.read(buffer, 0, BUFFER_SIZE);
long v = 0;
// 将 buffer 内容取出,进行平方和运算
for (int i = 0; i < buffer.length; i++) {
v += buffer[i] * buffer[i];
}
// 平方和除以数据总长度,得到音量大小。
double mean = v / (double) r;
double volume = 10 * Math.log10(mean);
Log.d(TAG, "分贝值:" + volume);
// 大概一秒十次
Message msg = handler.obtainMessage();
msg.what = 0;
msg.arg1 = (int) (volume * 100);
handler.removeCallbacksAndMessages(null);
handler.sendMessage(msg);
synchronized (mLock) {
try {
mLock.wait(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
mAudioRecord.stop();
mAudioRecord.release();
mAudioRecord = null;
}
}).start();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment