今天工作上需要做一个一边录音一边播放的功能,大致原因是有一个外部设备输入音频到我们机器,然后我们机器需要马上把音频播放出来。所以了解了一些有关录音和播放的知识。接到这个任务的第一反应就是看看Android源码里面的录音Demo,因此今天针对Android的录音demo程序讲解一些录音和播放相关知识。

  今天主要讲解一下使用MediaRecorder 实现录音,主要是参照Android官网介绍来说明。

  今天讲的并不能实现一边录音一边播放,下一篇文章我再说如何解决这问题。下面是我们今天要讲解的Mediarecorder的状态机图。摘录自Android官网。

(PS:新建的QQ群,有兴趣可以加入一起讨论:Android群:322599434)

1、使用Mediarecorder 录音

  MediaRecorder类用来进行媒体采样,包括音频和视频。也就是用来记录音频和视频方法的类,记录的数据一般都是写入到文件里面。因此我们可以通过这个类实现录音和录视频的功能。下面介绍MediaRecorder用来录音的简单方法:

//Edited by mythou
//http://www.cnblogs.com/mythou/
 MediaRecorder recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(PATH_NAME);
recorder.prepare();
recorder.start(); // 开始录音 ...
recorder.stop();
recorder.reset(); // You can reuse the object by going back to setAudioSource() step
recorder.release(); // Now the object cannot be reused

上面是使用MediaRecorder录音的简单流程代码,基本上你使用的代码,就能实现录音的功能。

2、MediaRecorder 相关的类


//Edited by mythou
//http://www.cnblogs.com/mythou/
//定义音频编码
class MediaRecorder.AudioEncoder //定义声音资源
class MediaRecorder.AudioSource //回调接口,当录音出现错误的时候调用
interface MediaRecorder.OnErrorListener //回调接口,当录音出现错误的时候调用
interface MediaRecorder.OnInfoListener //定义输出格式
class MediaRecorder.OutputFormat //定义视频编码
class MediaRecorder.VideoEncoder

//定义视频source
class MediaRecorder.VideoSource

3、MediaRecorder常用方法


//Edited by mythou
//http://www.cnblogs.com/mythou/
//获取音频信号源的最高值。
final static int getAudioSourceMax() //最后调用这个方法采样的时候返回最大振幅的绝对值
int getMaxAmplitude() //准备recorder 开始捕获和编码数据
void prepare() //发布与此MediaRecorder对象关联的资源
void release() //重新启动mediarecorder到空闲状态
void reset() //设置录制的音频通道数。
void setAudioChannels(int numChannels) //设置audio的编码格式
void setAudioEncoder(int audio_encoder) //设置录制的音频编码比特率
void setAudioEncodingBitRate(int bitRate) //设置录制的音频采样率。
void setAudioSamplingRate(int samplingRate) //设置用于录制的音源。
void setAudioSource(int audio_source) //辅助时间的推移视频文件的路径传递。
void setAuxiliaryOutputFile(String path) void setAuxiliaryOutputFile(FileDescriptor fd)
//在文件描述符传递的辅助时间的推移视频 //设置一个recording的摄像头
void setCamera(Camera c) //设置视频帧的捕获率
void setCaptureRate(double fps) //设置记录会话的最大持续时间(毫秒)
void setMaxDuration(int max_duration_ms) //设置记录会话的最大大小(以字节为单位)
void setMaxFileSize(long max_filesize_bytes) //注册一个回调被调用发生错误时,同时录制
void setOnErrorListener(MediaRecorder.OnErrorListener l) //注册要同时记录一个信息事件发生时调用的回调。
void setOnInfoListener(MediaRecorder.OnInfoListener listener) //设置输出的视频播放的方向提示
void setOrientationHint(int degrees) //传递要写入的文件的文件描述符
void setOutputFile(FileDescriptor fd) //设置输出文件的路径
void setOutputFile(String path) //设置在录制过程中产生的输出文件的格式
void setOutputFormat(int output_format) //表面设置显示记录媒体(视频)的预览
void setPreviewDisplay(Surface sv) //从一个记录CamcorderProfile对象的使用设置
void setProfile(CamcorderProfile profile) //设置视频编码器,用于录制
void setVideoEncoder(int video_encoder) //设置录制的视频编码比特率
void setVideoEncodingBitRate(int bitRate) //设置要捕获的视频帧速率
void setVideoFrameRate(int rate) //设置要捕获的视频的宽度和高度
void setVideoSize(int width, int height) //开始捕捉和编码数据到setOutputFile(指定的文件)
void setVideoSource(int video_source) //开始录音
void start() //停止recording
void stop()

4、播放录音

//Edited by mythou
//http://www.cnblogs.com/mythou/
mPlayer = new MediaPlayer();
mPlayer.setDataSource(mSampleFile.getAbsolutePath());
mPlayer.setOnCompletionListener(this);
mPlayer.setOnErrorListener(this);
mPlayer.prepare();
mPlayer.start(); //.......
mPlayer.stop();
mPlayer.release();
mPlayer = null;

上面是一段简单播放录音的过程,结合上面录音代码,就可以实现录音和回放。

  MediaRecorder的使用方法很简单,最后给出Android源码里面的录音程序,方便有需要的朋友下载看看。下一篇文章再讲解如何实现一边录音一边播放功能。

