版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、题 目基于C#WinForm的语音通信系统设计学生姓名学 号系 别专 业班 级开题时间答辩时间指导教师职 称基于C#WinForm的语音通信系统设计 摘要 C#是一种可视化的程序设计语言。Windows窗体和控件是开发C#应用程序的基础,窗体和控件扮演者重要的角色。此次设计的主要任务就是通过在C# WinForm在多媒体数据通信中,能够对多媒体数据进行压缩、实时流传等操作。本文详细介绍了此次毕业设计的开发过程。Windows应用程序的设计基础,以及通过UDP来作为可行的网络传输层协议中,UDP协议的主要作用。还有对采集到得声音进行压缩编码,再通过采用Socket UDP的方式来实现数据传输,之
2、后进行数据解码进行实时播6+放,最后利用窗体应用程序实现便于用户操作的UI界面。关键词:C#应用程序;UDP协议;声音采集;数据传输The design of voice communication system based on C#WinForm Abstract C# is a visual programming language. Windows forms and controls is the foundation for the development of C# application, the form and control plays an important role
3、. The main task of this design is the C# WinForm in the multimedia data communications, to compress the multimedia data, real-time circulating operation. This paper introduces the development process of the graduation design. Design of Windows application program, and through UDP as network transmis
4、sion feasible protocol, main function of the UDP protocol. The collected voice compression coding, and then through the use of Socket UDP to realize the data transmission, data decoding real-time broadcast 6+, finally achieve a user-friendly UI interface using the application form. Keywords: C# appl
5、ication ;UDP protocol ; Sound acquisition ; The data transfer 目 录第1章 前言11.1 课题内容及意义11.1.1 选题背景11.1.2研究现状及发展趋势11.2论文组织结构2第2章 C#WinForm的语音通信系统设计应用原理32.1 C#WinForm应用程序设计基础32.1.1 计算机窗体32.1.2计算机控件和计算机事件42.1.3 Windows窗体和基本属性52.1.4 创建窗体72.1.5设置启动窗体属性和窗体的显示与隐藏72.1.6窗体的事件82.1.7窗体控件描述和常用控件82.1.8常用属性102.2 UDP协
6、议102.3 蓝牙耳机的技术发展与应用11第3章 系统设计方案123.1设计流程123.2 步骤分析123.2.1初始化123.2.2语音采集133.2.3语音压缩133.2.4数据传输133.2.5数据接收、解压143.2.6播放143.3 本章小结14第4章 系统测试结果154.1 硬件部分测试154.2 软件部分测试154.3 综合测试17第5章 总结和展望195.1 课题工作和总结195.2 系统功能的拓展19致 谢20参考文献21附 录23第1章 前言1.1 课题内容及意义1.1.1 选题背景随着信息化日益飞速发展,对于数字多媒体的应用越来越广泛,宽带网概念逐渐走入更广阔的空间,数字
7、多媒体深入人心。许多应用课题都围绕着两者展开,其中可视电话、电话会议系统和视频会议系统发展迅速,这些都要涉及到多媒体数据通信。在多媒体数据通信中,要求有良好的实时性,能够对多媒体数据进行压缩、实时流传输等操作而音频的采集和实时性播放是视频会议系统中最键的部分,所以本课题就是基于这一目标而设计的。本设计是基于C#WinForm这一软件下的语音通信系统设计。C#语言是Microsoft公司2000年6月发布的面向对象程序设计语言,随着十几年的快速发展,在计算机专业课程中逐渐取代了传统的C+语言。对于开发应用程序的人员来说,C#语言吸收了Java和C+等语言的经验和教训,是最全面的面向对象程序设计语
8、言。该语言以其特有的面向对象、组件技术、类型安全、自动内存管理等优点,很是受到应用程序开发人员的喜爱。“C#程序设计”作为学院多媒体专业相对核心的基础职业课程,是学生接触最早的编程语言。但由于高职学生的整体素质下降,加上C#的面向对象特征和程序设计的抽象性,以知识为目标、以学科系统知识和理论原理为导向、以教师为主体、以应试为基础的教学模式越来越不能适应高职院校的教学要求,如何进行教学改革,激发学生的学习兴趣,提高学生的学习主动性,使学生在学习中建立真正的自信心,进而掌握C#程序设计语言并能熟练综合运用,是现代课程改革中必须面对并解决的关键问题。 高等职业教育是“以就业为导向,以应用为宗旨,以能
9、力为本位”的一种高等教育类型,目标是培养实践能力强、具有良好职业道德,面向生产、建设、管理和服务第一线岗位的高素质技能型人才。高职教育的社会定位是培养技术应用型(职业技术)人才,毕业生应主要从事生产、工艺、建设等工作,最需要的是知识应用的能力和“做事”的能力,还需要具备各项专业技术能力。根据社会定位和高职教育的培养目标,本文主要介绍“C#程序设计”课程内容,探索在职业基础课程如何进行基于工作过程的课程设计和实施。 1.1.2研究现状及发展趋势基于工作过程的课程设计与开发,强调为学生的职业生涯发展培养其综合职业能力。课程建设的出发点、落脚点及实施都是工作过程。所谓工作过程是在企业里为完成一件工作
10、任务并获得工作成果而进行的一个完整的工作程序。因此,在课程的知识体系框架内,通过构建合适的学习情境,以职业活动的工作过程为依据,改造课程的内容和顺序。通过项目的实现,使学生直接获得经验经验,实现由知识的认识,到知识的重组,再到知识的迁移,最终实现知识的应用。目前,学院多媒体技术专业已经有了一些基于工作过程的课程改革成功案例,但大都是综合应用类的课程,对于“C#程序设计”这种基础语言类课程来说,基于工作过程的课程设计与开发研究尚处起始阶段。 在“C#程序设计”教学中,项目化教学虽然已成为目前主要采用的课程模式,但在实践层面上还存在诸多问题。一是项目内容和来源的简单化及随意性。大学课程中的项目应尽
11、可能取材于公司,但由于公司实际项目比较复杂,不符合课程教学要求,很难全面覆盖课程的全部知识点,实际操作起来比较困难。由于上述因素,在教学中采用的所谓项目基本还是原来的知识点,或者是学科体系中一些验证性实验简单变换一下拿来用于项目化教学,更有甚者,一些项目化教材的目录就是老旧的章节目录。通过这种方式开发教材和项目化课程旧失去了“高职教育中的项目课程应该是一种基于工作任务的项目课程”的根本意义。二是项目间缺乏有效提高学生能力的关联度。项目的关联不仅体现着知识的分配和覆盖,还反映了能力的迁移和提高。目前教学过程中使用的项目大部分是独立的,没有相关性和递进性。学生可以完成工作过程中的孤立项目,却不能独
12、立完成整个工作。深究其因,在于训练项目间没有关联,造成了知识遗漏和却是,不能将工作领域所需要的全部知识覆盖,导致学生在解决实际问题时缺少完整的知识体系支撑。1.2论文组织结构本论文共分6章 ,论文内容按下列章节组织: 第1章是前言。本章主要给出毕业设计课题的背景,内容、意义和论文的组织结构。 第2章是介绍通过C#WinForm来设计语音通信系统的原理。其中包括C#WinForm的应用程序设计基础、UDP的主要作用和蓝牙的技术发展和耳机应用。第3章是设计流程。先大概设计每一步内容,再画出流程图,之后分析每一步的操作,最后确定设计流程。第4章是通过蓝牙耳机测试,本章介绍了通过蓝牙耳机将压缩的声音数
13、据解压后播放。第5章是总结与展望。本章对论文所作的工作进行了总结,并对系统的功能提出拓展。25第2章 C#WinForm的语音通信系统设计应用原理2.1 C#WinForm应用程序设计基础2.1.1 计算机窗体Windows窗体就是创立Windows应用程序的框架。在VS.NET中创建Windows应用程序的第一步就是建立这个框架。操作步骤如下:(1)运行VS.NET,在【起始页】上单击【新建项目】按钮,打开“新建项目”对话框,如图2.1所示。在“项目类型”列表框中指定项目的类型为“Visual C#”,在“模板”列表框中选择“Windows应用程序”模板,在“名称”文本框中输入Calcula
14、tor,在“位置”下拉列表中选定保存项目的位置。图2.1 新建项目框图(2)单击“确定”按钮后就进入VS.NET的主界面,如图2.2所示。图2.2 程序设计界面图会从图2-2可以看出,当选择“Windows应用程序”作为应用程序的模板后,系统自动为用户生成一个空白窗体,一般名为Form1。该窗体就是应用程序运行时显示给用户的操作界面,下一步就是向窗体中添加各种控件。2.1.2计算机控件和计算机事件控件表示用户和程序之间的图形化连接。控件可以提供或处理数据、接受用户输入、对事件做出响应或执行连接用户和应用程序的其他功能。因为控件本质上是具有图形接口的组件,所以它能通过组件所提供的功能并与用户交互
15、。窗体中的控件有很多,“工具箱”中的“Windows窗体”里包含了所有Windows的标准控件,用户还可以根据需要自己定义控件。通过在“属性”窗口中改变控件的属性可以改变的外观和特性。在C#中,基于Windows应用程序设计方法是事件驱动的。事件驱动不是由程序的顺序来控制的,而是由事件的发生来控制的。事件驱动程序设计是围绕着消息的产生与处理而展开的,消息就是关于发生的事件的信息。Windows程序员的工作就是对所开发的应用程序所要发出或者接收的消息进行排序和管理。事件驱动程序方法提供了许多便利,对于那些需要大范围用户干预的应用程序来说,更是很有用处。在“窗体设计器”中看到的是窗体及其中的控件,
16、而要为控件添加事件处理程序就必须先切换到代码编辑器状态。切换到代码编辑器有以下几种方法:(1)双击窗体或者某控件。(2)在解决方案资源管理器中右键单击Form1.cs,从快捷菜单中选择“查看代码”命令。如果选择“视图设计器”则可以回到“窗体设计器”中。(3)当第一次切换到代码编辑器之后,在窗体标题“Form1.cs设计”的左边会自动出现一个新的标题:Form1.cs,单击该标题就可以切换到代码编辑器。反之,如果单击“Form1.cs设计”则会切换到“窗体设计器”。2.1.3 Windows窗体和基本属性窗体就好像一个容器,其他界面元素都可以放置在窗体中。C#中以类Form来封装窗体,一般来说,
17、用户设计的窗体都是类Form的派生类,用户窗体中添加其他界面元素的操作实际上就是向派生类中添加私有成员。当新建一个Windows应用程序项目时,C#就会自动创建一个默认名为Form1的Windows窗体。Windows窗体由以下4部分组成:标题栏、控制按钮、边界、窗口区。Windows窗体的属性可以决定窗体的外观和行为,其中常用的属性有:名称(Name)属性、标题(Text)属性、控制菜单属性和影响窗体外观的属性。1、窗体的名称属性(Name)Name用于设置窗体的名称,该属性值作为窗体的标志,用于在程序中引用窗体。在初始新建一个Windows应用程序项目时,自动创建一个窗体,该窗体的名称被自
18、动命名为Form1;添加第2个窗体时,其名称被自动命名为Form2,依次类推。通常而言,在设计Windows窗体时,可给其Name属性设置一个有实际含义的名字。2、窗体的标题属性(Text)Text属性用于设置窗体标题栏显示的内容,它的值是一个字符串。通常,标题栏显示的内容应能概括地说明窗体的内容或作用。3、 窗体的控制菜单属性在C#应用程序中的Windows窗体,一般都显示控制菜单,以方便用户的操作。(1)ControlBox属性:该属性用来设置窗体上是否有控制菜单。其默认值True,窗体上显示控制菜单。若将该属性设置为False,则窗体上不显示控制菜单。(2)MaximizeBox属性:用
19、于设置窗体上的最大化按钮。其默认值True,窗体上显示最大化按钮。若将该属性设置为False,则窗体上不显示最大化按钮。(3)MinimizeBox属性:用于设置窗体上的最小化按钮。其默认值True,窗体上显示最小化按钮。若将该属性设置为False,则窗体上不显示最小化按钮。4. 设置窗体外观的属性(1) FormBorderStyle属性:用于控制窗体边界的类型。它有7个可选值,可选值说明如表2.3所示。表2.1 FormBorderStyle属性的可选值可选项说明None窗体无边框,可以改变大小Fixed3D使用3D边框效果。不允许改变窗体大小,可以包含控件菜单、最大化按钮和最小化按钮。F
20、ixedDialog用于对话框。不允许改变窗体大小,可以包含控件菜单、最大化按钮和最小化按钮。FixedSingle窗体为单线边框。不允许改变窗体大小,可以包含控件菜单、最大化按钮和最小化按钮Sizable该值为属性的默认值,窗体为双线边框。可以重新设置窗体的大小,可以包含控件菜单、最大化按钮和最小化按钮。FixedToolWindow用于工具窗口。不可重新设置窗体大小,只带有标题栏和关闭按钮。SizableToolWindow用于工具窗口。可以重新设置窗体大小,只带有标题栏和关闭按钮(2) Size属性:用来设置窗体的大小。(3) Location属性:设置窗体在屏幕上的位置,即设置窗体左上
21、角的坐标值。(4) BackColor属性:用于设置窗体的背景颜色,可以从弹出的调色板中选择。(5) BackgroundImage属性:用于设置窗体的背景图像。(6) Opacity属性:该属性用来设置窗体的透明度。5. 设置窗体可见性的属性窗体的可见性由Visible属性来控制。2.1.4 创建窗体通常,在开发项目时,一个窗体往往不能满足,通常需要用到多个窗体。C#提供了多窗体处理能力,在一个项目中可创建多个窗体,添加新窗体的方式如下:(1)选择项目菜单下的“添加Windows窗体”命令,打开“添加新项”对话框,如图2.3所示。图2.3 添加新项“对话框”图(2)在“添加新项”对话框的模板
22、框内,选择“Windows窗体”模板,然后,单击“打开”按钮,就添加一个新的Windows窗体。完成添加窗体后,在解决方案资源管理器窗口中双击对应的窗体,则在Windows窗体设计器中,可显示该窗体。2.1.5设置启动窗体属性和窗体的显示与隐藏当在应用程序中添加了多个窗体后,默认情况下,应用程序中的第一个窗体被自动指定为启动窗体。在应用程序开始运行时,此窗体就会首先显示出来。如果想实现在应用程序启动时,显示别的窗体,那么就要设置启动窗体。1、窗体的显示如果要在一个窗体中通过按钮打开另一个窗体,就必须通过调用Show()方法显示窗体。语法如下:public void Show();2.、窗体的隐
23、藏通过调用Hide()方法隐藏窗体。语法如下:public void Hide();2.1.6窗体的事件Windows是事件驱动的操作系统,对Form类的任何交互都是基于事件来实现的。Form类提供了大量的事件用于响应对窗体执行的各种操作。窗体设计人员往住关心窗体的加载和关闭,通常在加载时进行界面和数据的初始化。在关闭前进行资源的释放等清理操作,也可以取消关闭操作。下面详细介绍窗体的Click、Load和FormClosing事件。1. Click(单击)事件当单击窗体时,将会触发窗体的Click事件。语法如下:public event EventHandler Click2.Load(加载)
24、事件当第一次直接或间接调用Form.Show方法来显示窗体时,窗体就会进行且只进行一次加载,并且在必需的加载操作完成后会引发Load事件。通常,在Load事件响应函数中执行一些初始化操作。语法如下:public event EventHandler Load3. FormClosing(关闭)事件Form类的FormClosing事件是在窗体关闭时引发的事件,直接或间接调用Form.Close()方法都会引发事件。在FormClosing事件中,通常进行关闭前的确认和资源释放操作。语法如下:public event FormClosingEventHandler FormClosing2.1.
25、7窗体控件描述和常用控件控件是包含在窗体上的对象,是构成用户界面的基本元素,也 是C#可视化编程的重要工具。使用控件可使程序的设计简化避免大量重复性工作,简化设计过程,有效地提高设计效率。对于一个程序开发人员而言,必须掌握每类控件的功能、用途,并掌握其常用的属性、事件和方法。在VS2005中,工具箱中包含了建立应用程序的各种控件。工具箱分为Windows窗体、公共控件、容器、菜单和工具栏、数据、组件、打印、对话框等部分,常用的Windows窗体控件放在“Windows窗体”选项卡下。工具箱中有数十个常用的Windows窗体控件,它们以图标的方式显示在工具箱中,其名称显示于图标的右侧。在介绍具体
26、控件之前,首先在此探讨一下各个控件共有的属性、事件和方法。在C#中,所有的窗体控件,比如标签控件、文本框控件、按钮控件等全部都是继承于:System.Windows.Forms.Control。作为各种窗体控件的基类,Control类实现了所有窗体交互控件的基本功能。Control类的属性、方法和事件是所有窗体控件所公有的,而且其中很多是在编程中经常会遇到的。(1)Control类的属性Control类的属性描述了一个窗体控件的所有公共属性,可以在属性(Properties)窗口中查看或修改窗体控件的属性。常用的属性如下:Name属性每一个控件都有一个Name(名字)属性,在应用程序中,可通过
27、此属性来引用这个控件。C#会给每个新添加的控件指定一个默认名。在应用程序设计中,可根据需要将控件的默认名字改成更有实际代表意义的名字。Text属性在C#中,每一个控件对象都有Text属性。Text属性在很多控件中都有重要的意义和作用。Anchor属性Anchor的意思是“锚”,那么Anchor属性是用来确定此控件与其容器控件的固定关系的。Dock属性Dock属性规定了子控件与父控件的边缘依赖关系。Dock的值有6种,分别是Top、Bottom、Left、Right、Fill,最后还有默认值None。一旦Dock值被设定,子控件就会发生变化与父控件选定的边缘相融在一起。(2)Control类的方
28、法可以调用Control类的方法来获得控件的一些信息,或者设置控件的属性值及行为状态。(3)Control类的事件 在C#中,当用户进行某一项操作时,会引发某个事件的发生,此时就会调用事件处理程序代码,实现对程序的控制。 事件驱动实现是基于窗体的消息传递和消息循环机制的。在C#中,所有的机制都被封装在控件之中,极大方便了编写事件的驱动程序。如果希望能够更加深入地操作,或定义自己的事件,就需要联合使用委托(Delegate)和事件(Event),可以灵活地添加、修改事件的响应,并自定义事件的处理方法。窗体是由一个个控件构成的,因此熟悉控件是进行合理、有效的程序开发的重要前提。本节内容将针对Win
29、dows窗体应用程序中常见的控件进行详细介绍。按钮(Button)是用户与应用程序交互的最常用的工具。它用于接收用户的操作信息,去执行预先规定的命令,触发相应的事件过程,以实现指定的功能。2.1.8常用属性(1)Text属性该属性用于设定按钮上显示的文本。该属性也可为按钮创建快捷方式,其方法是在作为快捷键的字母前加一个“&”字符,则在程序运行时,命令按钮上该字母带有下划线,该字母就成为快捷键。(2)FlatStyle属性该属性指定了按钮的外观风格,它有4个可选值。分别是:Flat、Popup、System、Standard。该属性的默认值为Standard。(3)Image属性用于设定
30、在按钮上显示的图形。(4)ImageAlign属性当图片显示在命令按钮上时,可以通过ImageAlign属性调节其在按钮上的位置。(5)Enable属性用于设定控件是否可用,不可用,则用灰色表示。(6)Visible属性用于设定控件是否可见,不可见,则隐藏。注意:上述的属性中,前4项为外观属性;而后2项为行为属性。2.响应的事件如果按钮具有焦点,就可以使用鼠标左键、Enter键或空格键触发该按钮的Click事件。当使用ShowDialog方法显示窗体时,可以使用按钮的DialogResult属性指定ShowDialog的返回值。切换到代码窗口,创建事件过程:private int nCount
31、er。2.2 UDP协议UDP的主要作用形式将网络数据流量压缩成数据报。一个二进制数据的传输是一个数据报的典型单位。用来包含报头信息一般是数据报的前8个字节,剩余字节则用来包含具体的传输数据。UDP协议端口作用是保留数据传输通道。UDP协议应用这种作用满足在同一时间内多项应用同时发送和接收数据。数据发送方和数据接收方分别是将UDP数据报通过源端口发送出去和通过目标端口将数据接收。网络应用一部分只能使用预先为其预留或注册的静态端口另一部分网络应用则可以使用未被注册的动态端口。UDP报头一般使用两个字节存放端口号,端口号的有效范围是从0到65535,小于49151的端口号代表静态端口,大于4915
32、1的端口号都代表动态端口。数据报的长度是报头和数据的总字节数。该域主要被用来计算数据部分的可变长度,因为报头的长度是固定不变的。数据报的最大长度是由应用环境决定的。虽然数据报的最大长度为65535字节。不过,一般应用会将数据报的字节限制在8192字节。UDP协议为了保证数据的安全从而使用报头中的校验值。校验值首先通过数据发送方经过计算得出,当接收方接收到数据之后还要重新进行计算。如果某个数据报在传输过程中由于线路噪音等原因受到损坏或者第三方篡改或者,UDP协议可以通过发送方和接收方的校验计算值是否相符从而检测出是否出错。2.3 蓝牙耳机的技术发展与应用随着网络技术的迅猛发展,人们越来越迫切需要
33、发展一定范围内的无线数据与语音通信。正是在这种大环境下,以爱立信为首,由五家IT界巨人Ericsson,TOSHIBA,IBM,INTEL和NOKIA于上个世界末成立SIG,共同提出一种全球范围内通信的近距离无线接入标准,就是蓝牙技术。在蓝牙无线通信中,凡是支持语音功能的应用都推崇头戴式耳机,它在固定电话和移动通信中都得到了广泛地应用。蓝牙耳机提供了一个安全的途径来发送和接受呼叫并进行语音传输。蓝牙耳机的使用者可以再能保持连接的范围内自由移动,而不必和音频设备绑在仪器。而且以为蓝牙规范提供了一个标准的借口,所以用于电话通信的耳机也同样可以用来与固定的语音接入点进行通信,此外耳机还可以实现与计算
34、机的音频交互。第3章 系统设计方案本章内容详细介绍了本设计的流程以及各个步骤的实现方法,对于语音通信,使用UDP协议进行数据包传输,建立了语音通信系统。3.1设计流程本设计利用窗体应用程序设计了便于用户操作的UI界面,程序运行的流程图如下图所示:初始化音频采集压缩编码数据传输音频播放数据解码关闭图3-1 系统运行流程图3.2 步骤分析3.2.1初始化初始化用户UI界面,并在后台加载输入输出设备。加载输入设备,首先清空原始对象设备,然后遍历WaveIn类,获得所有有效的音频输入设备WaveIn.Devices,最后添加到新的对象之中。代码如下:m_pInDevices.Items.Clear()
35、;foreach(WavInDevice device in WaveIn.Devices)m_pInDevices.Items.Add(device.Name);加载输出设备与加载输入设备类似,代码如下:m_pOutDevices.Items.Clear();foreach(WavOutDevice device in WaveOut.Devices)m_pOutDevices.Items.Add(device.Name);3.2.2语音采集由于WaveIn类可实现语音输入设备录入音频流,而本设计选取蓝牙耳机的麦克风作为输入设备,故可以实现蓝牙耳机语音采集。代码如下:m_pWaveIn =
36、new WaveIn(WaveIn.Devicesm_pInDevices.SelectedIndex,8000,16,1,400);m_pWaveIn.BufferFull += new BufferFullHandler(m_pWaveIn_BufferFull);m_pWaveIn.Start();程序中首先根据选取的有效输入设备序号m_pInDevices.SelectedIndex创建新的WaveIn类的语音流m_pWaveIn,然后分配创建缓冲空间m_pWaveIn.BufferFull,最后开始录入声音。3.2.3语音压缩语音信号数据量较大,在传输的过程中需要对其进行压缩编码,本
37、次设计中采用的是国际电信联盟订制的编码方法G711实现压缩,其包含两种编码方式u-law和a-law。当缓冲区满之后,语音通过用户选取好编码方式进行压缩。encodedData = G711.Encode_uLaw(buffer,0,buffer.Length);或者:encodedData = G711.Encode_aLaw(buffer,0,buffer.Length);3.2.4数据传输数据传输采用UDP协议来发送数据包,UDP协议需要知道目标机器的IP及端口号,故在用户界面需要输入目标的IP及端口号。而在程序中,数据压缩完毕之后,读取目标IP及端口号实现数据包的发送。建立UDP服务:
38、m_pUdpServer = new UdpServer();m_pUdpServer.Bindings = new IPEndPointnew PEndPoint(IPAddress.Parse(m_pLoacalIP.Text),(int)m_pLocalPort.Value);m_pUdpServer.PacketReceived += newPacketReceivedHandler(m_pUdpServer_PacketReceived);m_pUdpServer.Start();用户界面获得目标IP及端口信息:m_pTargetEP=newIPEndPoint(IPAddress.
39、Parse(m_pRemoteIP.Text),(int)m_pRemotePort.Value);数据压缩完毕,发送数据包:m_pUdpServer.SendPacket(encodedData,0 ,encodedData.Length,m_pTargetEP);SendPacket函数参数为:压缩包名称encodedData,偏移量0,压缩包大小encodedData.Length,目标IP及端口信息m_pTargetEP。3.2.5数据接收、解压接收端收到数据包后,采用与发送端相同的压缩方式对其进行解压,最终得到解压后的数据名称decodedData。代码如下:decodedData
40、= G711.Decode_aLaw(e.Data,0,e.Data.Length);或者decodedData = G711.Decode_uLaw(e.Data,0,e.Data.Length);3.2.6播放WaveOut类可实现音频流的输出,调用m_pWaveOut.Play()函数可将解压后的数据通过有效的输出设备进行输出,实现音频流的播放。代码如下:m_pWaveOut.Play(decodedData,0,decodedData.Length);3.3 本章小结音频数据的数据量较大,传输过程中比较占用资源,故本设计采用G711压缩方式对音频流进行编解码,并通过UDP协议进行传输,
41、建立的语音通信系统,实现了音频流的输入输出及压缩传输。第4章 系统测试结果4.1 硬件部分测试本设计硬件部分为蓝牙耳机,在电脑上安装了蓝牙模块及驱动,能实现电脑与蓝牙耳机直接的通信,如下图4.1所示。图4.1蓝牙驱动安装图4.2 软件部分测试在Visual Studio 2010开发环境下,使用C# WinForm设计便于用户使用的可视化UI界面。运行时界面如下图所示:图4.2 用户操作界面初始图输入设备、输出设备均能够获取当前电脑上可使用的有效设备,同时本地IP地址包括了本机地址以及内网分配的IP地址,端口的选择上由于不能与其他的冲突,故初值为一使用较少的端口号。以上配置完成之后,点击开始,
42、界面变为下图所示:图4.3 用户界面本地配置完成图本地信息配置完毕后,为避免错误发生,输入设备、输出设备、编码标准均不能改变。4.3 综合测试成功连接蓝牙耳机之后,运行用户操作界面,配置好本地及目标IP信息,即可点击开始按钮,运行程序。当目标IP与本地IP相同时,即可在本机上运行设备。图4.4 系统运行测试图效果:蓝牙耳机以及普通音频输出设备均可以播放麦克风输入音频流。当目标IP地址与本地IP地址不同时,要求两地均有有效的音频输入输出设备,且IP地址处于同一网段才能进行声音播放,如下图4.5所示。图4.5 目标IP与本地IP不同测试图效果:本地IP地址为00,使用蓝牙耳机
43、作为输入输出设备,目标IP为06,使用麦克风和音响作为输入输出。经测试,两端均能接收到语音信息,效果理想,有较小杂音。第5章 总结和展望5.1 课题工作和总结经过一段时间的工作,终于完成了基于C#WinForm的语音通信系统的设计,项目所要求的功能全部达到。通过这次设计收获颇多,不仅是所作题目涉及到的软硬件知识还有更为重要的实际经验和过程中所发现的问题。接手题目后从互联网上对C#WinForm进行了详细的学习,并搜集了通过C#WinForm制作其他系统的设计,发现C#WinForm逐渐融入了人们的日常生活中,而且整个产业每年都会有逐渐递涨的产值而且技术还在不断发展和创新。
44、在查阅了大量的资料后确定了题目的设计方案。整个设计采用C#WinForm做系统编程,通过UDP和WaveIn类、G711编码方式,在实现这一设计的过程中所遇到的问题和困难给我留下了宝贵的经验和深刻教训。这些经验和教训是:(1)设计之前应该进行大量的资料收集和分析,确定一个清晰的设计思路。(2)软件的编写不但要实现功能还要不断的优化、简练、易读。(3)由于第一次接触C# WinForm,对于其编程方式及语法规则都不了解,导致上手较慢。(4)蓝牙耳机采集语音信号的处理、压缩、保存方式、保存位置等也存在着一些问题。随着课题的进行,对C#WinForm的了解也越来越深入。认为C#WinForm技术也会
45、进一步发展,C#WinForm应用将会更加广泛。设计结束了,但学习还在继续。我相信通过此次设计所得到的知识、心得、经验乃至感受都会让我在以后的日子里受益匪浅。5.2 系统功能的拓展在信息化日益加速的今天,数字多媒体的应用越来越广泛,随着宽带网概念深入人心,数字多媒体进入到了一个更广阔的空间,许多应用课题都围绕着两者展开,其中可视电话、电话会议系统和视频会议系统发展迅速,这些都要涉及到多媒体数据通信。在多媒体数据通信中,要求有良好的实时性,能够对多媒体数据进行压缩、实时流传输等操作而音频的采集和实时性播放是视频会议系统中最关键的部分,本设将蓝牙应用和声音采集相结合,安装蓝牙驱动模块,将蓝牙耳机与
46、电脑连接,增加通讯的可移动性,以Microsoft Visual Studio 2010为开发环境,采用当前比较流行的C#编程语言进行编码,将声音实时从蓝牙耳机录入,并经过一定的压缩编码技术进行网络传输,接收端接收数据后进行实时播放。C#WinForm还可以应用到很多领域包括RDLC,Excel,PDF,Word, 以及水晶报表(Crystal Report), 微软的SQL Reporting Services 安装部署与开发使用.总之,C#WinForm的优势不仅是在语音通信,其在诸多领域中亦潜力巨大,期待今后的进一步开发。致 谢这次能够圆满完成毕业设计我首先要感谢我的指导老师洪利老师,感
47、谢他在毕业设计期间对我的指导、勉励、和督导。同时我要感谢大学四年里教过我课程的老师们,感谢他们对我知识增长所付出的辛勤劳动。我还要感谢蒋晶晶、韩智明同学,感谢他在我不懂的技术的问题上给与的帮助与指导,在我走入瓶颈的时候能使我的前方豁然开朗。我所在的实验室的同学,我也要感谢你们。虽然大家来自不同专业相处时间也不长,但大家共同的爱好相同的目标使得大家互相扶持共同努力。最后我要感谢我所住宿舍的管理员阿姨们,感谢她们不论多晚回去都给我们开门让我们不至于露宿街头。还有学校的保安和厨师,你们是我安全完成毕业设计的保障。参考文献1 刘辉,常婉纶.基于C#的Winform程序参数传递和同步显示的实现J.现代电
48、子技术,2010,33(14).2 文竹.在C# WinForm程序设计课程中开展项目教学的实践J.硅谷,2009,(14).3 斯琴巴图,杨利润.C# Winform中嵌入Excel实现复杂表格的显示和控制J.软件导刊,2013,12(4). 4 王彬.基于C#的WinForm窗体传值方法探讨J.电脑知识与技术,2013,(17).5 朱林丽,吴昊.基于WinForm的应用软件评分系统设计与研究J.软件导刊,2013,12(4).6 熊凯,李言照,匡桂娟等.C#WinForm中巧用Flash实现地图向导J.农业网络信息,2008,(2).7 杨莉.用WinForm实现客户端基础数据维护模块J
49、.电脑编程技巧与维护,2006,(7).8 况海龙,熊庆国.基于串口服务器的声发射监测系统设计J.电子设计工程,2013,21(13).9 张佩佩.面向WinForm Control的自动化测试框架的设计与实现D.2009.10 周杨朋,赵正文,李瑶等.Oracle在基于WinForm的测井标准井数据库系统中的应用J.中国信息化 ,2013,(12).附 录 #region 蓝牙耳机语音采集 private void m_pToggleMic_Click(object sender,EventArgs e) if(m_IsSendingMic) m_IsSendingMic = false; m_pWaveIn.Dispose(); m_pWaveIn = null; else if(m_pInDevices.SelectedIndex = -1) MessageBox.Show(this," 请选择输入设备!","错误:",MessageBoxButtons.OK, MessageBoxIcon.Error); return; try m_pTargetEP = new IPEndPoint(IPAddress. Parse(m_pRemoteIP.Text),(int)m_pRemo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年开发商与购房者长租公寓买卖合同范本3篇
- 二零二五年度餐饮服务业劳动合同模板及食品安全3篇
- 二零二五版特种动物繁育与购销一体化服务合同3篇
- 二零二五年教育机构教学资源整合合同书3篇
- 二零二五年空压机租赁与应急响应服务合同3篇
- 二零二五年教育培训机构代理招生合同模板3篇
- 二零二五版未成年人抚养权变更合同3篇
- 二零二五年度财务风险控制合同3篇
- 二零二五年度钢材采购与智能制造合作合同3篇
- 二零二五版豪华游轮包船旅游运输服务合同参考模板2篇
- 2024版个人私有房屋购买合同
- 2025年山东光明电力服务公司招聘笔试参考题库含答案解析
- 《神经发展障碍 儿童社交沟通障碍康复规范》
- 2025年中建六局二级子企业总经理岗位公开招聘高频重点提升(共500题)附带答案详解
- 2024年5月江苏省事业单位招聘考试【综合知识与能力素质】真题及答案解析(管理类和其他类)
- 3-9年级信息技术(人教版、清华版)教科书资源下载
- 玛氏销售常用术语中英对照
- (完整)猫咪上门喂养服务协议书
- 上海牛津版三年级英语3B期末试卷及答案(共5页)
- 行为疼痛量表BPS
- 小学生必背古诗词80首(硬笔书法田字格)
评论
0/150
提交评论