【android开发】实现语音数据实时采集/播放
来源:互联网 发布:世界征服者3 mac 破解 编辑:程序博客网 时间:2024/06/10 05:42
今天无意中看到一篇关于android实现语音数据实时采集/播放的文章,感觉写得非常棒,挺全面的,所以特地转载了,还有其实还可以根据这篇博客内容考虑下视频数据实时采集、播放的实现。博客原文地址http://blog.csdn.net/lantingshuxu/article/details/53520316
最近做的项目是和语音实时采集并发送,对方实时接收并播放相关,下面记录下实现的核心代码。
很多Android开发者应该知道android有个MediaRecorder对象和MediaPlayer对象,用于录制和播放音频。这个弊端在于他们不能实时采集并发送出去,所以,我们只能使用AudioRecord和AudioTrack来实现。
记得申明权限:
- 1
- 2
- 1
- 2
一、AudioRecord实现核心代码介绍如下:
1、先申明相关录制配置参数
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
2、在开始录制前,我们需要初始化AudioRecord类。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
3、准备开始录制,使用循环不断读取数据。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
二、AudioTrack代码实现介绍如下:
1、声明播放相关配置。
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
2、初始化AudioTrack对象(初始化一次,该对象可重复使用)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 1
- 2
- 3
- 4
- 5
- 6
- 7
3、使用AudioTrack播放语音数据。
- 1
- 2
- 1
- 2
问题一:
由于目前的项目是实时采集,实时发送,所以需要考虑到包的大小,经测试,我们使用160个byte作为一个包传递可以做到比较良好的播放效果(也就是将一份buffer拆分成四个发送)。处理代码如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
问题二:
有时候传输的过来播放声音会一卡一卡的,为了解决这样的问题,暂时使用了语音双缓冲机制来解决,问题优化很明显。代码和示意图如下:
1 0
- 【android开发】实现语音数据实时采集/播放
- 【android开发】实现语音数据实时采集/播放
- 使用多线程实现数据实时采集
- 语音信号采集和播放
- Android 实时视频采集/编码/传输/解码/播放 方案调研
- andrioid实时数据采集
- Flume实时采集数据
- android 之录音实现-播放语音
- android 语音即时通讯之录音、播放实现
- Android音频开发之AudioTrack实时播放
- 在VB下设计开发实时的数据采集曲线
- 在VB下设计开发实时的数据采集曲线
- Android实时语音聊天
- Android 实时视频采集
- android 实时视频采集
- 用S3C2410实现铁路数据实时采集系统
- fpga+dp83848实现百兆网络高速数据实时采集
- 多路视频数据实时采集系统设计与实现
- mybatis 动态sql之Map参数
- Oracle数据库的备份与恢复
- 块级作用域
- Java 二进制与16进制相互转换
- mysql下的数据表整表复制备份
- 【android开发】实现语音数据实时采集/播放
- Java Servlet实践
- BZOJ1143: [CTSC2008]祭祀river
- div居中以及div中的元素居中
- 人工智能新解
- 为什么stc15的单片机,运行了几秒后就蹦了
- ubuntu安装pyton-pip问题解决
- easyui datagrid 部分参数说明
- 调试错误的解决:error LNK2005: "void * __cdecl operator new(unsigned int)" (??2@YAPAXI@Z) 已经在 LIBCMT.lib(new