android新手进阶之录音功能实现

       最近在项目开发中用到了android的录音功能,在实现中也查看了相应的api,有点小感悟!

       代码下载:http://download.csdn.net/detail/ckq5254/9579465

一、对录音过程的分析

   

以上是google的api提供的录音原理图,总的来说包含了录音该有的开始录音,录音准备,结束录音等过程。

其中应该特别注意几个点:

(1)setoutputFormat()方法必须在setAudioEncoder()等方法之前,这里从上面的图中先后顺序可以看出来。

(2)录音开始前应该先prepare()再start()。

(3)在录音结束后应该release执行(),释放资源。

二、过程分析

     主要分为两部分,一部分是录音,一部分是播放录音。

 一、录音

     (1)首先实例化MediaRecorder对象

      (2)设置录音参数

               //设置录音输入为麦克风

                mRecord.setAudioSource(MediaRecorder.AudioSource.MIC);

              //设置音频格式
                mRecord.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

              //设置音频输出文件
                mRecord.setOutputFile(fileName);

               //设置音频编码
                mRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

      (3)开始录音

             mRecord.prepare();

              mRecord.start();

      (4)停止录音

              mRecord.stop();

              //释放资源
              mRecord.release();
              mRecord = null;

 二、播放

       (1) 实例化MediaPlayer对象

       (2)开始播放

                 //设置播放文件路径

                mPlayer.setDataSource(fileName);

                //准备资源
                 mPlayer.prepare();

                 //开始播放
                 mPlayer.start();

         (3)停止播放

                   mPlayer.stop();
                   mPlayer.release();

             

          

(1)布局activity_main.xml

   主体布局很简单,就是四个按钮

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
   android:orientation="vertical"
    tools:context="com.example.administrator.recorddemo.MainActivity">

   <Button
       android:id="@+id/start_record"
       android:layout_width="100dp"
       android:text="开始录音"
       android:layout_height="50dp"
       android:layout_gravity="center_horizontal"


       />
    <Button
        android:id="@+id/stop_record"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="停止录音"
        android:layout_gravity="center_horizontal"


        />
    <Button
        android:text="播放录音"
        android:id="@+id/play_record"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:layout_gravity="center_horizontal"


        />
    <Button
        android:id="@+id/stop_play"
        android:layout_width="100dp"
        android:layout_height="50dp"
        android:text="停止播放"
        android:layout_gravity="center_horizontal"


        />

</LinearLayout>
(2)核心代码

package com.example.administrator.recorddemo;


import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;


import android.view.View;
import android.widget.Button;




import java.io.IOException;


public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private Button btn_start,btn_stop,btn_play,btn_stop_play;
    private MediaPlayer mPlayer;//录音播放
    private MediaRecorder mRecord;//录音类
    private  String fileName = null;//录音文件名
    private String root  = null;//录音文件根目录




    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        root = Environment.getExternalStorageDirectory().getAbsolutePath();获取sd卡目录
        fileName= root+"/record.3gp";
        initView();//初始化view
        initEvents();//初始化点击事件
    }


    private void initEvents() {
        btn_stop_play.setOnClickListener(this);
        btn_stop.setOnClickListener(this);
        btn_play.setOnClickListener(this);
        btn_start.setOnClickListener(this);
    }
    private void initView() {
        btn_start = (Button)findViewById(R.id.start_record);
        btn_stop  = (Button)findViewById(R.id.stop_record);
        btn_play = (Button)findViewById(R.id.play_record);
        btn_stop_play = (Button)findViewById(R.id.stop_play);
    }


    @Override
    public void onClick(View view) {
        switch (view.getId()){
            //开始录音
            case  R.id.start_record:
                mRecord = new MediaRecorder();//实例化MediaRecorder对象
                btn_start.setText("正在录音...");
                mRecord.setAudioSource(MediaRecorder.AudioSource.MIC);//设置音频输入为麦克风
                mRecord.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置音频
                mRecord.setOutputFile(fileName);//设置保存的音频文件,这里的filename为路径+文件名
                mRecord.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//设置音频编码


                try {
                    mRecord.prepare();
                } catch (IOException e) {
                    System.out.println("Record fail!!!!!!!!!");
                    e.printStackTrace();


                }
                mRecord.start();
                System.out.println("录音成功!!!");
                break;








            //停止录音
            case R.id.stop_record:
                btn_start.setText("开始录音");
                mRecord.stop();
                mRecord.release();//释放资源
                mRecord = null;
                break;


            //播放录音
            case R.id.play_record:
                mPlayer  = new MediaPlayer();//实例化MediaPlayer
                try {
                    mPlayer.setDataSource(fileName);//设置播放文件来源
                    mPlayer.prepare();//准备播放
                    mPlayer.start();
                } catch (IOException e) {
                    e.printStackTrace();
                    System.out.println("Play Record fail!!!!");
                }
                break;
            //停止播放
            case R.id.stop_play:
                mPlayer.stop();
                mPlayer.release();
                break;
        }




    }
}

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值