zoukankan      html  css  js  c++  java
  • Android学习之路-录音功能实现

    ---恢复内容开始---

      今天学习了安卓的录音与播放,记录,备忘。。

    Xml代码

     1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent" android:orientation="vertical"
     5     tools:context="${relativePackage}.${activityClass}" >
     6 
     7     <Button android:id="@+id/Startrecording"  android:layout_width="match_parent"
     8         android:layout_height="wrap_content" android:text="开始录音"/>
     9     <Button android:id="@+id/stoptrecording"  android:layout_width="match_parent"
    10         android:layout_height="wrap_content" android:text="结束录音"/>
    11     <Button android:id="@+id/Playtape"  android:layout_width="match_parent"
    12         android:layout_height="wrap_content" android:text="播放录音"/>
    13 
    14 
    15 </LinearLayout>

    布局非常简单,主要是用来演示,下面是Java代码

      1 package com.example.androidlulin;
      2 
      3 
      4 
      5 import java.io.File;
      6 import java.io.IOException;
      7 
      8 
      9 
     10 import android.app.Activity;
     11 import android.media.MediaPlayer;
     12 import android.media.MediaRecorder;
     13 import android.os.Bundle;
     14 import android.view.Menu;
     15 import android.view.MenuItem;
     16 import android.view.View;
     17 import android.view.View.OnClickListener;
     18 import android.widget.Button;
     19 import android.widget.Toast;
     20 
     21 public class MainActivity extends Activity implements OnClickListener {
     22     private Button Startrecording,stoptrecording,Playtape;
     23     private MediaRecorder  recorder;
     24     private MediaPlayer player;
     25     private String voicePath ;
     26     private long time;
     27     //private MediaPlayer player;
     28     
     29     @Override
     30     protected void onCreate(Bundle savedInstanceState) {
     31         super.onCreate(savedInstanceState);
     32         setContentView(R.layout.activity_main);
     33         //new一个实例
     34         player = new MediaPlayer();
     35         Startrecording = (Button) findViewById(R.id.Startrecording);
     36         stoptrecording = (Button) findViewById(R.id.stoptrecording);
     37         Playtape = (Button) findViewById(R.id.Playtape);
     38         //点击事件
     39         Playtape.setOnClickListener(this);
     40         Startrecording.setOnClickListener(this);
     41         stoptrecording.setOnClickListener(this);
     42         
     43     }
     44 
     45     @Override
     46     public void onClick(View v) {
     47         switch (v.getId()) {
     48         case R.id.Startrecording://开始录音
     49              fasong();
     50             break;
     51         case R.id.stoptrecording://结束录音
     52             jieshu();
     53             break;
     54         case R.id.Playtape://播放录音
     55             play();
     56             break;
     57         default:
     58             break;
     59         }
     60     }
     61     
     62     /**
     63      * 发送语音
     64      */
     65     private void fasong(){
     66         if(recorder != null){
     67             //不等于空的时候让他变闲置
     68             recorder.reset();
     69         }else{
     70             recorder = new MediaRecorder();
     71         }
     72         recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
     73         //输出格式
     74         recorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR);
     75         //设置音频编码器
     76         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
     77         //缓存目录
     78         String str = FileUtil.getSDCardPath()+"/A微信/voice";
     79         //检查该目录是否存在  否则创建
     80         FileUtil.checkDir(str);
     81         //设置文件名
     82         voicePath = str+ System.currentTimeMillis()+".amr";
     83         //设置录音的输出路径
     84         recorder.setOutputFile(voicePath);
     85         
     86         try {
     87             recorder.prepare();
     88         } catch (IOException e) {
     89             // TODO Auto-generated catch block
     90             e.printStackTrace();
     91         }
     92         recorder.start();
     93         time = System.currentTimeMillis();
     94     }
     95     
     96     /**
     97      * 结束语音
     98      */
     99     private void jieshu(){
    100         recorder.stop();
    101         long shijian =System.currentTimeMillis() - time;
    102         if(shijian<1000){//判断,如果录音时间小于一秒,则删除文件提示,过短
    103             File file = new File(voicePath);
    104             if(file.exists()){//判断文件是否存在,如果存在删除文件
    105                 file.delete();//删除文件
    106                 Toast.makeText(MainActivity.this, "录音时间过短",Toast.LENGTH_SHORT).show();
    107             }
    108         }
    109         //重置
    110         recorder.release();
    111         if(recorder != null){
    112             recorder.release();
    113             recorder = null;
    114             System.gc();
    115         }
    116     }
    117     
    118     /**
    119      * 播放录音
    120      */
    121     private void play(){
    122         if(player != null){
    123             player.reset();
    124             try {
    125                 //设置语言的来源
    126                 player.setDataSource(voicePath);
    127                 //初始化
    128                 player.prepare();
    129                 //开始播放
    130                 player.start();
    131             }catch (IOException e) {
    132                 // TODO Auto-generated catch block
    133                 e.printStackTrace();
    134             }
    135 
    136         }
    137     }
    138 }

    好了,到这录音和播放的功能就已经完美实现了,对了,还需要加上录音权限,百度可以搜到

    下面附上源码下载地址:链接: https://pan.baidu.com/s/1qYpMITY 密码: jvg5

  • 相关阅读:
    #ASP.NET Core 1.0 Key Features
    #asp.net core mvc 的视图注入
    # asp.net core 1.0 项目结构
    dotnet core 初试两个小问题解决
    1044 火星数字(20 分)
    1043 输出PATest(20 分)
    1042 字符统计(20 分)
    1041 考试座位号(15 分)
    1040 有几个PAT(25 分)
    1039 到底买不买(20 分)
  • 原文地址:https://www.cnblogs.com/langfei8818/p/5873569.html
Copyright © 2011-2022 走看看