Android App调用MediaRecorder实现录音功能的实例【转】
本文转载自:http://www.jb51.net/article/82281.htm
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实现录音功能的实例【转】的更多相关文章
- android app自动化测试之UIAutomator
一.UIAutomator Android自动化测试工具有很多,但是要免费.易上手,本人觉得就直接使用Eclipse自带的UIAutomator就不错.测试人员无需跟开发要代码信息,只要手机上有安装之 ...
- Android app启动activity并调用onCreate()方法时都默默地干了什么?
Android app启动activity并调用onCreate() 方法时都默默地干了什么? 在AndroidManifest.xml文件中的<intent-filter>元素中有这 ...
- 原生Android App项目调用Untiy导出的Android项目
背景:采用Google VR SDK for Unity 开发3D场景功能,然后导出Android项目,合并到一个Android App里面,供其它Activity调用. 用Google VR for ...
- android app widget 创建调用周期
1 ?Android widget 大小问题 2 ?RemoteViewService Android开发历程_15(AppWidget的使用) Appwidget就是手机应用中常常放在桌面(即hom ...
- Android简单的利用MediaRecorder进行录音的实例代码
MainActivity.java package com.example.soundrecord_demo; import java.io.IOException; import android.m ...
- Android(java)学习笔记117:英文朗诵android App编写实例
1.首先,我先把代码放到下面: package com.himi.speaker; import java.util.Locale; import android.app.Activity; impo ...
- 通过实例介绍Android App自动化测试框架--Unittest
1.为什么需要使用框架实现自动化测试 作为测试工程师,可能在代码能力上相比开发工程师要弱一点,所以我们在写脚本的时候就会相对容易的碰到更多的问题,如果有一个成熟的框架供给我们使用的话,可以帮助我们避免 ...
- 简单两步实现Android app 本地设置信息的保存与调用
调用值 SharedPreferences preferences = this.getSharedPreferences("mspda", 0); lblVer.setText( ...
- Android音频录制MediaRecorder之简易的录音软件实现代码(转)
原文:http://www.jb51.net/article/46182.htm Android音频录制MediaRecorder之简易的录音软件实现代码 这篇文章主要介绍了Android音频录制Me ...
随机推荐
- swift 工作日志
开发问题汇总: tableview.register(CEImpWalletHomeCell.self, forCellReuseIdentifier: "cell") var c ...
- <东方梦符祭> N2无尽40波通关
先上图吧 阵容:纯粹 + 伪魔法队 主C:神妈 露米娅(我觉得不厉害了) 灵梦 控制:琪露诺 + 蕾蒂 永江依玖(听说很厉害 没培育满 没看到效果) 挂件:铃仙挂机 帕秋莉 大妖精(链神妈) 圣今天才 ...
- <SpringMvc>入门四 响应结果
1.响应String类型 根据试图解析器,去找相对应的jsp Model将对象存在request中 2.响应void类型 可以看出,此时void方法执行了,系统默认会去找testVoid.jsp 意思 ...
- TestNG套件测试(二)
在xml中指定要运行的整个包来执行套件测试 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- 编写函数,第一个参数指定今天是星期几(1 ~ 7),第二个参数指定天数n,返回n天后是星期几
def week(today, n): s = n % 7 + today return "n天后是星期:{}".format(s) print(week(1, 3))
- 1.Zigbee开发学习资源
http://blog.csdn.net/zhanglianpin/article/details/46907349
- shrink&split
shrink将分片数按因子缩减.hard link segment文件.因缩减前后hash一致,不需要rehash.如:0 ,1 , 2, 3, 4, 5, 6, 7, 8.9个分片缩减成3个:0 [ ...
- Leetcode 76.最小覆盖子串
最小覆盖子串 给定一个字符串 S 和一个字符串 T,请在 S 中找出包含 T 所有字母的最小子串. 示例: 输入: S = "ADOBECODEBANC", T = "A ...
- hdu 5015 矩阵快速幂(可用作模板)
转载:http://blog.csdn.net/wdcjdtc/article/details/39318847 之前各种犯傻 推了好久这个东西.. 后来灵关一闪 就搞定了.. 矩阵的题目,就是构造 ...
- 总结for循环及for循环增强遍历数组,list,set和map
一.对于集合 (1)普通for循环 int[] arr = { 2, 1, 2 }; for(int i=0;i<arr.length;i++){ System.out.println(arr[ ...