首先,看看核心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" >
其他布局文件自己定义即可。
此处关键在于对获取的样本数据进行分析。
转载于:https://my.oschina.net/lanzp/blog/188313