您的位置:首页 > 移动开发 > Android开发

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

2016-07-18 17:37 543 查看
       最近在项目开发中用到了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;

        }

    }

}

    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android录音功能