Android 上有一些很有趣的应用,例如《吹裙子》、《吹气球》之类的。利用的是实时获取麦克风输入音量,然后进行相应的处理。录音过程中怎样获得声音的大小呢?下面有个实例

Java代码:
package eoe.demo;

import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.util.Log;

public class RecordThread extends Thread {
private AudioRecord ar;
private int bs;
private static int SAMPLE_RATE_IN_HZ = 8000;
private boolean isRun = false;
public RecordThread() {
super();
bs = AudioRecord.getMinBufferSize(SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT);
ar = new AudioRecord(MediaRecorder.AudioSource.MIC, SAMPLE_RATE_IN_HZ, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, bs);
}
public void run() {
super.run();
ar.startRecording();
// 用于读取的
buffer byte[] buffer = new byte[bs]; isRun = true; while (isRun) {
int r = ar.read(buffer, 0, bs);
int v = 0;
// 将 buffer 内容取出,进行平方和运算
for (int i = 0; i < buffer.length; i++) {
// 这里没有做运算的优化,为了更加清晰的展示代码
v += buffer[i] * buffer[i];
}
// 平方和除以数据总长度,得到音量大小。可以获取白噪声值,然后对实际采样进行标准化。
// 如果想利用这个数值进行操作,建议用 sendMessage 将其抛出,在 Handler 里进行处理。
Log.d("spl", String.valueOf(v / (float) r));
}
ar.stop();
}
public void pause() {
// 在调用本线程的 Activity 的 onPause 里调用,以便 Activity 暂停时释放麦克风
isRun = false;
}
public void start() {
// 在调用本线程的 Activity 的 onResume 里调用,以便 Activity 恢复后继续获取麦克风输入音量
if (!isRun) {
super.start();
}
}

}


更多相关文章

  1. WebView Android(安卓)调用js且须要获取返回结果
  2. Android端JQueryMobile使用教程(二)
  3. Fragments的初识---android开发
  4. Android黑盒自动化测试框架Robotium
  5. Android中如何调用其它应用
  6. Android中有用的组件被选中和按下去的变换样式
  7. 调用Android系统设置中的Intent
  8. android ndk 调用第三方so
  9. Android性能优化——合理进行内存管理

随机推荐

  1. Android开发,使用xml drawable制作带边框
  2. android fragment(android.support.v4.app
  3. Android回炉系列之Surfaceflinger
  4. android 自定义侧边栏
  5. 查看基于Android(安卓)系统单个进程内存
  6. Building the System Android
  7. ListView美化(2)-android:cacheColorHint
  8. android软键盘挡住输入框问题解决方法
  9. android Log图文详解(Log.v,Log.d,Log.i,
  10. afinal - afinal 是一个android的 orm 和