Android技术开发之:噪音测试

首先,看看核心Activity:
import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.view.Menu;
import android.widget.TextView;
public class MainActivity extends Activity {
 private TextView text;
 private AudioRecord ar;
 private int bs;
 private static final int SAMPLE_RATE_IN_HZ = 44100;
 public boolean isRun = false;
 private Handler handler = new Handler(){
  @Override
  public void handleMessage(Message msg) {
   super.handleMessage(msg);
   switch(msg.what){
   case 1:
    text.setText(msg.obj.toString());
    break;
   default:
    break;
   }
  }
 };;
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);
  text = (TextView) findViewById(R.id.text);
  MainThread mt = new MainThread();
  mt.start();
 }
 class MainThread extends Thread {
  public void run() {
   Looper.prepare();
   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);
    ar.startRecording();
    isRun = true;
    while (isRun) {
     short[] buffer = new short[bs];
     int r=ar.read(buffer, 0, bs);
     int v = 0;
     for (int i = 0; i < buffer.length; i++) {
      v += buffer[i]*buffer[i];
     }
     Message msg = new Message();
     msg.what = 1;
     msg.obj = (int)Math.round(10*Math.log10(v/r));//单位是dB
     handler.sendMessage(msg);
     try {
      Thread.sleep(500);
     } catch (InterruptedException e) {
      e.printStackTrace();
     }
    }
    ar.stop();
    Looper.loop();
   }
 }
 @Override
 public void onBackPressed() {
  super.onBackPressed();
  isRun = false;
  ar.release();
  System.exit(0);
 }
 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }
}
AndroidManifest.xml
http://schemas.android.com/apk/res/android"
    package="*****此处隐私******"
    android:versionCode="1"
    android:versionName="1.0" >
            android:minSdkVersion="8"
        android:targetSdkVersion="15" />
   
   
            android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
                    android:name=".MainActivity"
            android:theme="@android:style/Theme.NoTitleBar.Fullscreen"
            android:label="@string/title_activity_main" >
           
               
               
           
       
   
其他布局文件自己定义即可。
此处关键在于对获取的样本数据进行分析。


你可能感兴趣的:(Android技术开发之:噪音测试)