声源采集模块放到缓冲区里的语音数据经过这个模块以后到达音频再生模块。在这里采集到的声源数据并不能保证完全被保存并进行传送,因为可能会出现声源数据量如果多于录音内存量的话就不能进行保存,而要等待经过音频再生模块并释放出来的内存,然后再进行保存。 http://www.paper51.com
内容来自www.paper51.com N 内容来自www.paper51.com
内容来自论文无忧网 www.paper51.com
内容来自论文无忧网 www.paper51.com
等待空闲内存 paper51.com Y http://www.paper51.com
内容来自论文无忧网 www.paper51.com 进行传送 http://www.paper51.com
copyright paper51.com 内容来自论文无忧网 www.paper51.com 释放内存 http://www.paper51.com 传送完毕 copyright paper51.com
N copyright paper51.com 内容来自www.paper51.com Y 内容来自论文无忧网 www.paper51.com
内容来自论文无忧网 www.paper51.com [图6] 声音数据传输模块流程图 内容来自论文无忧网 www.paper51.com (四) 音频再生模块 内容来自www.paper51.com 经过处理过的语音数据通过音频处理模块传送到这个模块,当接收到语音数据以后它将经过录音的语音数据进行放音,然后把内存释放出来以备保存其他缓冲区里保存的声源信息。 paper51.com
为什么要释放内存呢?那是因为声音数据具有很强的前后相关性,数据量大、实时性强,又由于声音是连续的,通常把其称之为连续型时基媒体类型。当缓冲区接收到声源以后要是内存不够的话就不能及时把全部语音数据保存并传送,所以经过这个模块以后就得把录音内存释放掉,好让上一个模块及时得到完成。 内容来自论文无忧网 www.paper51.com copyright paper51.com
内容来自论文无忧网 www.paper51.com
[图7] 音频再生模块流程图 内容来自论文无忧网 www.paper51.com 经过这个模块才能算是真正完成了语音聊天了,如果想结束聊天只要断开与对方的连接即可。 内容来自论文无忧网 www.paper51.com
paper51.com 第五章 关键代码分析 内容来自论文无忧网 www.paper51.com
经过总体分析和详细分析,整个设计有了大概的框图之后就可以进行编程了。编程的质量直接影响到运行结果,所以要做到远程序代码的逻辑简明清晰、易读易懂是程序好坏的一个重要标准,其中适当的注解是非常重要的。 copyright paper51.com 本次设计的特点是一个用户端既是服务器端也是客户端,所以针对一个用户端作为服务器端或者作为客户端的时候的代码进行分析。 http://www.paper51.com 一、 服务器端对客户端Socket的处理代码 http://www.paper51.com
voidCChatDlg::ProcessPendingAccept() 内容来自论文无忧网 www.paper51.com { copyright paper51.com CclientSocket*pSocket=new CclientSocket(); 内容来自论文无忧网 www.paper51.com If(m_pListenSocket.Accept(*pSocket)) copyright paper51.com { copyright paper51.com
http://www.paper51.com |