版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、題 目基于C#WinForm的語音通信系統(tǒng)設(shè)計學(xué)生姓名學(xué) 號系 別專 業(yè)班 級開題時間答辯時間指導(dǎo)教師職 稱基于C#WinForm的語音通信系統(tǒng)設(shè)計 摘要 C#是一種可視化的程序設(shè)計語言。Windows窗體和控件是開發(fā)C#應(yīng)用程序的基礎(chǔ),窗體和控件扮演者重要的角色。此次設(shè)計的主要任務(wù)就是通過在C# WinForm在多媒體數(shù)據(jù)通信中,能夠?qū)Χ嗝襟w數(shù)據(jù)進(jìn)行壓縮、實時流傳等操作。本文詳細(xì)介紹了此次畢業(yè)設(shè)計的開發(fā)過程。Windows應(yīng)用程序的設(shè)計基礎(chǔ),以及通過UDP來作為可行的網(wǎng)絡(luò)傳輸層協(xié)議中,UDP協(xié)議的主要作用。還有對采集到得聲音進(jìn)行壓縮編碼,再通過采用Socket UDP的方式來實現(xiàn)數(shù)據(jù)傳輸,之
2、后進(jìn)行數(shù)據(jù)解碼進(jìn)行實時播6+放,最后利用窗體應(yīng)用程序?qū)崿F(xiàn)便于用戶操作的UI界面。關(guān)鍵詞:C#應(yīng)用程序;UDP協(xié)議;聲音采集;數(shù)據(jù)傳輸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 課題內(nèi)容及意義11.1.1 選題背景11.1.2研究現(xiàn)狀及發(fā)展趨勢11.2論文組織結(jié)構(gòu)2第2章 C#WinForm的語音通信系統(tǒng)設(shè)計應(yīng)用原理32.1 C#WinForm應(yīng)用程序設(shè)計基礎(chǔ)32.1.1 計算機(jī)窗體32.1.2計算機(jī)控件和計算機(jī)事件42.1.3 Windows窗體和基本屬性52.1.4 創(chuàng)建窗體72.1.5設(shè)置啟動窗體屬性和窗體的顯示與隱藏72.1.6窗體的事件82.1.7窗體控件描述和常用控件82.1.8常用屬性102.2 UDP協(xié)
6、議102.3 藍(lán)牙耳機(jī)的技術(shù)發(fā)展與應(yīng)用11第3章 系統(tǒng)設(shè)計方案123.1設(shè)計流程123.2 步驟分析123.2.1初始化123.2.2語音采集133.2.3語音壓縮133.2.4數(shù)據(jù)傳輸133.2.5數(shù)據(jù)接收、解壓143.2.6播放143.3 本章小結(jié)14第4章 系統(tǒng)測試結(jié)果154.1 硬件部分測試154.2 軟件部分測試154.3 綜合測試17第5章 總結(jié)和展望195.1 課題工作和總結(jié)195.2 系統(tǒng)功能的拓展19致 謝20參考文獻(xiàn)21附 錄23第1章 前言1.1 課題內(nèi)容及意義1.1.1 選題背景隨著信息化日益飛速發(fā)展,對于數(shù)字多媒體的應(yīng)用越來越廣泛,寬帶網(wǎng)概念逐漸走入更廣闊的空間,數(shù)字
7、多媒體深入人心。許多應(yīng)用課題都圍繞著兩者展開,其中可視電話、電話會議系統(tǒng)和視頻會議系統(tǒng)發(fā)展迅速,這些都要涉及到多媒體數(shù)據(jù)通信。在多媒體數(shù)據(jù)通信中,要求有良好的實時性,能夠?qū)Χ嗝襟w數(shù)據(jù)進(jìn)行壓縮、實時流傳輸?shù)炔僮鞫纛l的采集和實時性播放是視頻會議系統(tǒng)中最鍵的部分,所以本課題就是基于這一目標(biāo)而設(shè)計的。本設(shè)計是基于C#WinForm這一軟件下的語音通信系統(tǒng)設(shè)計。C#語言是Microsoft公司2000年6月發(fā)布的面向?qū)ο蟪绦蛟O(shè)計語言,隨著十幾年的快速發(fā)展,在計算機(jī)專業(yè)課程中逐漸取代了傳統(tǒng)的C+語言。對于開發(fā)應(yīng)用程序的人員來說,C#語言吸收了Java和C+等語言的經(jīng)驗和教訓(xùn),是最全面的面向?qū)ο蟪绦蛟O(shè)計語
8、言。該語言以其特有的面向?qū)ο?、組件技術(shù)、類型安全、自動內(nèi)存管理等優(yōu)點,很是受到應(yīng)用程序開發(fā)人員的喜愛?!癈#程序設(shè)計”作為學(xué)院多媒體專業(yè)相對核心的基礎(chǔ)職業(yè)課程,是學(xué)生接觸最早的編程語言。但由于高職學(xué)生的整體素質(zhì)下降,加上C#的面向?qū)ο筇卣骱统绦蛟O(shè)計的抽象性,以知識為目標(biāo)、以學(xué)科系統(tǒng)知識和理論原理為導(dǎo)向、以教師為主體、以應(yīng)試為基礎(chǔ)的教學(xué)模式越來越不能適應(yīng)高職院校的教學(xué)要求,如何進(jìn)行教學(xué)改革,激發(fā)學(xué)生的學(xué)習(xí)興趣,提高學(xué)生的學(xué)習(xí)主動性,使學(xué)生在學(xué)習(xí)中建立真正的自信心,進(jìn)而掌握C#程序設(shè)計語言并能熟練綜合運用,是現(xiàn)代課程改革中必須面對并解決的關(guān)鍵問題。 高等職業(yè)教育是“以就業(yè)為導(dǎo)向,以應(yīng)用為宗旨,以能
9、力為本位”的一種高等教育類型,目標(biāo)是培養(yǎng)實踐能力強(qiáng)、具有良好職業(yè)道德,面向生產(chǎn)、建設(shè)、管理和服務(wù)第一線崗位的高素質(zhì)技能型人才。高職教育的社會定位是培養(yǎng)技術(shù)應(yīng)用型(職業(yè)技術(shù))人才,畢業(yè)生應(yīng)主要從事生產(chǎn)、工藝、建設(shè)等工作,最需要的是知識應(yīng)用的能力和“做事”的能力,還需要具備各項專業(yè)技術(shù)能力。根據(jù)社會定位和高職教育的培養(yǎng)目標(biāo),本文主要介紹“C#程序設(shè)計”課程內(nèi)容,探索在職業(yè)基礎(chǔ)課程如何進(jìn)行基于工作過程的課程設(shè)計和實施。 1.1.2研究現(xiàn)狀及發(fā)展趨勢基于工作過程的課程設(shè)計與開發(fā),強(qiáng)調(diào)為學(xué)生的職業(yè)生涯發(fā)展培養(yǎng)其綜合職業(yè)能力。課程建設(shè)的出發(fā)點、落腳點及實施都是工作過程。所謂工作過程是在企業(yè)里為完成一件工作
10、任務(wù)并獲得工作成果而進(jìn)行的一個完整的工作程序。因此,在課程的知識體系框架內(nèi),通過構(gòu)建合適的學(xué)習(xí)情境,以職業(yè)活動的工作過程為依據(jù),改造課程的內(nèi)容和順序。通過項目的實現(xiàn),使學(xué)生直接獲得經(jīng)驗經(jīng)驗,實現(xiàn)由知識的認(rèn)識,到知識的重組,再到知識的遷移,最終實現(xiàn)知識的應(yīng)用。目前,學(xué)院多媒體技術(shù)專業(yè)已經(jīng)有了一些基于工作過程的課程改革成功案例,但大都是綜合應(yīng)用類的課程,對于“C#程序設(shè)計”這種基礎(chǔ)語言類課程來說,基于工作過程的課程設(shè)計與開發(fā)研究尚處起始階段。 在“C#程序設(shè)計”教學(xué)中,項目化教學(xué)雖然已成為目前主要采用的課程模式,但在實踐層面上還存在諸多問題。一是項目內(nèi)容和來源的簡單化及隨意性。大學(xué)課程中的項目應(yīng)盡
11、可能取材于公司,但由于公司實際項目比較復(fù)雜,不符合課程教學(xué)要求,很難全面覆蓋課程的全部知識點,實際操作起來比較困難。由于上述因素,在教學(xué)中采用的所謂項目基本還是原來的知識點,或者是學(xué)科體系中一些驗證性實驗簡單變換一下拿來用于項目化教學(xué),更有甚者,一些項目化教材的目錄就是老舊的章節(jié)目錄。通過這種方式開發(fā)教材和項目化課程舊失去了“高職教育中的項目課程應(yīng)該是一種基于工作任務(wù)的項目課程”的根本意義。二是項目間缺乏有效提高學(xué)生能力的關(guān)聯(lián)度。項目的關(guān)聯(lián)不僅體現(xiàn)著知識的分配和覆蓋,還反映了能力的遷移和提高。目前教學(xué)過程中使用的項目大部分是獨立的,沒有相關(guān)性和遞進(jìn)性。學(xué)生可以完成工作過程中的孤立項目,卻不能獨
12、立完成整個工作。深究其因,在于訓(xùn)練項目間沒有關(guān)聯(lián),造成了知識遺漏和卻是,不能將工作領(lǐng)域所需要的全部知識覆蓋,導(dǎo)致學(xué)生在解決實際問題時缺少完整的知識體系支撐。1.2論文組織結(jié)構(gòu)本論文共分6章 ,論文內(nèi)容按下列章節(jié)組織: 第1章是前言。本章主要給出畢業(yè)設(shè)計課題的背景,內(nèi)容、意義和論文的組織結(jié)構(gòu)。 第2章是介紹通過C#WinForm來設(shè)計語音通信系統(tǒng)的原理。其中包括C#WinForm的應(yīng)用程序設(shè)計基礎(chǔ)、UDP的主要作用和藍(lán)牙的技術(shù)發(fā)展和耳機(jī)應(yīng)用。第3章是設(shè)計流程。先大概設(shè)計每一步內(nèi)容,再畫出流程圖,之后分析每一步的操作,最后確定設(shè)計流程。第4章是通過藍(lán)牙耳機(jī)測試,本章介紹了通過藍(lán)牙耳機(jī)將壓縮的聲音數(shù)
13、據(jù)解壓后播放。第5章是總結(jié)與展望。本章對論文所作的工作進(jìn)行了總結(jié),并對系統(tǒng)的功能提出拓展。25第2章 C#WinForm的語音通信系統(tǒng)設(shè)計應(yīng)用原理2.1 C#WinForm應(yīng)用程序設(shè)計基礎(chǔ)2.1.1 計算機(jī)窗體Windows窗體就是創(chuàng)立Windows應(yīng)用程序的框架。在VS.NET中創(chuàng)建Windows應(yīng)用程序的第一步就是建立這個框架。操作步驟如下:(1)運行VS.NET,在【起始頁】上單擊【新建項目】按鈕,打開“新建項目”對話框,如圖2.1所示。在“項目類型”列表框中指定項目的類型為“Visual C#”,在“模板”列表框中選擇“Windows應(yīng)用程序”模板,在“名稱”文本框中輸入Calcula
14、tor,在“位置”下拉列表中選定保存項目的位置。圖2.1 新建項目框圖(2)單擊“確定”按鈕后就進(jìn)入VS.NET的主界面,如圖2.2所示。圖2.2 程序設(shè)計界面圖會從圖2-2可以看出,當(dāng)選擇“Windows應(yīng)用程序”作為應(yīng)用程序的模板后,系統(tǒng)自動為用戶生成一個空白窗體,一般名為Form1。該窗體就是應(yīng)用程序運行時顯示給用戶的操作界面,下一步就是向窗體中添加各種控件。2.1.2計算機(jī)控件和計算機(jī)事件控件表示用戶和程序之間的圖形化連接??丶梢蕴峁┗蛱幚頂?shù)據(jù)、接受用戶輸入、對事件做出響應(yīng)或執(zhí)行連接用戶和應(yīng)用程序的其他功能。因為控件本質(zhì)上是具有圖形接口的組件,所以它能通過組件所提供的功能并與用戶交互
15、。窗體中的控件有很多,“工具箱”中的“Windows窗體”里包含了所有Windows的標(biāo)準(zhǔn)控件,用戶還可以根據(jù)需要自己定義控件。通過在“屬性”窗口中改變控件的屬性可以改變的外觀和特性。在C#中,基于Windows應(yīng)用程序設(shè)計方法是事件驅(qū)動的。事件驅(qū)動不是由程序的順序來控制的,而是由事件的發(fā)生來控制的。事件驅(qū)動程序設(shè)計是圍繞著消息的產(chǎn)生與處理而展開的,消息就是關(guān)于發(fā)生的事件的信息。Windows程序員的工作就是對所開發(fā)的應(yīng)用程序所要發(fā)出或者接收的消息進(jìn)行排序和管理。事件驅(qū)動程序方法提供了許多便利,對于那些需要大范圍用戶干預(yù)的應(yīng)用程序來說,更是很有用處。在“窗體設(shè)計器”中看到的是窗體及其中的控件,
16、而要為控件添加事件處理程序就必須先切換到代碼編輯器狀態(tài)。切換到代碼編輯器有以下幾種方法:(1)雙擊窗體或者某控件。(2)在解決方案資源管理器中右鍵單擊Form1.cs,從快捷菜單中選擇“查看代碼”命令。如果選擇“視圖設(shè)計器”則可以回到“窗體設(shè)計器”中。(3)當(dāng)?shù)谝淮吻袚Q到代碼編輯器之后,在窗體標(biāo)題“Form1.cs設(shè)計”的左邊會自動出現(xiàn)一個新的標(biāo)題:Form1.cs,單擊該標(biāo)題就可以切換到代碼編輯器。反之,如果單擊“Form1.cs設(shè)計”則會切換到“窗體設(shè)計器”。2.1.3 Windows窗體和基本屬性窗體就好像一個容器,其他界面元素都可以放置在窗體中。C#中以類Form來封裝窗體,一般來說,
17、用戶設(shè)計的窗體都是類Form的派生類,用戶窗體中添加其他界面元素的操作實際上就是向派生類中添加私有成員。當(dāng)新建一個Windows應(yīng)用程序項目時,C#就會自動創(chuàng)建一個默認(rèn)名為Form1的Windows窗體。Windows窗體由以下4部分組成:標(biāo)題欄、控制按鈕、邊界、窗口區(qū)。Windows窗體的屬性可以決定窗體的外觀和行為,其中常用的屬性有:名稱(Name)屬性、標(biāo)題(Text)屬性、控制菜單屬性和影響窗體外觀的屬性。1、窗體的名稱屬性(Name)Name用于設(shè)置窗體的名稱,該屬性值作為窗體的標(biāo)志,用于在程序中引用窗體。在初始新建一個Windows應(yīng)用程序項目時,自動創(chuàng)建一個窗體,該窗體的名稱被自
18、動命名為Form1;添加第2個窗體時,其名稱被自動命名為Form2,依次類推。通常而言,在設(shè)計Windows窗體時,可給其Name屬性設(shè)置一個有實際含義的名字。2、窗體的標(biāo)題屬性(Text)Text屬性用于設(shè)置窗體標(biāo)題欄顯示的內(nèi)容,它的值是一個字符串。通常,標(biāo)題欄顯示的內(nèi)容應(yīng)能概括地說明窗體的內(nèi)容或作用。3、 窗體的控制菜單屬性在C#應(yīng)用程序中的Windows窗體,一般都顯示控制菜單,以方便用戶的操作。(1)ControlBox屬性:該屬性用來設(shè)置窗體上是否有控制菜單。其默認(rèn)值True,窗體上顯示控制菜單。若將該屬性設(shè)置為False,則窗體上不顯示控制菜單。(2)MaximizeBox屬性:用
19、于設(shè)置窗體上的最大化按鈕。其默認(rèn)值True,窗體上顯示最大化按鈕。若將該屬性設(shè)置為False,則窗體上不顯示最大化按鈕。(3)MinimizeBox屬性:用于設(shè)置窗體上的最小化按鈕。其默認(rèn)值True,窗體上顯示最小化按鈕。若將該屬性設(shè)置為False,則窗體上不顯示最小化按鈕。4. 設(shè)置窗體外觀的屬性(1) FormBorderStyle屬性:用于控制窗體邊界的類型。它有7個可選值,可選值說明如表2.3所示。表2.1 FormBorderStyle屬性的可選值可選項說明None窗體無邊框,可以改變大小Fixed3D使用3D邊框效果。不允許改變窗體大小,可以包含控件菜單、最大化按鈕和最小化按鈕。F
20、ixedDialog用于對話框。不允許改變窗體大小,可以包含控件菜單、最大化按鈕和最小化按鈕。FixedSingle窗體為單線邊框。不允許改變窗體大小,可以包含控件菜單、最大化按鈕和最小化按鈕Sizable該值為屬性的默認(rèn)值,窗體為雙線邊框??梢灾匦略O(shè)置窗體的大小,可以包含控件菜單、最大化按鈕和最小化按鈕。FixedToolWindow用于工具窗口。不可重新設(shè)置窗體大小,只帶有標(biāo)題欄和關(guān)閉按鈕。SizableToolWindow用于工具窗口??梢灾匦略O(shè)置窗體大小,只帶有標(biāo)題欄和關(guān)閉按鈕(2) Size屬性:用來設(shè)置窗體的大小。(3) Location屬性:設(shè)置窗體在屏幕上的位置,即設(shè)置窗體左上
21、角的坐標(biāo)值。(4) BackColor屬性:用于設(shè)置窗體的背景顏色,可以從彈出的調(diào)色板中選擇。(5) BackgroundImage屬性:用于設(shè)置窗體的背景圖像。(6) Opacity屬性:該屬性用來設(shè)置窗體的透明度。5. 設(shè)置窗體可見性的屬性窗體的可見性由Visible屬性來控制。2.1.4 創(chuàng)建窗體通常,在開發(fā)項目時,一個窗體往往不能滿足,通常需要用到多個窗體。C#提供了多窗體處理能力,在一個項目中可創(chuàng)建多個窗體,添加新窗體的方式如下:(1)選擇項目菜單下的“添加Windows窗體”命令,打開“添加新項”對話框,如圖2.3所示。圖2.3 添加新項“對話框”圖(2)在“添加新項”對話框的模板
22、框內(nèi),選擇“Windows窗體”模板,然后,單擊“打開”按鈕,就添加一個新的Windows窗體。完成添加窗體后,在解決方案資源管理器窗口中雙擊對應(yīng)的窗體,則在Windows窗體設(shè)計器中,可顯示該窗體。2.1.5設(shè)置啟動窗體屬性和窗體的顯示與隱藏當(dāng)在應(yīng)用程序中添加了多個窗體后,默認(rèn)情況下,應(yīng)用程序中的第一個窗體被自動指定為啟動窗體。在應(yīng)用程序開始運行時,此窗體就會首先顯示出來。如果想實現(xiàn)在應(yīng)用程序啟動時,顯示別的窗體,那么就要設(shè)置啟動窗體。1、窗體的顯示如果要在一個窗體中通過按鈕打開另一個窗體,就必須通過調(diào)用Show()方法顯示窗體。語法如下:public void Show();2.、窗體的隱
23、藏通過調(diào)用Hide()方法隱藏窗體。語法如下:public void Hide();2.1.6窗體的事件Windows是事件驅(qū)動的操作系統(tǒng),對Form類的任何交互都是基于事件來實現(xiàn)的。Form類提供了大量的事件用于響應(yīng)對窗體執(zhí)行的各種操作。窗體設(shè)計人員往住關(guān)心窗體的加載和關(guān)閉,通常在加載時進(jìn)行界面和數(shù)據(jù)的初始化。在關(guān)閉前進(jìn)行資源的釋放等清理操作,也可以取消關(guān)閉操作。下面詳細(xì)介紹窗體的Click、Load和FormClosing事件。1. Click(單擊)事件當(dāng)單擊窗體時,將會觸發(fā)窗體的Click事件。語法如下:public event EventHandler Click2.Load(加載)
24、事件當(dāng)?shù)谝淮沃苯踊蜷g接調(diào)用Form.Show方法來顯示窗體時,窗體就會進(jìn)行且只進(jìn)行一次加載,并且在必需的加載操作完成后會引發(fā)Load事件。通常,在Load事件響應(yīng)函數(shù)中執(zhí)行一些初始化操作。語法如下:public event EventHandler Load3. FormClosing(關(guān)閉)事件Form類的FormClosing事件是在窗體關(guān)閉時引發(fā)的事件,直接或間接調(diào)用Form.Close()方法都會引發(fā)事件。在FormClosing事件中,通常進(jìn)行關(guān)閉前的確認(rèn)和資源釋放操作。語法如下:public event FormClosingEventHandler FormClosing2.1.
25、7窗體控件描述和常用控件控件是包含在窗體上的對象,是構(gòu)成用戶界面的基本元素,也 是C#可視化編程的重要工具。使用控件可使程序的設(shè)計簡化避免大量重復(fù)性工作,簡化設(shè)計過程,有效地提高設(shè)計效率。對于一個程序開發(fā)人員而言,必須掌握每類控件的功能、用途,并掌握其常用的屬性、事件和方法。在VS2005中,工具箱中包含了建立應(yīng)用程序的各種控件。工具箱分為Windows窗體、公共控件、容器、菜單和工具欄、數(shù)據(jù)、組件、打印、對話框等部分,常用的Windows窗體控件放在“Windows窗體”選項卡下。工具箱中有數(shù)十個常用的Windows窗體控件,它們以圖標(biāo)的方式顯示在工具箱中,其名稱顯示于圖標(biāo)的右側(cè)。在介紹具體
26、控件之前,首先在此探討一下各個控件共有的屬性、事件和方法。在C#中,所有的窗體控件,比如標(biāo)簽控件、文本框控件、按鈕控件等全部都是繼承于:System.Windows.Forms.Control。作為各種窗體控件的基類,Control類實現(xiàn)了所有窗體交互控件的基本功能。Control類的屬性、方法和事件是所有窗體控件所公有的,而且其中很多是在編程中經(jīng)常會遇到的。(1)Control類的屬性Control類的屬性描述了一個窗體控件的所有公共屬性,可以在屬性(Properties)窗口中查看或修改窗體控件的屬性。常用的屬性如下:Name屬性每一個控件都有一個Name(名字)屬性,在應(yīng)用程序中,可通過
27、此屬性來引用這個控件。C#會給每個新添加的控件指定一個默認(rèn)名。在應(yīng)用程序設(shè)計中,可根據(jù)需要將控件的默認(rèn)名字改成更有實際代表意義的名字。Text屬性在C#中,每一個控件對象都有Text屬性。Text屬性在很多控件中都有重要的意義和作用。Anchor屬性Anchor的意思是“錨”,那么Anchor屬性是用來確定此控件與其容器控件的固定關(guān)系的。Dock屬性Dock屬性規(guī)定了子控件與父控件的邊緣依賴關(guān)系。Dock的值有6種,分別是Top、Bottom、Left、Right、Fill,最后還有默認(rèn)值None。一旦Dock值被設(shè)定,子控件就會發(fā)生變化與父控件選定的邊緣相融在一起。(2)Control類的方
28、法可以調(diào)用Control類的方法來獲得控件的一些信息,或者設(shè)置控件的屬性值及行為狀態(tài)。(3)Control類的事件 在C#中,當(dāng)用戶進(jìn)行某一項操作時,會引發(fā)某個事件的發(fā)生,此時就會調(diào)用事件處理程序代碼,實現(xiàn)對程序的控制。 事件驅(qū)動實現(xiàn)是基于窗體的消息傳遞和消息循環(huán)機(jī)制的。在C#中,所有的機(jī)制都被封裝在控件之中,極大方便了編寫事件的驅(qū)動程序。如果希望能夠更加深入地操作,或定義自己的事件,就需要聯(lián)合使用委托(Delegate)和事件(Event),可以靈活地添加、修改事件的響應(yīng),并自定義事件的處理方法。窗體是由一個個控件構(gòu)成的,因此熟悉控件是進(jìn)行合理、有效的程序開發(fā)的重要前提。本節(jié)內(nèi)容將針對Win
29、dows窗體應(yīng)用程序中常見的控件進(jìn)行詳細(xì)介紹。按鈕(Button)是用戶與應(yīng)用程序交互的最常用的工具。它用于接收用戶的操作信息,去執(zhí)行預(yù)先規(guī)定的命令,觸發(fā)相應(yīng)的事件過程,以實現(xiàn)指定的功能。2.1.8常用屬性(1)Text屬性該屬性用于設(shè)定按鈕上顯示的文本。該屬性也可為按鈕創(chuàng)建快捷方式,其方法是在作為快捷鍵的字母前加一個“&”字符,則在程序運行時,命令按鈕上該字母帶有下劃線,該字母就成為快捷鍵。(2)FlatStyle屬性該屬性指定了按鈕的外觀風(fēng)格,它有4個可選值。分別是:Flat、Popup、System、Standard。該屬性的默認(rèn)值為Standard。(3)Image屬性用于設(shè)定
30、在按鈕上顯示的圖形。(4)ImageAlign屬性當(dāng)圖片顯示在命令按鈕上時,可以通過ImageAlign屬性調(diào)節(jié)其在按鈕上的位置。(5)Enable屬性用于設(shè)定控件是否可用,不可用,則用灰色表示。(6)Visible屬性用于設(shè)定控件是否可見,不可見,則隱藏。注意:上述的屬性中,前4項為外觀屬性;而后2項為行為屬性。2.響應(yīng)的事件如果按鈕具有焦點,就可以使用鼠標(biāo)左鍵、Enter鍵或空格鍵觸發(fā)該按鈕的Click事件。當(dāng)使用ShowDialog方法顯示窗體時,可以使用按鈕的DialogResult屬性指定ShowDialog的返回值。切換到代碼窗口,創(chuàng)建事件過程:private int nCount
31、er。2.2 UDP協(xié)議UDP的主要作用形式將網(wǎng)絡(luò)數(shù)據(jù)流量壓縮成數(shù)據(jù)報。一個二進(jìn)制數(shù)據(jù)的傳輸是一個數(shù)據(jù)報的典型單位。用來包含報頭信息一般是數(shù)據(jù)報的前8個字節(jié),剩余字節(jié)則用來包含具體的傳輸數(shù)據(jù)。UDP協(xié)議端口作用是保留數(shù)據(jù)傳輸通道。UDP協(xié)議應(yīng)用這種作用滿足在同一時間內(nèi)多項應(yīng)用同時發(fā)送和接收數(shù)據(jù)。數(shù)據(jù)發(fā)送方和數(shù)據(jù)接收方分別是將UDP數(shù)據(jù)報通過源端口發(fā)送出去和通過目標(biāo)端口將數(shù)據(jù)接收。網(wǎng)絡(luò)應(yīng)用一部分只能使用預(yù)先為其預(yù)留或注冊的靜態(tài)端口另一部分網(wǎng)絡(luò)應(yīng)用則可以使用未被注冊的動態(tài)端口。UDP報頭一般使用兩個字節(jié)存放端口號,端口號的有效范圍是從0到65535,小于49151的端口號代表靜態(tài)端口,大于4915
32、1的端口號都代表動態(tài)端口。數(shù)據(jù)報的長度是報頭和數(shù)據(jù)的總字節(jié)數(shù)。該域主要被用來計算數(shù)據(jù)部分的可變長度,因為報頭的長度是固定不變的。數(shù)據(jù)報的最大長度是由應(yīng)用環(huán)境決定的。雖然數(shù)據(jù)報的最大長度為65535字節(jié)。不過,一般應(yīng)用會將數(shù)據(jù)報的字節(jié)限制在8192字節(jié)。UDP協(xié)議為了保證數(shù)據(jù)的安全從而使用報頭中的校驗值。校驗值首先通過數(shù)據(jù)發(fā)送方經(jīng)過計算得出,當(dāng)接收方接收到數(shù)據(jù)之后還要重新進(jìn)行計算。如果某個數(shù)據(jù)報在傳輸過程中由于線路噪音等原因受到損壞或者第三方篡改或者,UDP協(xié)議可以通過發(fā)送方和接收方的校驗計算值是否相符從而檢測出是否出錯。2.3 藍(lán)牙耳機(jī)的技術(shù)發(fā)展與應(yīng)用隨著網(wǎng)絡(luò)技術(shù)的迅猛發(fā)展,人們越來越迫切需要
33、發(fā)展一定范圍內(nèi)的無線數(shù)據(jù)與語音通信。正是在這種大環(huán)境下,以愛立信為首,由五家IT界巨人Ericsson,TOSHIBA,IBM,INTEL和NOKIA于上個世界末成立SIG,共同提出一種全球范圍內(nèi)通信的近距離無線接入標(biāo)準(zhǔn),就是藍(lán)牙技術(shù)。在藍(lán)牙無線通信中,凡是支持語音功能的應(yīng)用都推崇頭戴式耳機(jī),它在固定電話和移動通信中都得到了廣泛地應(yīng)用。藍(lán)牙耳機(jī)提供了一個安全的途徑來發(fā)送和接受呼叫并進(jìn)行語音傳輸。藍(lán)牙耳機(jī)的使用者可以再能保持連接的范圍內(nèi)自由移動,而不必和音頻設(shè)備綁在儀器。而且以為藍(lán)牙規(guī)范提供了一個標(biāo)準(zhǔn)的借口,所以用于電話通信的耳機(jī)也同樣可以用來與固定的語音接入點進(jìn)行通信,此外耳機(jī)還可以實現(xiàn)與計算
34、機(jī)的音頻交互。第3章 系統(tǒng)設(shè)計方案本章內(nèi)容詳細(xì)介紹了本設(shè)計的流程以及各個步驟的實現(xiàn)方法,對于語音通信,使用UDP協(xié)議進(jìn)行數(shù)據(jù)包傳輸,建立了語音通信系統(tǒng)。3.1設(shè)計流程本設(shè)計利用窗體應(yīng)用程序設(shè)計了便于用戶操作的UI界面,程序運行的流程圖如下圖所示:初始化音頻采集壓縮編碼數(shù)據(jù)傳輸音頻播放數(shù)據(jù)解碼關(guān)閉圖3-1 系統(tǒng)運行流程圖3.2 步驟分析3.2.1初始化初始化用戶UI界面,并在后臺加載輸入輸出設(shè)備。加載輸入設(shè)備,首先清空原始對象設(shè)備,然后遍歷WaveIn類,獲得所有有效的音頻輸入設(shè)備WaveIn.Devices,最后添加到新的對象之中。代碼如下:m_pInDevices.Items.Clear()
35、;foreach(WavInDevice device in WaveIn.Devices)m_pInDevices.Items.Add(device.Name);加載輸出設(shè)備與加載輸入設(shè)備類似,代碼如下:m_pOutDevices.Items.Clear();foreach(WavOutDevice device in WaveOut.Devices)m_pOutDevices.Items.Add(device.Name);3.2.2語音采集由于WaveIn類可實現(xiàn)語音輸入設(shè)備錄入音頻流,而本設(shè)計選取藍(lán)牙耳機(jī)的麥克風(fēng)作為輸入設(shè)備,故可以實現(xiàn)藍(lán)牙耳機(jī)語音采集。代碼如下:m_pWaveIn =
36、new WaveIn(WaveIn.Devicesm_pInDevices.SelectedIndex,8000,16,1,400);m_pWaveIn.BufferFull += new BufferFullHandler(m_pWaveIn_BufferFull);m_pWaveIn.Start();程序中首先根據(jù)選取的有效輸入設(shè)備序號m_pInDevices.SelectedIndex創(chuàng)建新的WaveIn類的語音流m_pWaveIn,然后分配創(chuàng)建緩沖空間m_pWaveIn.BufferFull,最后開始錄入聲音。3.2.3語音壓縮語音信號數(shù)據(jù)量較大,在傳輸?shù)倪^程中需要對其進(jìn)行壓縮編碼,本
37、次設(shè)計中采用的是國際電信聯(lián)盟訂制的編碼方法G711實現(xiàn)壓縮,其包含兩種編碼方式u-law和a-law。當(dāng)緩沖區(qū)滿之后,語音通過用戶選取好編碼方式進(jìn)行壓縮。encodedData = G711.Encode_uLaw(buffer,0,buffer.Length);或者:encodedData = G711.Encode_aLaw(buffer,0,buffer.Length);3.2.4數(shù)據(jù)傳輸數(shù)據(jù)傳輸采用UDP協(xié)議來發(fā)送數(shù)據(jù)包,UDP協(xié)議需要知道目標(biāo)機(jī)器的IP及端口號,故在用戶界面需要輸入目標(biāo)的IP及端口號。而在程序中,數(shù)據(jù)壓縮完畢之后,讀取目標(biāo)IP及端口號實現(xiàn)數(shù)據(jù)包的發(fā)送。建立UDP服務(wù):
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();用戶界面獲得目標(biāo)IP及端口信息:m_pTargetEP=newIPEndPoint(IPAddress.
39、Parse(m_pRemoteIP.Text),(int)m_pRemotePort.Value);數(shù)據(jù)壓縮完畢,發(fā)送數(shù)據(jù)包:m_pUdpServer.SendPacket(encodedData,0 ,encodedData.Length,m_pTargetEP);SendPacket函數(shù)參數(shù)為:壓縮包名稱encodedData,偏移量0,壓縮包大小encodedData.Length,目標(biāo)IP及端口信息m_pTargetEP。3.2.5數(shù)據(jù)接收、解壓接收端收到數(shù)據(jù)包后,采用與發(fā)送端相同的壓縮方式對其進(jìn)行解壓,最終得到解壓后的數(shù)據(jù)名稱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類可實現(xiàn)音頻流的輸出,調(diào)用m_pWaveOut.Play()函數(shù)可將解壓后的數(shù)據(jù)通過有效的輸出設(shè)備進(jìn)行輸出,實現(xiàn)音頻流的播放。代碼如下:m_pWaveOut.Play(decodedData,0,decodedData.Length);3.3 本章小結(jié)音頻數(shù)據(jù)的數(shù)據(jù)量較大,傳輸過程中比較占用資源,故本設(shè)計采用G711壓縮方式對音頻流進(jìn)行編解碼,并通過UDP協(xié)議進(jìn)行傳輸,
41、建立的語音通信系統(tǒng),實現(xiàn)了音頻流的輸入輸出及壓縮傳輸。第4章 系統(tǒng)測試結(jié)果4.1 硬件部分測試本設(shè)計硬件部分為藍(lán)牙耳機(jī),在電腦上安裝了藍(lán)牙模塊及驅(qū)動,能實現(xiàn)電腦與藍(lán)牙耳機(jī)直接的通信,如下圖4.1所示。圖4.1藍(lán)牙驅(qū)動安裝圖4.2 軟件部分測試在Visual Studio 2010開發(fā)環(huán)境下,使用C# WinForm設(shè)計便于用戶使用的可視化UI界面。運行時界面如下圖所示:圖4.2 用戶操作界面初始圖輸入設(shè)備、輸出設(shè)備均能夠獲取當(dāng)前電腦上可使用的有效設(shè)備,同時本地IP地址包括了本機(jī)地址以及內(nèi)網(wǎng)分配的IP地址,端口的選擇上由于不能與其他的沖突,故初值為一使用較少的端口號。以上配置完成之后,點擊開始,
42、界面變?yōu)橄聢D所示:圖4.3 用戶界面本地配置完成圖本地信息配置完畢后,為避免錯誤發(fā)生,輸入設(shè)備、輸出設(shè)備、編碼標(biāo)準(zhǔn)均不能改變。4.3 綜合測試成功連接藍(lán)牙耳機(jī)之后,運行用戶操作界面,配置好本地及目標(biāo)IP信息,即可點擊開始按鈕,運行程序。當(dāng)目標(biāo)IP與本地IP相同時,即可在本機(jī)上運行設(shè)備。圖4.4 系統(tǒng)運行測試圖效果:藍(lán)牙耳機(jī)以及普通音頻輸出設(shè)備均可以播放麥克風(fēng)輸入音頻流。當(dāng)目標(biāo)IP地址與本地IP地址不同時,要求兩地均有有效的音頻輸入輸出設(shè)備,且IP地址處于同一網(wǎng)段才能進(jìn)行聲音播放,如下圖4.5所示。圖4.5 目標(biāo)IP與本地IP不同測試圖效果:本地IP地址為00,使用藍(lán)牙耳機(jī)
43、作為輸入輸出設(shè)備,目標(biāo)IP為06,使用麥克風(fēng)和音響作為輸入輸出。經(jīng)測試,兩端均能接收到語音信息,效果理想,有較小雜音。第5章 總結(jié)和展望5.1 課題工作和總結(jié)經(jīng)過一段時間的工作,終于完成了基于C#WinForm的語音通信系統(tǒng)的設(shè)計,項目所要求的功能全部達(dá)到。通過這次設(shè)計收獲頗多,不僅是所作題目涉及到的軟硬件知識還有更為重要的實際經(jīng)驗和過程中所發(fā)現(xiàn)的問題。接手題目后從互聯(lián)網(wǎng)上對C#WinForm進(jìn)行了詳細(xì)的學(xué)習(xí),并搜集了通過C#WinForm制作其他系統(tǒng)的設(shè)計,發(fā)現(xiàn)C#WinForm逐漸融入了人們的日常生活中,而且整個產(chǎn)業(yè)每年都會有逐漸遞漲的產(chǎn)值而且技術(shù)還在不斷發(fā)展和創(chuàng)新。
44、在查閱了大量的資料后確定了題目的設(shè)計方案。整個設(shè)計采用C#WinForm做系統(tǒng)編程,通過UDP和WaveIn類、G711編碼方式,在實現(xiàn)這一設(shè)計的過程中所遇到的問題和困難給我留下了寶貴的經(jīng)驗和深刻教訓(xùn)。這些經(jīng)驗和教訓(xùn)是:(1)設(shè)計之前應(yīng)該進(jìn)行大量的資料收集和分析,確定一個清晰的設(shè)計思路。(2)軟件的編寫不但要實現(xiàn)功能還要不斷的優(yōu)化、簡練、易讀。(3)由于第一次接觸C# WinForm,對于其編程方式及語法規(guī)則都不了解,導(dǎo)致上手較慢。(4)藍(lán)牙耳機(jī)采集語音信號的處理、壓縮、保存方式、保存位置等也存在著一些問題。隨著課題的進(jìn)行,對C#WinForm的了解也越來越深入。認(rèn)為C#WinForm技術(shù)也會
45、進(jìn)一步發(fā)展,C#WinForm應(yīng)用將會更加廣泛。設(shè)計結(jié)束了,但學(xué)習(xí)還在繼續(xù)。我相信通過此次設(shè)計所得到的知識、心得、經(jīng)驗?zāi)酥粮惺芏紩屛以谝院蟮娜兆永锸芤娣藴\。5.2 系統(tǒng)功能的拓展在信息化日益加速的今天,數(shù)字多媒體的應(yīng)用越來越廣泛,隨著寬帶網(wǎng)概念深入人心,數(shù)字多媒體進(jìn)入到了一個更廣闊的空間,許多應(yīng)用課題都圍繞著兩者展開,其中可視電話、電話會議系統(tǒng)和視頻會議系統(tǒng)發(fā)展迅速,這些都要涉及到多媒體數(shù)據(jù)通信。在多媒體數(shù)據(jù)通信中,要求有良好的實時性,能夠?qū)Χ嗝襟w數(shù)據(jù)進(jìn)行壓縮、實時流傳輸?shù)炔僮鞫纛l的采集和實時性播放是視頻會議系統(tǒng)中最關(guān)鍵的部分,本設(shè)將藍(lán)牙應(yīng)用和聲音采集相結(jié)合,安裝藍(lán)牙驅(qū)動模塊,將藍(lán)牙耳機(jī)與
46、電腦連接,增加通訊的可移動性,以Microsoft Visual Studio 2010為開發(fā)環(huán)境,采用當(dāng)前比較流行的C#編程語言進(jìn)行編碼,將聲音實時從藍(lán)牙耳機(jī)錄入,并經(jīng)過一定的壓縮編碼技術(shù)進(jìn)行網(wǎng)絡(luò)傳輸,接收端接收數(shù)據(jù)后進(jìn)行實時播放。C#WinForm還可以應(yīng)用到很多領(lǐng)域包括RDLC,Excel,PDF,Word, 以及水晶報表(Crystal Report), 微軟的SQL Reporting Services 安裝部署與開發(fā)使用.總之,C#WinForm的優(yōu)勢不僅是在語音通信,其在諸多領(lǐng)域中亦潛力巨大,期待今后的進(jìn)一步開發(fā)。致 謝這次能夠圓滿完成畢業(yè)設(shè)計我首先要感謝我的指導(dǎo)老師洪利老師,感
47、謝他在畢業(yè)設(shè)計期間對我的指導(dǎo)、勉勵、和督導(dǎo)。同時我要感謝大學(xué)四年里教過我課程的老師們,感謝他們對我知識增長所付出的辛勤勞動。我還要感謝蔣晶晶、韓智明同學(xué),感謝他在我不懂的技術(shù)的問題上給與的幫助與指導(dǎo),在我走入瓶頸的時候能使我的前方豁然開朗。我所在的實驗室的同學(xué),我也要感謝你們。雖然大家來自不同專業(yè)相處時間也不長,但大家共同的愛好相同的目標(biāo)使得大家互相扶持共同努力。最后我要感謝我所住宿舍的管理員阿姨們,感謝她們不論多晚回去都給我們開門讓我們不至于露宿街頭。還有學(xué)校的保安和廚師,你們是我安全完成畢業(yè)設(shè)計的保障。參考文獻(xiàn)1 劉輝,常婉綸.基于C#的Winform程序參數(shù)傳遞和同步顯示的實現(xiàn)J.現(xiàn)代電
48、子技術(shù),2010,33(14).2 文竹.在C# WinForm程序設(shè)計課程中開展項目教學(xué)的實踐J.硅谷,2009,(14).3 斯琴巴圖,楊利潤.C# Winform中嵌入Excel實現(xiàn)復(fù)雜表格的顯示和控制J.軟件導(dǎo)刊,2013,12(4). 4 王彬.基于C#的WinForm窗體傳值方法探討J.電腦知識與技術(shù),2013,(17).5 朱林麗,吳昊.基于WinForm的應(yīng)用軟件評分系統(tǒng)設(shè)計與研究J.軟件導(dǎo)刊,2013,12(4).6 熊凱,李言照,匡桂娟等.C#WinForm中巧用Flash實現(xiàn)地圖向?qū).農(nóng)業(yè)網(wǎng)絡(luò)信息,2008,(2).7 楊莉.用WinForm實現(xiàn)客戶端基礎(chǔ)數(shù)據(jù)維護(hù)模塊J
49、.電腦編程技巧與維護(hù),2006,(7).8 況海龍,熊慶國.基于串口服務(wù)器的聲發(fā)射監(jiān)測系統(tǒng)設(shè)計J.電子設(shè)計工程,2013,21(13).9 張佩佩.面向WinForm Control的自動化測試框架的設(shè)計與實現(xiàn)D.2009.10 周楊朋,趙正文,李瑤等.Oracle在基于WinForm的測井標(biāo)準(zhǔn)井?dāng)?shù)據(jù)庫系統(tǒng)中的應(yīng)用J.中國信息化 ,2013,(12).附 錄 #region 藍(lán)牙耳機(jī)語音采集 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," 請選擇輸入設(shè)備!","錯誤:",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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年開發(fā)商與購房者長租公寓買賣合同范本3篇
- 二零二五年度餐飲服務(wù)業(yè)勞動合同模板及食品安全3篇
- 二零二五版特種動物繁育與購銷一體化服務(wù)合同3篇
- 二零二五年教育機(jī)構(gòu)教學(xué)資源整合合同書3篇
- 二零二五年空壓機(jī)租賃與應(yīng)急響應(yīng)服務(wù)合同3篇
- 二零二五年教育培訓(xùn)機(jī)構(gòu)代理招生合同模板3篇
- 二零二五版未成年人撫養(yǎng)權(quán)變更合同3篇
- 二零二五年度財務(wù)風(fēng)險控制合同3篇
- 二零二五年度鋼材采購與智能制造合作合同3篇
- 二零二五版豪華游輪包船旅游運輸服務(wù)合同參考模板2篇
- 2024版?zhèn)€人私有房屋購買合同
- 2025年山東光明電力服務(wù)公司招聘筆試參考題庫含答案解析
- 《神經(jīng)發(fā)展障礙 兒童社交溝通障礙康復(fù)規(guī)范》
- 2025年中建六局二級子企業(yè)總經(jīng)理崗位公開招聘高頻重點提升(共500題)附帶答案詳解
- 2024年5月江蘇省事業(yè)單位招聘考試【綜合知識與能力素質(zhì)】真題及答案解析(管理類和其他類)
- 3-9年級信息技術(shù)(人教版、清華版)教科書資源下載
- 瑪氏銷售常用術(shù)語中英對照
- (完整)貓咪上門喂養(yǎng)服務(wù)協(xié)議書
- 上海牛津版三年級英語3B期末試卷及答案(共5頁)
- 行為疼痛量表BPS
- 小學(xué)生必背古詩詞80首(硬筆書法田字格)
評論
0/150
提交評論