Android录音程序下载:SoundRecorder8-6.rar

Edited by mythou

原创博文,转载请标明出处:http://www.cnblogs.com/mythou/p/3242000.html 

Android 录音和播放的更多相关文章

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

    http://blog.csdn.net/cxf7394373/article/details/8313980 android开发文档中有一个关于录音的类MediaRecord,一张图介绍了基本的流程 ...

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

    上一篇介绍了如何使用Mediarecorder来录音,以及播放录音.不过并没有达到我的目的,一边录音一边播放.今天就讲解一下如何一边录音一边播放.使用AndioRecord录音和使用AudioTrac ...

  3. Android开发教程 录音和播放

    首先要了解andriod开发中andriod多媒体框架包含了什么,它包含了获取和编码多种音频格式的支持,因此你几耍轻松把音频合并到你的应用中,若设备支持,使用MediaRecorder APIs便可以 ...

  4. Android平台下实现录音及播放录音功能的简介

    录音及播放的方法如下: package com.example.audiorecord; import java.io.File; import java.io.IOException; import ...

  5. MT6737 Android N 平台 Audio系统学习----录音到播放录音流程分析

    http://blog.csdn.net/u014310046/article/details/54133688 本文将从主mic录音到播放流程来进行学习mtk audio系统架构.  在AudioF ...

  6. 【Android】【录音】Android录音--AudioRecord、MediaRecorder

    [Android][录音]Android录音--AudioRecord.MediaRecorder Android提供了两个API用于实现录音功能:android.media.AudioRecord. ...

  7. android录音实现不再担心—一个案例帮你解决你的问题

    最近有小伙伴经常android的录音怎么实现,有没有相关的案例.今天给大家推荐一个android中实现录音和播放的小案例. 效果图: 一.实现录音的 Service 关键代码: // 开始录音 pub ...

  8. 关于ios 和 android 录音(语音)对聊文件格式问题

    关于ios 和 android 录音(语音)对聊文件格式问题 在做语音对讲的时候,将会碰到录制语音格式的问题,这些需要跨平台我们可能需要使用双方平台都支持的格式,或者执行编码转换 解决方式如下: wa ...

  9. android之MP3播放器(1)

    该播放器只是对本地的MP3文件进行简单的播放 布局文件 布局文件中设置了三个按钮分别来进行播放.暂停和继续播放 <?xml version="1.0" encoding=&q ...

随机推荐

  1. mysql5.7一键安装脚本

    0. 概述 最近鼓捣出了一个mysql安装脚本,将该脚本,mysql的my.cnf文件,mysql的安装包这三个文件放在同一个目录下面,执行sh mysql-auto-install.sh就可以完成m ...

  2. 深度学习中 droupout层是咋回事??

    参考这篇博文 博主写的非常好!   https://blog.csdn.net/program_developer/article/details/80737724 参考这篇博文 博主写的非常好!  ...

  3. Linux查看日志定位问题

    1.定位错误关键字所在行数 cat -n test.log |grep "查找的错误关键字" 2.得到错误关键字所在行号(假设为第500行),查询错误关键字前后100行数据 cat ...

  4. loj#2013. 「SCOI2016」幸运数字 点分治/线性基

    题目链接 loj#2013. 「SCOI2016」幸运数字 题解 和树上路径有管...点分治吧 把询问挂到点上 求出重心后,求出重心到每个点路径上的数的线性基 对于重心为lca的合并寻味,否则标记下传 ...

  5. #1075 : 开锁魔法III

    描述 一日,崔克茜来到小马镇表演魔法. 其中有一个节目是开锁咒:舞台上有 n 个盒子,每个盒子中有一把钥匙,对于每个盒子而言有且仅有一把钥匙能打开它.初始时,崔克茜将会随机地选择 k 个盒子用魔法将它 ...

  6. 使用HttpClient请求,问题记录

    上篇博客说到使用单例HttpClient,以GET请求方法为例.可以看到对于Http请求头中Authorization参数,会根据传入的accessToken是否为空来判断是否添加此请求头. publ ...

  7. JDBC(7)—DAO

    介绍: DAO(Data Access Object):数据访问对象 1.what:访问数据信息的类,包含了对数据的CRUD(create read.update.delete),而不包含业务相关的信 ...

  8. C#高级编程----错误和异常的总结

    错误和异常的总结 因为总结吗,,可能概念啥的比较多,大家要学着适应. 首先是C#中的异常用老处理系统级和用户级的错误状态,是一种结构化,统一的类型安全的处理机制. 因为鄙人开始想走C++的道路,所以搞 ...

  9. [Android Pro] https://blog.csdn.net/gaugamela/article/details/79143309

    原文地址:https://blog.csdn.net/gaugamela/article/details/79143309 最近遇到这样一个问题: 第三方的SDK除了Jar包外,还提供了对应的so文件 ...

  10. LiteIDE 在 Windows 下为 Go 语言添加智能提示代码补全

    本文以 Windows 7 64 位为环境,go1.4.2.windows-amd64 和 liteidex27.2.1.windows-qt5 为例. 成功搭建开发环境后,发现 LiteIDE 没有 ...