本文转载自: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>

Android App调用MediaRecorder实现录音功能的实例【转】的更多相关文章

  1. android app自动化测试之UIAutomator

    一.UIAutomator Android自动化测试工具有很多,但是要免费.易上手,本人觉得就直接使用Eclipse自带的UIAutomator就不错.测试人员无需跟开发要代码信息,只要手机上有安装之 ...

  2. Android app启动activity并调用onCreate()方法时都默默地干了什么?

    Android app启动activity并调用onCreate() 方法时都默默地干了什么?   在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...

  3. 原生Android App项目调用Untiy导出的Android项目

    背景:采用Google VR SDK for Unity 开发3D场景功能,然后导出Android项目,合并到一个Android App里面,供其它Activity调用. 用Google VR for ...

  4. android app widget 创建调用周期

    1 ?Android widget 大小问题 2 ?RemoteViewService Android开发历程_15(AppWidget的使用) Appwidget就是手机应用中常常放在桌面(即hom ...

  5. Android简单的利用MediaRecorder进行录音的实例代码

    MainActivity.java package com.example.soundrecord_demo; import java.io.IOException; import android.m ...

  6. Android(java)学习笔记117:英文朗诵android App编写实例

    1.首先,我先把代码放到下面: package com.himi.speaker; import java.util.Locale; import android.app.Activity; impo ...

  7. 通过实例介绍Android App自动化测试框架--Unittest

    1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...

  8. 简单两步实现Android app 本地设置信息的保存与调用

    调用值 SharedPreferences preferences = this.getSharedPreferences("mspda", 0); lblVer.setText( ...

  9. Android音频录制MediaRecorder之简易的录音软件实现代码(转)

    原文:http://www.jb51.net/article/46182.htm Android音频录制MediaRecorder之简易的录音软件实现代码 这篇文章主要介绍了Android音频录制Me ...

随机推荐

  1. Discuz伪静态代码

    <?php /** * [伪静态跳转(xugui_redirect.{modulename})] (C)2012-2099 Powered by 懒人V难人. * Version: 1.0 * ...

  2. JMeter怎样测试WebSocket,如何设置(一)

    一.安装WebSocket取样器 1.从JMeter插件管理器官网下载:https://jmeter-plugins.org/ 把这6个jar包放到C:\JMeter\apache-jmeter-3. ...

  3. jmeter的JDBC Request接口测试

    Jmeter操作Mysql 测试计划添加.jar包 mysql-connector-java-5.1.7-bin.jar用于使Jmeter可以读取Mysql: 线程组添加 JDBC Connectio ...

  4. The following packages have unmet dependencies:

    root@ubuntu:~# apt-get install open-iscsiReading package lists... DoneBuilding dependency treeReadin ...

  5. API Studio 5.1.2 版本更新:加入全局搜索、支持批量测试API测试用例、读取代码注解生成文档支持Github与码云等

    最近在EOLINKER的开发任务繁重,许久在博客园没有更新产品动态了,经过这些日子,EOLINKER又有了长足的进步,增加了更多易用的功能,比如加入全局搜索.支持批量测试API测试用例.读取代码注解生 ...

  6. Python isalpha() 方法检测字符串是否只由字母组成。

    Python isalpha() 方法检测字符串是否只由字母组成.

  7. 网络编程 - socket接收大数据

    通过socket,实现客户端发送命令,将服务端执行出的结果,反回到客户端,主要4个步骤:1.服务端返回数据: 2.服务端返回数据的大小: 3.客户端接收返回数据的大小: 4.客户端按返回数据大小接收数 ...

  8. JAVA基础——集合类汇总

    一.集合与数组 数组(可以存储基本数据类型)是用来存现对象的一种容器,但是数组的长度固定,不适合在对象数量未知的情况下使用. 集合(只能存储对象,对象类型可以不一样)的长度可变,可在多数情况下使用. ...

  9. react入门----基础语法

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. BZOJ 1666 USACO 2006 Oct. 奶牛的数字游戏

    直接模拟2333 #include<cstdio> #include<algorithm> using namespace std; int n,ans; void read( ...