Android多媒体框架包含获取和编码多种音频格式的支持,所以你可以轻松地把音频合并到你的应用中.如果设备支持,你可以使用MediaRecorder APIs 进行录音.

本章向你展示如何写一个应用从设备上的microphone获取音频,然后保存并回放.

注:Android模拟器不具有录音的能力,但是真实的设备一般都具有此功能.

执行音频获取

从设备获取音频比回放音频或视频要复杂一点,但是也还算简单:

  • 创建一个android.media.MediaRecorder的新实例.
  • 使用MediaRecorder.setAudioSource()设置音频源,一般要使用MediaRecorder.AudioSource.MIC.
  • 使用MediaRecorder.setOutputFormat()设置输出文件的格式.
  • 使用MediaRecorder.setOutputFile()设置输出文件的名字.
  • 使用MediaRecorder.setAudioEncoder()设置音频编码.
  • 调用MediaRecorder 实例的MediaRecorder.prepare().
  • MediaRecorder.start()开始获取音频.
  • 调用MediaRecorder.stop().停止.
  • 当你用完MediaRecorder实例后,调用MediaRecorder.release(),就会立即释放资源.

示例:录音并回放录音

下面的例子演示了如何设置,开始以及停止音频获取,以及回放录制的文件.

/** 如果输出文件被写入外部存储,* 本应用需要具有写外部存储的权限, * 还要具有录音的权限.这些权限必须* 在AndroidManifest.xml 文件中声明,像这样:** <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />* <uses-permission android:name="android.permission.RECORD_AUDIO" />**/
package com.android.audiorecordtest;import android.app.Activity;
import android.widget.LinearLayout;
import android.os.Bundle;
import android.os.Environment;
import android.view.ViewGroup;
import android.widget.Button;
import android.view.View;
import android.view.View.OnClickListener;
import android.content.Context;
import android.util.Log;
import android.media.MediaRecorder;
import android.media.MediaPlayer;import java.io.IOException;public class AudioRecordTest extends Activity
{private static final String LOG_TAG = "AudioRecordTest";private static String mFileName = null;//录音按钮private RecordButton mRecordButton = null;private MediaRecorder mRecorder = null;//回放按钮private PlayButton   mPlayButton = null;private MediaPlayer   mPlayer = null;//当录音按钮被click时调用此方法,开始或停止录音private void onRecord(boolean start) {if (start) {startRecording();} else {stopRecording();}}//当播放按钮被click时调用此方法,开始或停止播放private void onPlay(boolean start) {if (start) {startPlaying();} else {stopPlaying();}}private void startPlaying() {mPlayer = new MediaPlayer();try {//设置要播放的文件mPlayer.setDataSource(mFileName);mPlayer.prepare();//播放之mPlayer.start();} catch (IOException e) {Log.e(LOG_TAG, "prepare() failed");}}//停止播放private void stopPlaying() {mPlayer.release();mPlayer = null;}private void startRecording() {mRecorder = new MediaRecorder();//设置音源为MicphonemRecorder.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) {Log.e(LOG_TAG, "prepare() failed");}mRecorder.start();}private void stopRecording() {mRecorder.stop();mRecorder.release();mRecorder = null;}//定义录音按钮class RecordButton extends Button {boolean mStartRecording = true;OnClickListener clicker = new OnClickListener() {public void onClick(View v) {onRecord(mStartRecording);if (mStartRecording) {setText("Stop recording");} else {setText("Start recording");}mStartRecording = !mStartRecording;}};public RecordButton(Context ctx) {super(ctx);setText("Start recording");setOnClickListener(clicker);}}//定义播放按钮class PlayButton extends Button {boolean mStartPlaying = true;OnClickListener clicker = new OnClickListener() {public void onClick(View v) {onPlay(mStartPlaying);if (mStartPlaying) {setText("Stop playing");} else {setText("Start playing");}mStartPlaying = !mStartPlaying;}};public PlayButton(Context ctx) {super(ctx);setText("Start playing");setOnClickListener(clicker);}}//构造方法public AudioRecordTest() {mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();mFileName += "/audiorecordtest.3gp";}@Overridepublic void onCreate(Bundle icicle) {super.onCreate(icicle);//构造界面LinearLayout ll = new LinearLayout(this);mRecordButton = new RecordButton(this);ll.addView(mRecordButton,new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,0));mPlayButton = new PlayButton(this);ll.addView(mPlayButton,new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT,0));setContentView(ll);}@Overridepublic void onPause() {super.onPause();//Activity暂停时释放录音和播放对象if (mRecorder != null) {mRecorder.release();mRecorder = null;}if (mPlayer != null) {mPlayer.release();mPlayer = null;}}
}

