当前位置: 代码迷 >> Android >> Android ilbc 话音对话示范(三)程序流程
  详细解决方案

Android ilbc 话音对话示范(三)程序流程

热度:260   发布时间:2016-05-01 17:39:24.0
Android ilbc 语音对话示范(三)程序流程

上一篇文章中详细讲述了 ilbc 在Android平台的移植和编译,现转到Java层,实现音频的采集和处理操作,本示范中的程序流程图如下:

  顺便提一下:因为是在Ubuntu下写的博客,所以没有一个现成的工具来绘制流程图,后来网上找到一个在线绘图网站:

  http://creately.com/ 感觉非常不错,绘制功能强大,推荐给大家,需要注册才能使用。  

 

   图解:

 1. 发送端有三个主要的类:AudioRecorder(负责音频采集),AudioEncoder(负责音频编码),AudioSender(负责 将编码后的数

发送出去); 这三个类中各有一个线程,录制开始后,这三个线程一起运行,分别执行各自的任务, AudioRecorder采集音频后,添加到

AudioEncoder 的音频数据的List中,而AudioEncoder 的编码线程不断从List头部取出数据,调用 ilbc 的底层\函数进行编码,编码

后的数据则又添加到下一级的AudioSender的 List中,AudioSender又不断从头部取出数据,然后发送出去;

2. 使用Android 系统自带的 AudioRecord 这个类来实现音频数据的采集,注意要在AndroidManifest.xml文件中加上权限

android.permission.RECORD_AUDIO ,使用 AudioRecord 时,一定要配置好一些音频参数,比如采样频率, 采样格式等,具体将

续代码中详细写出;采集方法是 AudioRecord 中的  read(samples, 0, bufferSize) ;

 3. AudioEncoder 对数据编码一次后,交付给AudioSender 让其发送到服务器,发送方采用 UDP 协议,采集一次数据 长度为960B,

码后长为100B ,所以一个 UDP 包就非常小,既节省带宽,又减少丢包率;

 4. 接收端有三个主要的类:AudioReciever(负责接收UDP 包),AudioDecoder(负责解码音频),AudioPlayer(负责音频播放),

致流 在上图中已经详细给出,这里不做说明了,只不过就是 发送方流程的逆序。播放音频使用的是Android中的AudioTrack 这个类,

使用write(byte[] data , int sampleOffset ,int sampleLength)  方法能够直接播放音频数据流

 5. 发送方有三个线程,接受方也有三个线程,一一对应,下一篇正式开始贴代码 ;



  相关解决方案