• Android App调用MediaRecorder实现录音功能的实例【转】


    本文转载自:http://www.jb51.net/article/82281.htm

    这篇文章主要介绍了Android App调用MediaRecorder实现录音功能的实例,MediaRecorder非常强大,不仅能够用来录制音频还可以录制视频,需要的朋友可以参考下
     

    MediaRecorder

    Android的MediaRecorder包含了Audio和video的记录功能,在Android的界面上,Music和Video两个应用程序都是调用MediaRecorder实现的。
    MediaRecorder在底层是基于OpenCore(PacketVideo)的库实现的,为了构建一个MediaRecorder程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是Android基本库中的Binder机制。
    以开源的Android为例MediaRecorder的代码主要在以下的目录中:
    JAVA程序的路径:

    packages/apps/Camera/src/com/android/camera/VideoCamera.java
    

    JAVA Framework的路径:

    frameworks/base/media/java/android/media/MediaRecorder.java
    

    JAVA本地调用部分(JNI):

    frameworks/base/media/jni/android_media_MediaRecorder.cpp
    

    这部分内容编译成为目标是libmedia_jni.so。
    主要的头文件在以下的目录中:

    frameworks/base/include/media/
    

    多媒体底层库在以下的目录中:

    frameworks/base/media/libmedia/ 
    

    这部分的内容被编译成库libmedia.so。
    多媒体服务部分:

    frameworks/base/media/libmediaplayerservice/
    

    MediaRecorder和MeidaPlayer使用相同的服务。
    基于OpenCore部分 

    external/opencore/android/author
    

    这部分内容被编译成库libopencoreauthor.so。

    基本的录音功能实现:
    好了,了解了大概的路径,具体的调用MediaRecorder的内容便可以深入各文件中去研究,接下来我们便直接来看例子,这个录音器的代码实现的说明都写在了注释中,非常简单:
      

    import java.io.IOException; 
     
    import android.app.Activity; 
    import android.media.MediaRecorder; 
    import android.os.Bundle; 
    /** 
     * @description 对通过android系统手机进行录音的一点说明测试 
     * @author chenzheng_java 
     * @since 2011/03/23 
     */ 
    public class MediaRecordActivity extends Activity { 
      
     MediaRecorder mediaRecorder ; 
     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
       
      mediaRecorder = new MediaRecorder(); 
      record(); 
       
     } 
      
     /** 
      * 开始录制 
      */ 
     private void record(){ 
      /** 
       * mediaRecorder.setAudioSource设置声音来源。 
       * MediaRecorder.AudioSource这个内部类详细的介绍了声音来源。 
       * 该类中有许多音频来源,不过最主要使用的还是手机上的麦克风,MediaRecorder.AudioSource.MIC 
       */ 
      mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
      /** 
       * mediaRecorder.setOutputFormat代表输出文件的格式。该语句必须在setAudioSource之后,在prepare之前。 
       * OutputFormat内部类,定义了音频输出的格式,主要包含MPEG_4、THREE_GPP、RAW_AMR……等。 
       */ 
      mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      /** 
       * mediaRecorder.setAddioEncoder()方法可以设置音频的编码 
       * AudioEncoder内部类详细定义了两种编码:AudioEncoder.DEFAULT、AudioEncoder.AMR_NB 
       */ 
      mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
      /** 
       * 设置录音之后,保存音频文件的位置 
       */ 
      mediaRecorder.setOutputFile("file:///sdcard/myvido/a.3pg"); 
       
      /** 
       * 调用start开始录音之前,一定要调用prepare方法。 
       */ 
      try { 
       mediaRecorder.prepare(); 
       mediaRecorder.start(); 
      } catch (IllegalStateException e) { 
       e.printStackTrace(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
       
     } 
      
     /*** 
      * 此外,还有和MediaRecorder有关的几个参数与方法,我们一起来看一下: 
      * sampleRateInHz :音频的采样频率,每秒钟能够采样的次数,采样率越高,音质越高。 
      * 给出的实例是44100、22050、11025但不限于这几个参数。例如要采集低质量的音频就可以使用4000、8000等低采样率 
      * 
      * channelConfig :声道设置:android支持双声道立体声和单声道。MONO单声道,STEREO立体声 
      * 
      * recorder.stop();停止录音 
      * recorder.reset(); 重置录音 ,会重置到setAudioSource这一步 
      * recorder.release(); 解除对录音资源的占用 
      */ 
    } 
    

    这里,一定要注意一点,那就是如果我们想要录音的话,那么首先得添加录音权限到AndroidManiferst.xml中:

    <uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
  • 相关阅读:
    入门练习
    课堂作业补充
    例题作业(9.1-9.7)
    stream — 创建stream(一)
    Lambda表达式的四大内置核心函数式接口
    lambda表达式基础语法及其使用
    java 按照固定大小分割 list 集合的几种方式
    分布式锁相关解决方案
    zabbix3.0 使用详解
    eclipse Memory Analyzer (mat) 安装及使用
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7736379.html
Copyright © 2020-2023  润新知