Android编程实战——仿微信群聊-4——Media语音
来源:互联网 发布:租赁网络平台 编辑:程序博客网 时间:2024/03/28 18:47
Android编程实战——仿微信群聊-4——Media语音
项目源代码移步github
服务器客户端通信建立完毕,接下来就是传输数据了,这里我们要发送语音的话就需要用的Adroid的MiediaPlayer类和 MediaRecorder类。前者用来播放语音文件,后者用来录音。这里用一个AudioMananger类把功能包装起来。
AudioMananger:
public class AudioMananger implements IAudioMananger { private String filePath; //文件路径 private String dirPath; // 目录路径 private final String TAG="audio"; private MediaRecorder mediaRecorder; //录音类 private MediaPlayer mediaPlayer; //播放类 private static final int MAX_LENGTH = 1000 * 60 *20; //最大录音时长 private long time ; //录音时长 private long startTime; private long endTime; public AudioMananger() { //默认目录路径/sdcard/record/ this.dirPath = AudioFile.SAVE_AUDIO_DIR_PATH; } public AudioMananger(String dirPath) { this.dirPath = dirPath; } /** * 开始录音 使用amr格式 */ @Override public void startRecoder() { try { //创建文件目录 Log.i("dirPath",dirPath); File dir=new File(dirPath); if(!dir.exists()) { dir.mkdirs(); Log.i("folder", "create folder"); } //实例化MediaRecoder对象 if (mediaRecorder == null) { mediaRecorder = new MediaRecorder(); } //以当前时间为文件名并获得文件路径 String name = Time.getTime(); filePath=dirPath + "/" + name + ".amr"; //获得文件绝对路径 //设置MediaRecoder mediaRecorder.setOutputFile(filePath); //设置输出文件 mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); //设置音频源为麦克风 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.RAW_AMR); //设置输出格式 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //设置音频编码 mediaRecorder.setMaxDuration(MAX_LENGTH); //设置最大时间 //准备 mediaRecorder.prepare(); //开始 mediaRecorder.start(); Log.i("start", "startRecoder"); startTime = System.currentTimeMillis(); }catch (IllegalStateException e) { Log.i(TAG, "call startAmr(File mRecAudioFile) failed!" + e.getMessage()); } catch (IOException e) { Log.i(TAG, "call startAmr(File mRecAudioFile) failed!" + e.getMessage()); } } /** * 停止录音(保存录音文件即发送语音) * @return */ @Override public String stopRecoder() { mediaRecorder.stop(); endTime = System.currentTimeMillis(); time = endTime - startTime; mediaRecorder.reset(); mediaRecorder.release(); Log.i("file Path", filePath); mediaRecorder = null; return filePath; } /** * 取消录音(不保存录音文件) */ @Override public void cancelRecoder() { mediaRecorder.stop(); mediaRecorder.reset(); mediaRecorder.release(); mediaRecorder = null; File file = new File(filePath); if (file.exists()) { file.delete(); } filePath = ""; } /** * 播放语音文件 * @param filePath 文件地址 */ @Override public void palyAudio(String filePath) { if (mediaPlayer == null) { mediaPlayer = new MediaPlayer(); } mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { stopPlay(); } }); try { mediaPlayer.setDataSource(filePath); mediaPlayer.prepare(); mediaPlayer.start(); } catch (IOException e) { e.printStackTrace(); } } /** * 获取录音时长 * @return */ @Override public float getTime() { return Float.valueOf(time); } /** * 停止播放语音文件 */ @Override public void stopPlay() { mediaPlayer.stop(); mediaPlayer.release(); mediaPlayer = null; } /** * 判断是否正在播放 * @return */ @Override public boolean isPlaying() { if (mediaPlayer != null) { return mediaPlayer.isPlaying(); }else { return false; } }}
‘’
这里面有一个AudioFile类,是文件路径的类,还有一点需要注意:MediaRecorder的设置需要按照顺序来设置。
AudioFile:
public class AudioFile { public static final String SAVE_AUDIO_DIR_PATH = Environment.getExternalStorageDirectory()+"/record"; public static final String RECEIVE_AUDIO_DIR_PATH = Environment.getExternalStorageDirectory()+"/record0";}
0 0
- Android编程实战——仿微信群聊-4——Media语音
- 《Windows Media编程导向》——目录
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- Android实战——科大讯飞语音听写SDK的使用,实现语音识别功能
- Media foundation——Media source:Media source object module
- Media foundation——Media source:Media Source Events
- Android 语音播放Media Player
- REST实战——调用百度语音的云服务
- Android语音识别——谷歌语音识别与百度语音识别
- Android——百度语音识别
- Android——百度语音唤醒
- Android编程实战——仿微信群聊-5——Android端UI-多种显示的ListView
- Scala编程实战—字符串
- Scala编程实战—数值
- Android中Media Framework浅析(一)——概述
- Android中Media Framework浅析(二)——MediaServer
- Android中Media Framework浅析(二)——MediaServer
- Android中Media Framework浅析(一)——概述 .
- 文件系统---认识ext2文件系统
- HDU-1231-最大连续子序列(DP)
- Windows系统下VS2013+caffe的安装
- JS继承的实现方式
- 拷贝构造函数详解
- Android编程实战——仿微信群聊-4——Media语音
- redis 学习笔记(6)-cluster集群搭建
- servlet 学习1
- 正则表达式
- yii框架里ajax分页和搜索 单删 批删
- 并发与并行的区别
- 内存管理:01存储器层次结构
- 文章标题
- nRF2401A无线传输模块介绍