Android开发中,实现录音的方式主要有两种:MediaRecorderAudioRecord

两者区别在于MediaRecorder录制的文件是经过压缩的,需要设置编码器,录制的文件系统可以直接播放。

而AudioRecord录制的是PCM格式的文件,录制的文件没有经过编码,需要使用AudioTrack播放。

使用步骤

一、添加权限

添加录音胡权限:

  <uses-permission android:name="android.permission.RECORD_AUDIO" />

RECORD_AUDIO属于运行时权限,申请权限:

 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO}, 1);

二、创建 MediaRecorder 对象

2.1、创建MediaRecorder对象
    private MediaRecorder mRecorder;mRecorder = new MediaRecorder();
2.2、设置音频源 setAudioSource
//MIC 麦克风音频源
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);

可选的音频源在 AudioSource 中有:

    public final class AudioSource {private AudioSource() {}/** @hide */public final static int AUDIO_SOURCE_INVALID = -1;/** 默认音频 **/public static final int DEFAULT = 0;/** 麦克风 */public static final int MIC = 1;/** Voice call uplink (Tx) audio source.* 语音呼叫上行(Tx)音频源*/public static final int VOICE_UPLINK = 2;/** Voice call downlink (Rx) audio source.*  语音呼叫下行(Rx)音频源。*/public static final int VOICE_DOWNLINK = 3;/** Voice call uplink + downlink audio source*  语音通话上行+下行音频源*/public static final int VOICE_CALL = 4;/** Microphone audio source tuned for video recording, with the same orientation*  as the camera if available. */public static final int CAMCORDER = 5;/** 麦克风音频源进行了语音识别. */public static final int VOICE_RECOGNITION = 6;/** Microphone audio source tuned for voice communications such as VoIP. It*  will for instance take advantage of echo cancellation or automatic gain control*  if available.*/public static final int VOICE_COMMUNICATION = 7;/*** 用于远程呈现音频流子混合的音频源。*/@RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_OUTPUT)public static final int REMOTE_SUBMIX = 8;/** 麦克风原始音频*  {@link #DEFAULT} otherwise. */public static final int UNPROCESSED = 9;/*** Audio source for capturing broadcast radio tuner output.* @hide*/@SystemApipublic static final int RADIO_TUNER = 1998;/*** Audio source for preemptible, low-priority software hotword detection*/@SystemApi@RequiresPermission(android.Manifest.permission.CAPTURE_AUDIO_HOTWORD)public static final int HOTWORD = 1999;}
2.3、设置输出格式: setOutputFormat
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);

可选输出格式有:

    public final class OutputFormat {private OutputFormat() {}public static final int DEFAULT = 0;/** 3GPP media file format*/public static final int THREE_GPP = 1;/** MPEG4 media file format*/public static final int MPEG_4 = 2;/** The following formats are audio only .aac or .amr formats *//*** AMR NB file format* @deprecated  Deprecated in favor of MediaRecorder.OutputFormat.AMR_NB*/public static final int RAW_AMR = 3;/** AMR NB file format */public static final int AMR_NB = 3;/** AMR WB file format */public static final int AMR_WB = 4;/** @hide AAC ADIF file format */public static final int AAC_ADIF = 5;/** AAC ADTS file format */public static final int AAC_ADTS = 6;/** @hide Stream over a socket, limited to a single stream */public static final int OUTPUT_FORMAT_RTP_AVP = 7;/** H.264/AAC data encapsulated in MPEG2/TS */public static final int MPEG_2_TS = 8;/** VP8/VORBIS data in a WEBM container */public static final int WEBM = 9;};
2.4、设置输出文件名 setOutputFile
     String mFileName = getExternalCacheDir().getAbsolutePath() + "/audio_test.3gp";mRecorder.setOutputFile(mFileName);
2.5、设置音频编码 setAudioEncoder
     mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

可选编码有:

    public final class AudioEncoder {private AudioEncoder() {}public static final int DEFAULT = 0;/** AMR (Narrowband) audio codec */public static final int AMR_NB = 1;/** AMR (Wideband) audio codec */public static final int AMR_WB = 2;/** AAC Low Complexity (AAC-LC) audio codec */public static final int AAC = 3;/** High Efficiency AAC (HE-AAC) audio codec */public static final int HE_AAC = 4;/** Enhanced Low Delay AAC (AAC-ELD) audio codec */public static final int AAC_ELD = 5;/** Ogg Vorbis audio codec */public static final int VORBIS = 6;}

三、准备录制(prepare()、start())

