android 外接usb设备之麦克风

来源:互联网 发布:淘宝代购怎么设置 编辑:程序博客网 时间:2024/04/30 15:32



 

private RecordThread recordThread;
 private ImageView imageView;
 private ImageView imageView_left;

 public final Handler myHandler = new Handler() {
  public void handleMessage(Message msg) {
   int sound = (Integer) msg.obj;
   updateMiStatus(sound);
  };
 };

 public Display_audio(Context context, SWPageManager pagemananger) {
  super(context, pagemananger);
 }

 @Override
 public void onCreate() {
  mLayoutInflater.inflate(R.layout.display_audio_record, this);
  imageView_left = (ImageView) findViewById(R.id.imageview_left);
  imageView = (ImageView) findViewById(R.id.imageview_right);
  imageView_left.setImageResource(R.drawable.sound);
  imageView.setImageResource(R.drawable.sound9);

  recordThread = new RecordThread();
  recordThread.start();
 }

 @Override
 public void onDestroy() {
  recordThread.pause();
 }

 /**
  * 更新麦克风
  */
 public void updateMiStatus(int sound) {
  if (imageView != null) {
   switch (sound) {
   case 1:
    imageView.setImageResource(R.drawable.sound1);
    break;
   case 2:
    imageView.setImageResource(R.drawable.sound2);
    break;
   case 3:
    imageView.setImageResource(R.drawable.sound3);
    break;
   case 4:
    imageView.setImageResource(R.drawable.sound4);
    break;
   case 5:
    imageView.setImageResource(R.drawable.sound5);
    break;
   case 6:
    imageView.setImageResource(R.drawable.sound6);
    break;
   case 7:
    imageView.setImageResource(R.drawable.sound7);
    break;
   case 8:
    imageView.setImageResource(R.drawable.sound8);
    break;
   case 9:
    imageView.setImageResource(R.drawable.sound9);
    break;
   default:
    imageView.setImageResource(R.drawable.sound9);
    break;
   }
  }
 }

 /**
  * 获取麦克风
  */
 class RecordThread extends Thread {
  private AudioRecord ar;
  private int bs;
  private 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];
    }
    // 平方和除以数据总长度,得到音量大小。可以获取白噪声值,然后对实际采样进行标准化。
    Log.d("spl", String.valueOf(v / (float) r));

    double dB = 100 * Math.log10(v / (double) r);
    int i = (int) (dB);
    int u = (390 - i) / 5;
    Message message = myHandler.obtainMessage();
    message.what = 8686;
    message.obj = u;
    myHandler.sendMessage(message);
   }
   ar.stop();
  }

  public void pause() {
   isRun = false;
  }

  public void start() {
   if (!isRun) {
    super.start();
   }
  }
 }

 @Override
 public void onShow() {
  // TODO Auto-generated method stub

 }

 @Override
 public void onHidden() {

 }

0 1
原创粉丝点击