亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

類似微信說話功能的錄音處理代碼分享

2019-11-26 15:45:28
字體:
來源:轉載
供稿:網友

復制代碼 代碼如下:

package com.example.testaudio;

import java.io.File;

import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.Menu;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity {

 private MediaRecorder recoder = null;
 private MediaPlayer player = null;
 private String theMediaPath;

 TextView tv = null;
 TextView tvRecord = null;
 Button testBtn = null;
 Button testBtn2 = null;
 Button stopBtn = null;
 Button playBtn = null;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  tv = (TextView)findViewById(R.id.textView1);
  tvRecord = (TextView)findViewById(R.id.tvRecord);
  testBtn = (Button)findViewById(R.id.button1);
  testBtn2 = (Button)findViewById(R.id.button2);
  stopBtn = (Button)findViewById(R.id.buttonStop);
  playBtn = (Button)findViewById(R.id.buttonPlay);

  testBtn2.setOnTouchListener(new OnTouchListener() {
   @Override
   public boolean onTouch(View v, MotionEvent event) {
    Log.i("testactivity", "setOnTouchListener:"+event.getAction());
    switch(event.getAction()) {
     case MotionEvent.ACTION_UP: {
      Log.i("testactivity", "停止錄音");
      stopRecording();
      break;
     }
     case MotionEvent.ACTION_DOWN: {
      Log.i("testactivity", "開始錄音");
      startRecording();
      break;
     }
     default: break;
    }
    return false;
   }
  });

  
  testBtn.setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
    startRecording();
    testBtn.setEnabled(false);
    stopBtn.setEnabled(true);
   }
  });

  stopBtn.setEnabled(false);

  stopBtn.setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
    stopRecording();
    testBtn.setEnabled(true);
    playBtn.setEnabled(true);
    stopBtn.setEnabled(false);
   }
  });

  
  playBtn.setOnClickListener(new OnClickListener() {
   public void onClick(View arg0) {
    playRecordFile(theMediaPath);
    stopBtn.setEnabled(true);
   }
  });
 }

 protected void playRecordFile(String _file) {
  try {
   File f = new File(_file);
   if(!f.exists()) {
    tv.setText("文件不存在:" + _file);
    return;
   }
  } catch(Exception e) {
   Log.i("testactivity", e.getMessage());
  }
  try {
   player = new MediaPlayer();
   player.setDataSource(_file);
   player.prepare();
   player.setOnCompletionListener(new OnCompletionListener() {
    public void onCompletion(MediaPlayer arg0) {
     tv.setText("播放完畢");
     stopBtn.setEnabled(false);
    }
   });

   player.start();
  } catch(Exception e) {
   Log.e("testactivity", "play failed:" + e.getMessage());
  }
 }

 /**
  * 停止錄音處理
  */
 protected void stopRecording() {

  if(recoder != null) {
   Log.i("testactivity", "停止錄音");
   recoder.stop();
   recoder.release();
   recoder = null;
   endtime = System.currentTimeMillis();
   _handleRecordComplete();
  }
  if(player != null) {
   Log.i("testactivity", "停止播放");
   player.stop();
   player.release();
   player = null;
  }
 }

 
 /**
  * 開始錄音處理
  */
 protected void startRecording() {

  theMediaPath = Environment.getExternalStorageDirectory().getAbsolutePath();
  theMediaPath += "/audiotest.3gp";

  recoder = new MediaRecorder();
  recoder.setAudioSource(MediaRecorder.AudioSource.MIC);
  recoder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
  recoder.setOutputFile(theMediaPath);
  recoder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

  starttime = System.currentTimeMillis();
  updateMicStatus();

  try {
   recoder.prepare();
   recoder.start();
   _handleRecordStart();
  } catch (Exception e) {
   Log.e("testactivity", "prepared failed:" + e.getMessage());
   _handleRecordStartError(e);
  }

 }

 //定時器
 private static long maxtime = 30*1000; //30秒
 private long starttime = 0l;
 private long endtime = 0l;
 private final Handler mHandler = new Handler(); 
    private Runnable mUpdateMicStatusTimer = new Runnable() { 
        public void run() { 
         //判斷是否超時
         if(starttime > 0 && System.currentTimeMillis() - starttime > maxtime) {
          Log.e("testactivity", "超時的錄音時間,直接停止");
          stopRecording();
          return;
         }

         //更新分貝狀態
            updateMicStatus(); 
        } 
    }; 

    /**
     * 更新話筒狀態 分貝是也就是相對響度 分貝的計算公式K=20lg(Vo/Vi) Vo當前振幅值 Vi基準值為600:我是怎么制定基準值的呢? 當20
     * * Math.log10(mMediaRecorder.getMaxAmplitude() / Vi)==0的時候vi就是我所需要的基準值
     * 當我不對著麥克風說任何話的時候,測試獲得的mMediaRecorder.getMaxAmplitude()值即為基準值。
     * Log.i("mic_", "麥克風的基準值:" + mMediaRecorder.getMaxAmplitude());前提時不對麥克風說任何話
     */ 
    private int BASE = 600; 
    private int SPACE = 300;// 間隔取樣時間

    private void updateMicStatus() { 
        if (recoder != null) { 
            // int vuSize = 10 * mMediaRecorder.getMaxAmplitude() / 32768; 
            int ratio = recoder.getMaxAmplitude() / BASE; 
            int db = 0;// 分貝 
            if (ratio > 1) 
                db = (int) (20 * Math.log10(ratio)); 

           
            _handleRecordVoice(db);

            mHandler.postDelayed(mUpdateMicStatusTimer, SPACE); 
            /*
             * if (db > 1) { vuSize = (int) (20 * Math.log10(db)); Log.i("mic_",
             * "麥克風的音量的大小:" + vuSize); } else Log.i("mic_", "麥克風的音量的大?。? + 0);
             */ 
        } 
    }
 

 private void _handleRecordStart() {
  //開始錄音的接收函數
  tv.setText("開始錄音...");
  //starttime 開始時間
 }

 private void _handleRecordStartError(Exception e) {
  //開始錄音的接收函數失敗
  tv.setText("開始錄音失敗:" + e.getMessage());
 }

 private void _handleRecordComplete() {
  //結束錄音
  tv.setText("停止錄音:" + theMediaPath);
 }

 private void _handleRecordVoice(int _db) {
  //聲音事件偵聽,轉換成分貝
  tvRecord.setText(""+_db);
 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久精品在线观看| 国产精品一区二区三区成人| 色综合久久88| 日韩成人中文字幕| 久久精品国产精品| 欧美激情亚洲视频| 中文字幕日韩高清| 91精品免费看| 国产日产久久高清欧美一区| 在线观看久久久久久| 狠狠综合久久av一区二区小说| 在线观看视频99| 亚洲成年人在线| 日本视频久久久| 精品亚洲永久免费精品| 中文字幕av一区| 国产在线日韩在线| 国产成人鲁鲁免费视频a| 欧美激情亚洲一区| 午夜精品视频网站| 亚洲精品资源美女情侣酒店| 日本亚洲欧美成人| 亚洲精品国产美女| 日本精品免费观看| 欧美最顶级的aⅴ艳星| 亚洲综合成人婷婷小说| 亚洲欧美一区二区三区久久| 久久免费视频在线观看| 欧美在线播放视频| 黄色成人在线播放| 亚洲摸下面视频| 国产日韩精品在线播放| 亚洲天堂网站在线观看视频| 日韩精品高清在线| 国产精品视频最多的网站| 日韩欧美精品免费在线| 欧美大片欧美激情性色a∨久久| 日韩亚洲欧美中文高清在线| 亚洲free性xxxx护士hd| 欧美激情一区二区三区久久久| 国产精品一区二区三区久久| 欧美在线观看视频| 国产成人精品免费久久久久| 精品国偷自产在线视频| 欧美日韩亚洲一区二区三区| 蜜臀久久99精品久久久久久宅男| 欧美高清视频在线| 日韩欧美成人网| 国产一区二区欧美日韩| 欧洲日本亚洲国产区| 亚洲区在线播放| 亚洲人成在线播放| 国内精品视频在线| 欧美日韩国产中文字幕| 欧美亚洲另类制服自拍| 不卡伊人av在线播放| 久久久久久国产精品| 国产精品美女久久久免费| 欧美成人亚洲成人日韩成人| 成人免费看吃奶视频网站| 国产精品毛片a∨一区二区三区|国| 亚洲第一页在线| 亚洲图片在区色| 国产精品自拍小视频| 亚洲一区二区日本| 亚洲石原莉奈一区二区在线观看| 日本国产一区二区三区| 亚洲成人亚洲激情| 成人网页在线免费观看| 亚洲香蕉成视频在线观看| 主播福利视频一区| 高清日韩电视剧大全免费播放在线观看| 91精品国产综合久久久久久蜜臀| 久久久亚洲影院| 色爱av美腿丝袜综合粉嫩av| 精品国内自产拍在线观看| 亚洲男人的天堂网站| 欧美日韩国产一区二区三区| 欧美理论在线观看| 欧美老女人xx| 亚洲高清不卡av| 亚洲自拍偷拍福利| 亚洲精品福利在线| 久久久欧美一区二区| 国产69精品久久久| 九九九久久久久久| 7m精品福利视频导航| 最好看的2019的中文字幕视频| 国产精品私拍pans大尺度在线| 欧美专区中文字幕| 亚洲欧美中文另类| 26uuu日韩精品一区二区| 中文一区二区视频| 久久综合伊人77777尤物| 亚洲成人久久电影| 91精品国产色综合久久不卡98| 国产日本欧美一区二区三区| 亚洲伊人成综合成人网| 亚洲欧美日本另类| 91久久精品国产| 亚洲成av人片在线观看香蕉| 亚洲欧美日韩国产中文专区| 久久韩剧网电视剧| 亚洲综合日韩中文字幕v在线| 欧美精品videossex性护士| 国内精品久久久久影院优| 亚洲女人天堂网| 欧美性视频网站| 欧美日产国产成人免费图片| 久久福利视频网| 久久精品久久久久| 亚洲精品91美女久久久久久久| 精品成人69xx.xyz| 精品av在线播放| 欧美日韩激情网| 亚洲国产精品女人久久久| 91精品国产网站| 日韩黄色av网站| 国产精品免费福利| 国产精品久久久av| 午夜精品久久久久久久久久久久| 欧美黑人一级爽快片淫片高清| 97人洗澡人人免费公开视频碰碰碰| 欧美成人午夜激情| 午夜精品www| 精品久久久久久久久久久久久久| 国产精品精品视频| 国内精品模特av私拍在线观看| 欧美在线免费观看| 亚洲缚视频在线观看| 亚洲性生活视频| 欧美激情性做爰免费视频| 亚洲激情在线观看视频免费| 黑人巨大精品欧美一区免费视频| 国产一区欧美二区三区| 都市激情亚洲色图| 国产欧美日韩综合精品| 日韩在线视频导航| 成人动漫网站在线观看| 不卡伊人av在线播放| 国产精品7m视频| 伊人亚洲福利一区二区三区| 久久久国产影院| 国产精品2018| 日韩av在线网址| 91久久中文字幕| 精品欧美激情精品一区| 91色中文字幕| 福利微拍一区二区| 欧美日韩在线第一页| 6080yy精品一区二区三区| 亚洲人成网站色ww在线| 26uuu亚洲伊人春色| 中文字幕亚洲精品| 欧美日韩在线视频一区二区| 亚洲欧美日韩一区在线| 欧美专区在线观看| 一区二区三区无码高清视频| 欧美福利视频网站| 国产精品偷伦一区二区| 国内精久久久久久久久久人| 日韩电视剧在线观看免费网站| 一区二区三区国产在线观看| 久久久av电影|