仿微信语音录制

1. 设置按钮的TouchListener

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. but_audio.setOnTouchListener(new OnTouchListener() {  
  2.             @Override  
  3.             public boolean onTouch(View v, MotionEvent event) {  
  4.                 switch (event.getAction()) { // 判断当前点击状态  
  5.                 case MotionEvent.ACTION_DOWN: // 按下  
  6.                     mSoundPool.play(down_music, 11001); // 播放按钮铃声  
  7.                     if (!isRecordingAudio) { // 判断不处于录音状态  
  8.                         // 计算出上次开始时间和本次开始录音时间间隔,如果小于1S,提示用户,不录音  
  9.                         long intervalTime = System.currentTimeMillis()  
  10.                                 - startTime;  
  11.                         if (intervalTime < 1000) {  
  12.                             Toast.makeText(MessageActivity.this"操作太频繁,请稍后使用",  
  13.                                     0).show();  
  14.                             return false;  
  15.                         }  
  16.                         RecordingAudio();  
  17.                     }  
  18.                     break;  
  19.                 case MotionEvent.ACTION_UP: // 移开  
  20.                     if (isRecordingAudio) {  
  21.                         new Thread() {  
  22.                             public void run() {  
  23.                                 SystemClock.sleep(100); // 睡一会,在停止录音  
  24.                                 mMediaRecorder.stop(); // 停止录音  
  25.                                 mMediaRecorder.release(); // 释放资源  
  26.                                 mMediaRecorder = null// 回收  
  27.                                 message = new Message();  
  28.                                 message.what = 1;  
  29.                                 mHandler.sendMessage(message);  
  30.                             };  
  31.                         }.start();  
  32.                     }  
  33.                     isRecordingAudio = false;  
  34.                     break;  
  35.                 case MotionEvent.ACTION_MOVE: // 滑动  
  36.                     break;  
  37.                 }  
  38.                 return false;  
  39.             }  
  40.         });  


2. handler处理录音消息


[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. private Handler mHandler = new Handler() {  
  2.         @Override  
  3.         public void handleMessage(Message msg) {  
  4.             switch (msg.what) {  
  5.             case 1:  
  6.                 long stopTime = System.currentTimeMillis() - startTime;  
  7.                 if (stopTime < 1000) {  
  8.                     Toast.makeText(MessageActivity.this"录音时间太短,无法发送"0).show();  
  9.                     deleteAudioFile(fileName);  
  10.                 } else {  
  11.                     intendFileUpload();  
  12.                     mFileUpload.setFile(myRecAudioFile);  
  13.                     mFileUpload.setMessageType(SycConstant.Message_Type_sound);  
  14.                     // 发送语音消息  
  15.                     mFileUpload.startUpLoad();  
  16.                     MessageActivity.this.sendMessage(SycConstant.Message_Type_sound, GloableParameters.DIR_PATH + fileName);  
  17.                     mSoundPool.play(up_music, 11001); // 播放按钮铃声  
  18.                 }  
  19.                 break;  
  20.             case 2:   
  21.                 getData();  
  22.                 break;  
  23.             }  
  24.         }  
  25.     };  

3. 提示音的初始化


[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. private SoundPool mSoundPool; // 声明一个SoundPool,用来播放一段语音  
  2. private int down_music; // 定义一个整型用load();来设置suondID  
  3. private int up_music; // 松开的声音  
  4.   
  5. mSoundPool = new SoundPool(10, AudioManager.STREAM_SYSTEM, 5);// 第一个参数为同时播放数据流的最大个数,第二数据流类型,第三为声音质量  
  6. down_music = mSoundPool.load(getApplicationContext(), R.raw.down_audio,1); // 把你的声音素材放到res/raw里,第2个参数即为资源文件,第3个为音乐的优先级  
  7. up_music = mSoundPool.load(getApplicationContext(), R.raw.up_audio, 1);  

4. 录音的方法


[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.  * 录音 
  3.  */  
  4.     private void RecordingAudio() {  
  5.         File myRecAudioDir = new File(GloableParameters.DIR_PATH); // 创建录音文件存储目录  
  6.         try {  
  7.             myRecAudioFile = File.createTempFile(String.valueOf(System.currentTimeMillis()) ,".amr", myRecAudioDir); // 创建录音文件  
  8.             fileName = myRecAudioFile.getName();  
  9.             mMediaRecorder = new MediaRecorder();  
  10.             mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 第1步:设置音频来源(MIC表示麦克风)  
  11.             mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // 第2步:设置音频输出格式(默认的输出格式)  
  12.             mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); // 第3步:设置音频编码方式(默认的编码方式)  
  13.             mMediaRecorder.setOutputFile(myRecAudioFile.getAbsolutePath()); // 第4步:指定音频输出文件  
  14.             mMediaRecorder.prepare(); // 第5步:调用prepare方法  
  15.             if (!isRecordingAudio) { // 判断当前是否处于录音状态  
  16.                 mMediaRecorder.start(); // 第6步:调用start方法开始录音  
  17.                 startTime = System.currentTimeMillis(); // 记录开启录音时间  
  18.                 isRecordingAudio = true// 记录录音状态  
  19.             }  
  20.         } catch (IOException e) {  
  21.             // 录音出现异常  
  22.         }  
  23.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值