Android录音与播放相关推荐

  1. Android 录音和播放

    原文地址:Android 录音和播放 今天主要讲解一下使用MediaRecorder 实现录音,主要是参照Android官网介绍来说明. 今天讲的并不能实现一边录音一边播放,下一篇文章我再说如何解决这 ...

  2. Android录音并播放(mp3或amr格式)

    Android项目中媒体是很多人头疼的一个问题,不仅仅因为处理起来很麻烦,而且不同的手机差别很大(和硬件,系统都有关系),今天就总结一下Android中的录音和播放,可保存成mp3或amr格式. 小米 ...

  3. android 录音与播放录音 带根据音频大小动态效果

    先看看效果图:         首先是布局文件: <?xml version="1.0" encoding="utf-8"?> <Linear ...

  4. [Android] 录音与播放录音实现

    android开发文档中有一个关于录音的类MediaRecord,一张图介绍了基本的流程: 给出了一个常用的例子: MediaRecorder recorder = new MediaRecorder ...

  5. 音视频开发 ● android录音到播放的整个过程

    使用 AudioRecord 采集音频PCM并保存到文件: api - AndioRecord : AndioRecord类的主要功能是让各种JAVA应用能够管理音频资源,以便它们通过此类能够录制声音 ...

  6. Android 实时录音和回放,边录音边播放 (KTV回音效果)

    原文地址为: Android 实时录音和回放,边录音边播放 (KTV回音效果) 上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解 ...

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

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

  8. android录音播放并上传

    最近研究了下录音上传,各位有需要可参考下,如有不妥欢迎指出 <pre name="code" class="html">package com.ki ...

  9. Android音频录制方案,Android录音,录制其他App播放的声音

    Android录音,录制其他App播放的声音 从Android10(SDK 29)版本开始,可以设置录音App的源为其他App,这样就可以录制其他App播放的声音 此方案有以下注意几点 设置了源为其他 ...

最新文章

  1. Android6.0------权限申请管理(单个权限和多个权限申请)
  2. 【laravel】开发过程中会遇到的问题
  3. 阿里云引领云原生进化 | 云原生生态周报 Vol. 60
  4. C#小游戏—钢铁侠VS太空侵略者
  5. 【LeetCode笔记】200. 岛屿数量(Java、DFS)
  6. php设计的意义,PHP设计模式
  7. C++实现输入任意大小的整形数组并且利用冒泡排序法进行升序排序并且进行二分查找
  8. 7-8 12-24小时制 (15 分)
  9. 不要在作死的边缘试探(最后那个英雄手势挺好玩儿的)
  10. Java实现:归并排序
  11. OSPF基础配置命令
  12. 设计师需要的素材、教程、工具等网站收集
  13. 易语言服务器客户端网络验证,超强网络验证系统附远程服务支持库
  14. MMA-关于mathematica中添加注释的一些方法(包括排版技巧)
  15. Docker容器与本地文件相互拷贝
  16. python简易自动化之pyautogui 2020-12-19
  17. 24.树莓派交叉编译工具链的安装
  18. css寸照的自适应比例设置
  19. 深度学习笔记:神经网络权重确定初始值方法
  20. 12款浏览器兼容性测试工具推荐

热门文章

  1. css实现右上角角标
  2. c语言程序设计用指纹解锁门,基于指纹识别技术的校园门禁应用
  3. 【XGBoost】第 5 章:XGBoost 揭幕
  4. 一个来自伊朗官方的监视行动:Domestic Kitten,样本特征明显
  5. DTU于充电桩联网应用
  6. 金银花和胖大海能一起泡水喝的吗?
  7. 懒人必备公式快速插入word(latexocr+TyporaMathtype)保姆集教程
  8. 浅谈Java平台无关性
  9. 【数学知识】欧几里得空间
  10. tar -xf_linux 解压缩命令tar