基于VC的语音传输系统的设计与开发毕业设计毕业论文

上传人:细水****9 文档编号:68873474 上传时间:2022-04-05 格式:DOC 页数:20 大小:145.50KB
返回 下载 相关 举报
基于VC的语音传输系统的设计与开发毕业设计毕业论文_第1页
第1页 / 共20页
基于VC的语音传输系统的设计与开发毕业设计毕业论文_第2页
第2页 / 共20页
基于VC的语音传输系统的设计与开发毕业设计毕业论文_第3页
第3页 / 共20页
点击查看更多>>
资源描述
基于VC的语音传输系统的设计与开发摘 要随着计算机应用技术的快速发展和日益普及,网络也遍及到我们生活的每个角落,为我们的学习和工作带来极大的方便。很多人都使用过传统的文字输入聊天方式,与之不同的另外一种聊天方式就是语音聊天。主要对那些不会使用键盘的老年用户和追求时尚的年轻人,语音聊天是一种非常好的聊天方式,它能增加聊天双方的亲切感和真实感,语音聊天就涉及到语音的传输。本系统主要讨论了Windows系统下网络语音的传输,尤其是对网络编程做了较深入的学习和应用,并以语音聊天为例给出了应用实例。本系统主要利用Windows系统下的API函数和SOCKET函数以及VC开发平台的强大功能来实现。经过半年多的努力,终于完成了语音传输系统的需求分析、模块功能划分、多媒体编程、服务器-客户端模型等。本系统可以实现网络间文字、语音信息的传输。关键词 信息传输;网络编程;语音传输;多媒体The design and development of voice transmission based on VCAbstractThe Internet is more and more popular in our lives because of the development of computer technology. Internet helps us in study and work. Many people use the traditional input method to chat, but there is a new method that we can speak to our friends in real-time. Voice chatting is developed for ones who do not know how to type, or the young people, it can increase the realistic and friendliness. This paper discusses the transmission of voice by network in windows operation system, such as voice chats. The system is programmed with API functions and Socket functions of the windows. After six months of effort, the voice chatting system was completed. This system includes requirements analysis, and functional modules, multimedia programming, server-client model. In network, the text and voice can be transported through this system . Key words: Information transmission; Network programming; Voice transmission; Multimedia目 录 论文总页数:19页1引言12语音传输系统需求分析13开发工具与环境介绍23.1Visual C+概述23.1.1Visual C+简介23.1.2Visual C+的发展过程23.1.3Visual C+的特点33.2Visual C+的集成开发环境33.3Windows程序设计基础43.3.1概述43.3.2消息处理函数43.3.3窗口的建立53.3.4消息循环64Windows网络编程84.1网络和协议84.2Winsock 接口94.3服务器程序和客户程序创建过程115语音传输系统功能实现135.1语音模块实现135.2服务器和客户端功能的实现146系统功能的测试与分析156.1语音聊天程序使用介绍156.2测试与分析16结 论16参考文献17致 谢18声 明191 引言20世纪是计算机的世纪,计算机及相关技术的快速发展令人目不暇接。伴随着计算机技术的发展,网络的发展更加迅猛,令人不禁有“只有想不到,没有做不到”之感。网络已经成为最大的信息传输方式之一。在新的世纪里,我们更要掌握好计算机知识。随着高新技术的不断发展,计算机更新速度越来越快,计算机已经逐渐溶入人们的生活。很难想象没有计算机的现代社会将变成一个什么样子。计算机已经和我们的生活息息相关。而可视化操作简单的Microsoft Windows操作系统就越来越频繁的出现在我们的工作学习中,给我们带来了很多便利。随着计算机的不断发展,网络技术也在不断发展。现在我们通过网络进行学习、讨论、交流、游戏等等,网络正逐渐成为我们身边不可或缺的东西。那么要进行交流,语言、文字是不可缺少的。如何进行网络间的语言文字交流?通过对Visual C+和Windows网络编程技术的学习,本系统研制出一个能够进行网络间语言文字交流的语音传输软件。 Visual C+是一种可视化的、面向对象的Windows开发语言,它具有易用、通用和开发效率高的特点。随着微软公司对他不断的改进以及计算机本身在性能上的迅速提高,使得Visual C+越来越适合于一般的应用程序的开发。自从Visual C+ 6.0推出以来,已经为非常多的开发人员所使用,一直是当前最主流的开发工具之一。而Windows操作系统大家更是熟悉不过了。那么提到Windows编程就不能不提API。API是Application Programming Interface的简写,意思是应用程序编程接口。可以把它想象成一个程序库,提供各式各样与Windows系统服务有关的函数,例如CreateFile是用来创建文件的API函数,C的标准库函数create也提供了创建文件的函数,但是他是靠调用CreateFile函数完成创建文件功能的。事实上,在Windows下运行的程序最终都是通过调用API函数来完成创建工作的,因此,可以把Win32 API看成是最底层的服务。本文所介绍的网络语音传输程序就是一个在Windows环境下以Visual C+为编程语言的应用程序。2 语音传输系统需求分析随着现代计算机技术的不断发展,多媒体已经成为现代计算机不可缺少的功能,而计算机的音频,视频功能是其中最为重要的部分。而随着网络的不断发展,网络已经成为人们最重要的交流方式之一。计算机硬件的更新,特别是海量存储设备和大容量内存在PC机上的实现,对音频媒体进行数字化处理早已经成为可能。现在,企业、机关、学校都建立起了局域网。虽然可以通过文件共享的方式进行通讯,但单使用这种方式,非常不方便。在网上邻居里,只能看到机器名,不清楚对方是谁,也不知道对方机器里有什么资源可以共享,尤其当局域网的机器很多时,这种方式就更加麻烦了。而文字聊天方式比较单一缺乏真实感,所以语音通信就有了必要。但是语音传输需要有很大的网络带宽,对于拨号上网用户,语音传输仍然是奢侈品,不过对于局域网和宽带用户来说,是很不错的选择,本系统就是研究的基于局域网的语音传输,并以语音聊天为例给出了实例。语音聊天方式一般有两种,一种是专门的语音聊天室,采用Web方式,B/S结构,另外一中则是类似于QQ、MSN等聊天工具,采用C/S结构。本设计是采用的后者。TCP/IP网络中两个进程间的相互作用的主机模式是客户机/服务器模式(Client/Server model)。该模式的建立基于以下两点:1、非对等作用;2、通信完全是异步的。客户机/服务器模式在操作过程中采取的是主动请示方式,首先服务器方要先启动,并根据请示提供相应服务。综上所述,做一个语音通信软件是有必要的,也是能够实现的。3 开发工具与环境介绍3.1 Visual C+概述3.1.1 Visual C+简介VC是Microsoft公司的重要残品之一Developer Studio工具集的重要组成部分。他用来在Windows(包括95、98、NT、2000、XP等)环境下开发应用程序,是一种功能强大、行之有效的可视化编程工具。VC以可视化技术为基础,以C+语言为蓝本,以众多的集成工具为骨架,在计算机领域的诸多方面都发挥着重要的作用。VC提供了简洁实用的开发环境,集成的工具集能让用户高效率地开发应用程序。VC提供了MFC类库,一般性的工作可以全部交给VC来完成,用户只要在其基础上做出自己想要实现的功能即可。VC完成目标所花费的时间要少得多。3.1.2 Visual C+的发展过程作为一种C/C+语言的集成开发环境(IDE),产生VC的最早的根源其实要追溯到DOS时代的Borland公司,当初Borland公司开发的Turbo Pascal和Turbo C让程序员们深刻感受到了把编辑器和编译器集成在一起的IDE是多么的方便,微软公司也看到了这一优点,于是相继开发了Quick C和Microsoft C/C+等多个DOS版本的C/C+集成开发工具。随着Windows的不断成熟,Microsoft公司决定放弃DOS下的开发工作,正式推出Windows下的VC 1.0,早期的VC功能并不怎么强大,使用起来也不方便,1.0版和1.5版都是16位编程工具。VC的革命性改变得益于Windows95的推出,从VC2.0开始,微软公司又放弃了16位编程,以后的VC都只用于32位编程开发,为了与MFC类库的版本号保持一致,微软公司跳过了版本3,直接推出了VC4.0,这个版本及修订版4.2的部分界面风格一直保留到VC6.0。从VC4.0到VC6.0,VC的各种功能不断增强,MFC类库的内容也越来越丰富,现在利用VC开发应用程序已经是一种相对轻松的事情了。3.1.3 Visual C+的特点在VC发展的同时,Borland公司也在不断改进他的C/C+开发工具,并相继推出了Borland C+和C+ Builder等产品,其实,现在的C+ Builder也是一个非常优秀的开发工具,但是基于下边的几点原因,我们可以看出VC有着不可比拟的优越性:1 VC的核心MFC类库已经是事实上的行业标准,Borland自己开发的类库也在向MFC看齐。2 VC与Visual Studio中的其他可视化开发工具紧密集成,可用于开发非常专业的应用程序。3 VC的联机帮助已经被集成到MSDN库中去了,后者包含了微软公司大部分产品的技术文档和支持资料,内容相当丰富,是程序员不可多得的参考资料,现在MSDN库随着Visual Studio6.0一起发行,极大地方便了用户。3.2 Visual C+的集成开发环境Visual Studio 6.0企业版一共有6张光盘,如果只安装VC 6.0那么需要第一张光盘和MSDN库。VC 6.0可以安装在所有运行Windows 95/98/NT/2000/XP等的系统上。安装按提示完成后,开始菜单的程序中应生成Microsoft Visual Studio 6.0和Microsoft Developer Network两个程序组。从Visual Studio 6.0的程序组中运行VC6.0,便可启动VC6.0的开发环境Developer Studio。每次运行VC6.0时,首先会弹出一个“Tip of the Day”的对话框,其中介绍有很多关于开发环境的使用方法以及编程调试方面的小技巧,如果不想看他,可以选择在下一次启动时不再显示。如图3-1所示,VC6.0的窗口被分成了几部分,最上边是标题条、菜单和工具栏,中间左边的窗口是工作区窗口,右边为文档窗口,显示正在编辑的文本文件(或资源),下方为输出窗口和状态栏。除了主菜单和工具栏外,VC6.0开发环境还提供了大量的上下文关联菜单,用鼠标右键单击窗口中的很多地方都会弹出一个关联菜单,此菜单包含与被单击项目相关的各种命令,从而可以加快一些常规操作的速度。VC启动之后,窗口中几乎一切都是空白的,所以我打开了一个工程。中文版的VC+ 6.0,其工作界面如下:图3-1 VC主窗口3.3 Windows程序设计基础3.3.1 概述Windows程序具有相对固定的结构,对编写者而言,不需要书写整个过程,大部分过程由系统完成。程序中只要按一定的格式填写系统留给客户的那一小部分。所需要完成的有:窗口类的定义、窗口的建立、消息函数的书写、消息循环。3.3.2 消息处理函数Windows程序是事件驱动的,对于一个窗口,它的大部分例行维护是由系统维护的。每个窗口都有一个消息处理函数。在消息处理函数中,对传入的消息进行处理。系统内还有它自己的缺省消息处理函数。客户写一个消息处理函数,在窗口建立前,将消息处理函数与窗口关联。这样,每当有消息产生时,就会去调用这个消息处理函数。通常情况下,客户都不会处理全部的消息,而是只处理自己感兴趣的消息,其他的,则送回到系统的缺省消息处理函数中去。 LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) switch (message) case . case . return DefWindowProc (hwnd, message, wParam, lParam) ; 3.3.3 窗口的建立客户需要自己建立窗口,建立后会得到系统返回的窗口句柄(HWND),后继的针对窗口的操作都针对句柄进行。1.注册窗口类建立窗口前,需要制定好这个窗口的相关属性,最主要的就是将自己定义的消息处理函数与窗口关联,其他的属性还包括:菜单、图标等等。 这个属性指定步骤是通过指定窗口类来完成的。 对于自己建立的窗口,这个窗口类需要自己制定,也即自己充一个WNDCLASS结构,然后向系统注册。对于一些特殊窗口,如按钮等控件,他们的行为是系统制定好了的,所以不需要自己注册,直接使用对应的“窗口类”名称就行了。2.建立窗口建立窗口时,注册的窗口类名称作为参数传入。这样,当有针对该窗口的消息时,将调用“窗口类”中指定的消息处理函数,在其中得到处理。在应用程序中使用对话框是很方便的,因为对话框可以从模板创建,而模板可以使用可视化资源编译器进行编译,这就大大简化了窗口界面的设计过程。同时为了简化程序设计,Windows在内部也定义了许多窗口类,即常说的字窗口控件,应用程序直接使用这些类名就可以创建子窗口。同子窗口控件类似,对话框的窗口函数也由User32.dll提供,所以在创建对话框之前不需要注册窗口类。在创建对话框时并不需要调用CreateWindowEx函数,而是调用了DialogBoxParam或CreateDialogBox函数。前一个函数用来创建模式对话框,后一个函数用来创建非模式对话框,它们都在内部调用了CreateWindowEx函数,使用的风格、大小和位置等参数取自资源中定义的对话框模板。要创建对话框就要先创建对话框模板。对话框模板定义了对话框的基本属性,这包括该对话框的宽度和高度及其中包含的控件。创建对话框模板最简单的方法是使用VC自带的资源编译器,使用VC+的“Insert/Resource”菜单命令,可以非常方便地向工程中加入对话框资源。3.3.4 消息循环系统会将针对这个程序的消息依次放到程序的“消息队列”中,由程序自己依次取出消息,在分发到对应的窗口中去。因此,建立窗口后,将进入一个循环。在循环中,取出消息、派发消息,循环往复,直到取得的消息是退出消息。循环退出后,程序即结束。 #include stdafx.h#include windows.h/消息处理函数/参数:窗口句柄,消息,消息参数,消息参数LRESULT CALLBACK WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) /处理感兴趣的消息 switch (message) case WM_DESTROY:/当用户关闭窗口,窗口销毁,程序需结束,发退出消息,以退出消息循环PostQuitMessage (0) ;return 0 ; /其他消息交给由系统提供的缺省处理函数 return :DefWindowProc (hwnd, message, wParam, lParam) ; /应用程序主函数/参数:实例句柄、前一个实例的句柄、命令行参数、窗口显示方式int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,PSTR szCmdLine, int iCmdShow) /注册窗口类 static TCHAR szAppName = TEXT (HelloWin) ; /窗口类名称 /定制窗口类结构 WNDCLASS wndclass ; wndclass.style = CS_HREDRAW | CS_VREDRAW ; wndclass.lpfnWndProc = WndProc ; /关联消息处理函数 wndclass.cbClsExtra = 0 ; wndclass.cbWndExtra = 0 ; wndclass.hInstance = hInstance ; /实例句柄 wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ; /图标 wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ; /光标 wndclass.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); /画刷 wndclass.lpszMenuName = NULL ; wndclass.lpszClassName = szAppName; /类名称 /注册 if (!ReGISterClass (&wndclass) MessageBox (NULL, TEXT (RegisterClass Fail!), szAppName, MB_ICONERROR) ; return 0 ; /建立窗口 HWND hwnd ; hwnd = CreateWindow (szAppName, /窗口类名称 TEXT (The Hello Program), /窗口标题 WS_OVERLAPPEDWINDOW, /窗口风格 CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, /实例句柄 NULL); ShowWindow (hwnd, iCmdShow) ; UpdateWindow (hwnd) ; /消息循环 MSG msg ; while (GetMessage (&msg, NULL, 0, 0) /从消息队列中取消息 TranslateMessage (&msg) ; /转换消息 DispatchMessage (&msg) ; /派发消息 return msg.wParam ; 4 Windows网络编程4.1 网络和协议网络是可以交换数据的互相连接的计算机的集合。网络的类型很多,如LAN(局域网)、WAN(广域网)、Internet。为了确保所有的传输平稳地进行,网络建立在协议之上。协议是一组规定,他描述了数据传送的格式。用户发送的信息要经过各层协议的封装,如图41所示:用户User dateUser dateUser dateUser dateTcp headerEthernet headerIp headerTcp headerIp headerTcp header硬件应用层TCP层IP层链路层图4-1 TCP/IP协议栈TCP/IP是面向连接的协议。连接的两个设备之间,每一方都使用他自己的IP地址和端口号。通常,一方称为客户,另外一方称为服务器。客户是发出请求方,服务器响应他们。例如,当打开网站时,浏览器是客户,WebServer是服务器。浏览器发出连接请求,初始化和服务器的连接,请求指定的资源。服务器然后返回响应和请求的数据。服务器通常是等待客户连接,这叫做监听,这一般是在特定的IP地址和端口号进行。客户仅在有需要时才启动,因为客户总是一个连接的发起者,信息的请求者。为了创建连接,客户需要知道服务起正在监听的IP地址和端口号。服务器和客户方都需要使用IP地址和端口号,但是服务器的IP地址和端口号一般都是固定的。在客户方,端口号并不重要,任何端口都可以使用。工作在软件层的几个协议,如HTTP、FTP、POP3、SMTP等,大多数是以服务器/客户机方式工作的。例如,客户产生请求,服务器响应。请求和响应数据的准确格式由这些协议定义。4.2 Winsock 接口Winsock是处理网络的Windows API。许多函数与BSD Unix中使用的Berkeley套接字函数是相同的。通信的双方要建立连接,这个连接的终端就是套接字。客户端和服务器端都有一个套接字,每个套接字与特定的IP地址和端口号关联。几乎所有的Winsock函数都在套接字上进行操作,因为套接字是连接的句柄。连接的两端都要使用一贯套接字,它们与平台无关。套接字是双通的,也就是说在同一个套接字上既能够接收也能够发送数据。套接字主要有两种类型,一种是流套接字(SOCK_STREAM),另外一种是数据报套接字(SOCK_DGRAM)。流套接字是为需要可靠连接的应用程序设计的。这些程序经常使用连续的数据流。用于这种类型套接字的协议是TCP。流套接字最常用,一些众所周知的协议如HTTP、TCP、SMTP、POP3等都使用它。数据报套接字使用UDP作为下层协议,是无连接的,有一个最大缓冲区大小。它是为那些需要发送小数据包,并且对可靠性要求不高的应用程序设计的。与套接字不同,数据包套接字并不保证数据会到达终端,也不保证他是以正确的顺序到来的。数据报套接字传输效率相当高,他经常用于音频或视频应用程序。对这些程序来说,速度比可靠性更加重要。另外,也存在一些不常用的套接字类型,如原始套接字(raw socket)等。因为Winsock要兼容几个协议,所以必须使用通用的寻址方式。TCP/IP使用IP地址和端口号来指定一个地址,但是其他协议也许采用不同的形式。如果Winsock强迫使用特定的寻址方式,添加其他协议就不大可能。Winsock的第一个版本使用sockaddr结构来解决此问题。Struct sockaddr u_short sa_family; Char sa_data14;如果仅仅使用互联网地址家族(TCP/IP),Winsock已经定义了sockaddr结构的TCP/IP版本sockaddr_in结构。它们本质上是相同的结构,但是第2个更容易操作。Struct sockaddr_in Short sin_family; / 地址家族 U_short sin_port; / 端口号 Struct in_addr sin_addr; /IP地址 Char sin_zero8; /空字节,要设为0 ;Sin_addr是IP地址(32位),他被定义为一个联合来处理整个32位的值,两个16位部分或者每个字节单独分开。描述32位IP地址的in_addr结构定义如下。Struct in_addr Union Structu_char s_b1,s_b2,s_b3.s_b4;S_un_b; Structu_short s_w1.s_w2;s_un_w; U_long s_addr;s_un;使用winsock编程的一般步骤是比较固定的,如下:1 winsock库的装入、初始化和释放2套接字的创建和关闭3绑定套接字到指定的IP地址和端口号4设置套接字进入监听状态5接受连接请求6收发数据4.3 服务器程序和客户程序创建过程在现在的软件开发中,软件开发环境越来越多地涉及了网络环境以及网络下的C/S(Client/Server)模式。C/S模式,即客户机/服务器模式兴起于20世纪90年代初,到90年代中期达到鼎盛时期。C/S模式是第一个应用于网络的模式,它在拥有友好的用户界面的基础上,利用分布技术成功地提高了执行效率和系统容量,从而得到了广泛的应用。C/S模式的基本思想是把原先集中在一起的应用划分为功能不同的两个部分,一个成为服务器软件,用来响应和提供固定的服务;另一个被称为客户机软件,用来向服务器端提请和要求某种服务。运行服务器软件的计算机被简称为服务器,而运行客户机软件的计算机被成为客户机,从这个意义上来说,客户机和服务器都是软件意义上的概念,同时也是相对的概念。例如,一台计算机运行了某个网络应用的服务器软件,它就成为这个应用的服务器;如果同时它还在运行另外一个软件的客户机程序,则它同时又是另外一个应用的客户机。不过,因为服务器通常被设计为可以响应多台客户机的请求,所以一般都工作在性能较强、配置较高的计算机上。服务器方创建监听套接字,并为他关联一个本地地址(指定IP地址和端口号)。然后进入监听状态准备接收客户的连接请求。为了接受客户的连接请求,服务器必须调用accept函数。客户方创建套接字后即可调用connect函数去试图连接服务器监听套接字。当服务起方接受函数返回后。连接函数也返回。此时客户方使用socket函数创建套接字,服务器使用accept函数创建的套接字,双方就可以进行相互间的通信了。其过程图如下: 服务器方客户方Socket(),建立流式套接字,返回套接字句柄sBind(),关联一个本地地址到套接字s。Listen(),设置backlog值,进入监听状态。Accepet(),等待接受客户连接请求。建立连接,accept函数返回,得到新的套接字,如CS。Recv()/send(),在套接字cs上收发数据,直到完成交换。Closesocket(),关闭套接字cs。Closesocket(),关闭监听套接字s,服务结束。Connect(),将套接字s与服务器连接。Recv(-)/send(),在套接字上收发数据,直到数据交换完。Closesocket(),关闭套接字s,结束TCP对话。Socket(),建立流式套接字s。图4-2 服务器程序和客户程序的创建过程5 语音传输系统功能实现 本系统以语音聊天为例给出了应用实例。5.1 语音模块实现随着计算机技术的发展,特别是海量存储设备和大容量内存在PC机上的实现,对音频媒体进行数字化处理便成为可能。数字化处理的核心是对音频信息的采样,通过对采集到的样本进行加工,达成各种效果,这是对音频媒体数字化处理的基本含义。基本的音频数字化处理包括以下几种。1、不同采样率、频率、通道数之间的变换和转换。其中变换只是将其视为另外一种格式,而转换通过重新采样来进行,其中还可以根据需要采用插值算法以补偿失真。2、针对音频数据本身进行的各种变换,如淡入、淡出、音量调节等。3、通过数字滤波算法进行的变换,如高通、低通滤波器。但是最基本、最常用的还是声音的录制和播放。作为一个语音传输软件,声音的录制、保存、传输和播放都是必不可少的,也是最重要的一环。本软件需要语音输入、输出功能。这些技术的实现借助了Windows系统提供的底层音频API。MIDI的意思是乐器数字接口(Musical Instrument Digital Interface),它在微软公司开发Windows系统以前就有的一个用于电子键盘的标准。MIDI定义了一个传输和存储音乐信息的协议。它在多媒体音频中占有重要的位置,是播放和录制音乐的国际标准,它确定了连接音乐设备的电缆线、硬件和通信协议。下边将介绍程序的具体实现。对于录入和播放的声音存储时必须以特定的格式才可以,本软件的格式定义如下:m_soundFormat.wFormatTag=WAVE_FORMAT_PCM;m_soundFormat.nChannels=1;m_soundFormat.nSamplesPerSec=8000;m_soundFormat.nAvgBytesPerSec=16000;m_soundFormat.nBlockAlign=2;m_soundFormat.cbSize=0;m_soundFormat.wBitsPerSample=16;只定义了声音的格式是不够的,要实现声音的存储还得对数据块进行定义,数据块的定义采用如下结构描述:m_pWaveHdrIn0.lpData=m_cBufferIn;m_pWaveHdrIn0.dwBufferLength=MAX_BUFFER_SIZE;m_pWaveHdrIn0.dwBytesRecorded=0;m_pWaveHdrIn0.dwFlags=0;为了能够进行录制和播放,还需要利用低级音频函数wave系列函数。对于播放过程,需要利用waveOutPrepareHeader函数准备缓冲数据头信息,然后调用函数waveOutWrite将音频数据缓冲区中的数据写到播放设备中去进行播放。对于录制过程,需要先调用waveInPrepareHeader进行接收数据缓冲区的准备工作,然后调用waveInAddBuffer函数添加录制数据缓冲区,最后调用函数waveInStart进行录制。下边将列出这些函数在源程序中的应用:result=waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdrOut0,sizeof(WAVEHDR); if (result!= MMSYSERR_NOERROR) AfxMessageBox(_T(Cannot OutPrepareHeader !); return; ;If以后为信息出错警告,以下函数省略。result=waveOutWrite(m_hWaveOut,&m_pWaveHdrOut0,sizeof(WAVEHDR); result=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdrIn0,sizeof(WAVEHDR); result=waveInAddBuffer(m_hWaveIn,&m_pWaveHdrIn0,sizeof(WAVEHDR); void CSound:Record()waveInStart(m_hWaveIn);/开始录音5.2 服务器和客户端功能的实现服务器端与客户端是程序与外界联系的窗口。其主要功能实现如下: if(temp.m_tag=1&m_dlg-m_willchating=FALSE)/如果有声音过来并且本机的声音设备已经准备好了则首先在本机发出声音 if (m_aSessionOut != NULL) msg-Serialize(*m_aSessionOut); m_aSessionOut-Flush(); return TRUE; else /对方关闭了连接 int CClientSocket:GetLocalHostName(CString &sHostName)/获得本地计算机名称 int CClientSocket:GetIpAddress(const CString &sHostName, CString &sIpAddress)/获得本地IP以上为部分功能实现。其他实现详见源文件。 6 系统功能的测试与分析6.1 语音聊天程序使用介绍语音聊天程序的使用方法如下:(1) 双击应用程序图标,将会弹出一窗口。(2) 在窗口相应位置填写服务器IP地址和端口号,默认IP地址为本机IP地址,默认端口号为4000。(3) 如果是要建立服务器,点击建立服务器按钮,此时如果建立成功文本框会显示“Server Has Been Set OK!”。如果失败则会弹出警告窗口,请仔细检查IP和端口号是否填写正确。服务端运行界面见图5-1。(4) 如果要建立客户端,那么在填写好服务器IP和端口号后点击连接服务器按钮。客户端运行界面见5-2。(5) 此时,大家可以进行文本聊天。如果想进行语音聊天那么请点击语音聊天按钮,当然你要有相应的硬件设备音箱(耳机)和麦克风。那么现在你就可以进行语音聊天了。(6) 如果想停止语音聊天的话,那么请点击停止语音聊天按钮,此按钮和语音聊天按钮是同一个。(7) 如果想关闭本系统,那么请点击THE END按钮或者直接关闭程序窗口。(8)服务器如果关闭那么客户端将自动断开。下边是语音聊天系统程序运行窗口:图5-1 服务器建立界面图5-2 客户端运行界面“IT开拓者3网络工作室”成立于2010年,是一个专业的计算机软件开发团队。“资源共享,信息互通” 需要更多相关设计资料和源代码加QQ:
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 其他分类 > 其它学术


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!