登录 立即注册
安币:

查看: 257|回复: 4

Android App调用MediaRecorder实现录音功能的实例,android mediastore

[复制链接]

446

主题

882

帖子

2006

安币

手工艺人

发表于 2018-1-11 15:40:42 | 显示全部楼层 |阅读模式

        mediarecorder

        android的mediarecorder包含了audio和video的记录功能,在android的界面上,music和video两个应用程序都是调用mediarecorder实现的。
mediarecorder在底层是基于opencore(packetvideo)的库实现的,为了构建一个mediarecorder程序,上层还包含了进程间通讯等内容,这种进程间通讯的基础是android基本库中的binder机制。
以开源的android为例mediarecorder的代码主要在以下的目录中:
java程序的路径:

[Java] 查看源文件 复制代码
packages/apps/camera/src/com/android/camera/videocamera.java

        java framework的路径:

[Java] 查看源文件 复制代码
frameworks/base/media/java/android/media/mediarecorder.java

        java本地调用部分(jni):

[Java] 查看源文件 复制代码
frameworks/base/media/jni/android_media_mediarecorder.cpp

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

[Java] 查看源文件 复制代码
frameworks/base/include/media/

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

[Java] 查看源文件 复制代码
frameworks/base/media/libmedia/ 

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

[Java] 查看源文件 复制代码
frameworks/base/media/libmediaplayerservice/

        mediarecorder和meidaplayer使用相同的服务。
基于opencore部分

[Java] 查看源文件 复制代码
external/opencore/android/author

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

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

[Java] 查看源文件 复制代码
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中:

[Java] 查看源文件 复制代码
<uses-permission android:name="android.permission.record_audio"></uses-permission>


28

主题

1万

帖子

1385

安币

Android大神

小白

Rank: 6Rank: 6

发表于 2018-1-13 01:54:47 | 显示全部楼层
不错不错,楼主辛苦了。。。

11

主题

9208

帖子

1002

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-14 04:05:28 | 显示全部楼层
每次我都积极回帖的,想要安币~

7

主题

9737

帖子

2347

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-14 21:05:35 | 显示全部楼层
支持楼主,支持安卓巴士!

0

主题

9006

帖子

2082

安币

Android大神

Rank: 6Rank: 6

发表于 2018-1-15 08:30:57 | 显示全部楼层
楼主是好人,回个帖会有安币吗?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

站长推荐

通过邮件订阅最新安卓weekly信息
上一条 /4 下一条

下载安卓巴士客户端

全国最大的安卓开发者社区

联系我们
关闭
合作电话:
15618560077
Email:
805941275@qq.com
商务市场合作/投稿
问题反馈及帮助
联系我们

广告投放| 下载客户端|申请友链|手机版|站点统计|安卓巴士 ( 粤ICP备15117877号 )

快速回复 返回顶部 返回列表