录制前需要调用prepare()方法

    private void startRecord() {mRecorder = new MediaRecorder();//设置录入音频源//MIC 麦克风音频源mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);//设置输出格式mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);//设置输出文件mRecorder.setOutputFile(mFileName);//设置音频编码mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);//准备编码try {mRecorder.prepare();} catch (IOException e) {e.printStackTrace();}//开始录制mRecorder.start();mRecorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {@Overridepublic void onError(MediaRecorder mr, int what, int extra) {//mRecorder.reset();Log.e("tag", "zzy:  录制出错");}});}

四、停止录制 stop()

     mRecorder.stop();

五、播放音频

播放的话可以找到录制的文件进行播放,也可以使用MediaPlayer进行播放

 //初始化MediaPlayer mPlayer;mPlayer = new MediaPlayer();mPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {@Overridepublic void onPrepared(MediaPlayer mp) {mPlayer.start();}});//点击播放mPlayer.setDataSource(mFileName);mPlayer.prepareAsync();

MediaRecorder 用法还是很简单的,更多的用例可以到官网上查看

参考: https://developer.android.google.cn/guide/topics/media/mediarecorder?hl=zh_cn

Android 使用MediaRecorder实现录音相关推荐

  1. Android 调用系统api录音的两种方式(MediaRecorder、AudioRecord)

    废话 权限.权限.权限,必须要先获取了录音权限,其他的事情晚点再说. 另外,新版本的Android 10系统会对录音有调整,引入了一个录音焦点的概念,也就是说以前的麦克风只能一个APP使用,必须要等它 ...

  2. Android开发之PCM录音实时播放的实现方法 | 边录音边播放 |PCM录音播放无延迟 | 录音无杂音 | 录音无噪音

    先说下录音得开启录音权限 <uses-permission android:name="android.permission.RECORD_AUDIO" /> 然后录音 ...

  3. Android之mediarecorder中的方法以及工作流程的过程

    嵌套.关联的类 class MediaRecorder.AudioEncoder 定义音频编码 class MediaRecorder.AudioSource 定义声音资源 interface Med ...

  4. Android开发学习之录音同步播放的实现

    最近看到一篇关于音频的文章,忽然想起以前有个中国传媒大学的一位朋友,要我帮她设计一个可以实时播放输入音频的程序,我当时想到了要用DirectSound,可是对于这种从来没有碰过的东西,我内心是多少有些 ...

  5. android中录音断点播放,Android实现暂停--继续录音(AudioRecord)

    Android提供了两个API用于录音的实现:MediaRecorder 和 AudioRecord,各有优劣. 1.MediaRecorder 已经集成了录音.编码.压缩等,支持少量的录音音频格式, ...

  6. Android使用AudioRecord实现录音

    文章目录 前言 一.AudioRecord使用 二.使用步骤 总结 前言 Android使用AudioRecord实现录音 提示:以下是本篇文章正文内容,下面案例可供参考 一.AudioRecord使 ...

  7. android 录音的格式转换,Android仿微信录音功能(录音后的raw文件转mp3文件)

    现在很多时候需要用到录音,然后如果我们的App是ios和android两端的话,就要考虑录音的文件在两端都能使用,这个时候就需要适配,两端的录音文件都要是mp3文件,这样才能保证两边都能播放. 针对这 ...

  8. Android实现长按录音松开保存、播放及根据声贝动画展示

    Android实现长按录音松开保存及根据声贝动画展示 1.准备两张需要动态展示的图片 2.布局文件popup_window.xml 3.popup.xml 文件 4.封装MediaRecorder初始 ...

  9. android利用MediaRecorder实现录音功能

    android用手机录音保存到sd卡中: 布局文件: <?xml version="1.0" encoding="utf-8"?> <Line ...

最新文章

  1. android 闪烁发光动画,androidview动画发光效果在imageview上
  2. VS2017 性能优化方法
  3. 计算机应用基础2004年,计算机应用基础2004年下半年全国试题参考答案2
  4. flex4 s:Datagrid s:typicalItem
  5. spring cloud构建互联网分布式微服务云平台-Ribbon
  6. 1001 A+B Format (20point(s))(Java和C++)
  7. 使用SaxParser和完整代码进行XML解析
  8. fiber报错 (type *big.Int has no field or method FillBytes)
  9. Flex与.NET互操作(十三):FluorineFx.Net实现视频录制与视频回放
  10. centos 6.5上安装php7,centos 6.5 编译安装PHP7
  11. background相关属性
  12. java语言程序设计第三版沈泽刚课后答案_Java语言程序设计 (第3版) 学习指导与习题解析...
  13. Windows10性能优化设置
  14. ASC码表 和 转义字符表
  15. 2015061004 - slf4和mysql,jdbc下载地址
  16. 【C语言】案例五十一 员工档案管理系统
  17. linux的7za无法使用,提示命令找不到:-bash 7za command not found的解决方法.doc
  18. 【行业标准】YBT092-2019-合金铸铁磨球(高中低铬铸造钢球)
  19. JSON解析工具----JSONPath基本使用
  20. oracle只导入dmp中指定表,oracle 如何导入dmp文件到指定表空间

热门文章

  1. 目标检测面试常问问题总结
  2. 函数Retrieve详解
  3. 有哪些软件可以让图片动起来?这些软件你值得拥有
  4. 北京大学计算机考研复试分数线,2013年北京大学计算机考研复试分数线
  5. docker查看容器IP的方法
  6. BB10 NDK Cascades 框架简介和QT使用教程(与Nokia Symbian QT的区别)
  7. 系统服务器采购,用勤哲Excel服务器实现采购预算管理系统
  8. 变分自编码器背后的直觉【VAE】
  9. python msgpack_Python中msgpack库的使用
  10. 「学习总结-Haskell-1」Haskell 基础知识