android 录制短音频
2016-01-21 15:48
369 查看
有个语音聊天需求,于是写了个工具类用来录制短音频。
该类为单例模式,通过getInstance()获取到实例后调用startRecord开始录制,调用stopRecord停止录制,没有暂停功能.
该类为单例模式,通过getInstance()获取到实例后调用startRecord开始录制,调用stopRecord停止录制,没有暂停功能.
getAMRFilePath获取文件路径,只会保留最后一次的录音文件,每次开始录制时都会删除上一次的录音文件。
public class AudioRecorderr { private boolean isRecord = false; private int maxDuration = 60 * 1000;//最长录制时间 private int maxSize = 5 * 1024 * 1024;//最大录音大小限制为5M private MediaRecorder mMediaRecorder; private Context mContext; private final String AUDIO_AMR_FILENAME = "temp.amr"; private AudioRecorderr(Context context) { mContext = context; } private static AudioRecorderr mInstance; /** * 获取实例 * @param context * @return */ public synchronized static AudioRecorderr getInstance(Context context) { if (mInstance == null) mInstance = new AudioRecorderr(context); return mInstance; } /** * 开始录制 */ public void startRecord() { if (!isRecord) { isRecord = true; if (mMediaRecorder == null) createMediaRecord(); try { mMediaRecorder.prepare(); mMediaRecorder.start(); } catch (IOException ex) { ex.printStackTrace(); } } } /** * 结束录制 */ public void stopRecord() { close(); } /** * 获取录音文件的大小,单位为KB */ public double getRecordSize() { File mFile = new File(getAMRFilePath()); if (!mFile.exists()) return -1; return mFile.length() / 1024; } private void createMediaRecord() { mMediaRecorder = new MediaRecorder(); /* * 设置音频来源为麦克风 */ mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); /* * 设置最长录制时间 */ mMediaRecorder.setMaxDuration(maxDuration); /* * 设置最大录音文件大小 */ mMediaRecorder.setMaxFileSize(maxSize); /* 设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default * THREE_GPP(3gp格式,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB) */ mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); /* 设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default */ mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); /* 设置输出文件的路径 */ File file = new File(getAMRFilePath()); if (file.exists()) { file.delete(); } mMediaRecorder.setOutputFile(getAMRFilePath()); } private void close() { if (mMediaRecorder != null) { isRecord = false; mMediaRecorder.stop(); mMediaRecorder.release(); mMediaRecorder = null; } } /** * 获取AMR格式音频文件地址 * @return */ public String getAMRFilePath() { return mContext.getExternalCacheDir().getAbsolutePath() + "/" + AUDIO_AMR_FILENAME; } }
相关文章推荐
- Android 获取系统联系人并排序
- Android学习历程7-Activity详解
- android代码集锦
- AndroidManifest.xml配置文件详解
- Android Studio 图片资源引用杂谈
- Android小问题:android studio怎么查看数字签名 sha1(地图)
- Cordova / PhoneGap开发入门,基于HTML、CSS和JavaScript的Android移动开发框架
- android技巧(五)一个异步+接口回调的例子
- Android数据存储
- Android working with Google Maps V2
- Android Studio集成crashlytics后无法编译的问题
- Android中使用【microlog4】进行日志存储
- 初识Face++在android上的应用
- Android Content
- 彻底理解android中的内部存储与外部存储
- Ubuntu 编译Android源码出现Switch.pm出错信息的解决方法
- Android Netty框架的使用
- android 中wait notify 的使用,及wait与sleep区别
- PS将psd中的android小图标单个保存为png图标
- android换皮肤思路总结