freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于ip的語音通信—畢業(yè)設計論文-資料下載頁

2025-02-26 09:49本頁面
  

【正文】 圖 選擇音頻格式確定回放對象打開回放設備分配緩沖區(qū)接收數(shù)據(jù)并解壓向指定設備輸出數(shù)據(jù)開始結束通信停止回放結束是否基于 IP的 語音通信 21 4 IP 語音通信系統(tǒng)的 實現(xiàn) 開發(fā)平臺 目前開發(fā)基于網(wǎng)絡的語音通訊系統(tǒng), 比較流行的幾種 語言包括C++、 JAVA 和 C,基于幾種平臺和語言的比較,最終選擇了 Visual Studio 2021 作為 IDE,選擇 Visual C++語言來實現(xiàn)此語音通訊系統(tǒng),選擇 VS2021 和 Visual C++的理由如下 。 Visual Studio 是一套完整的開發(fā)工具集,用于生成 Web 應用程序、 XML Web Services、桌面應用程序和移動應用程序。Visual Basic、 Visual C++、 Visual C 和 Visual J 全都使用相同的集成開發(fā)環(huán)境 (IDE),利用此 IDE 可以共享工具且有助于創(chuàng)建混合語言解決方案。另外,這些語言利用了 .NET Framework 的功能,通過此框架可 簡化 ASP Web 應用程序和 XML Web Services 的關鍵 開發(fā) 技術。而 Visual C++是微軟推出的一種面向對象編程語言,它使得程序員可以快速地編寫各種基于 Microsoft MFC 平臺的 應用程序,Microsoft MFC 提供了一系列的工具和服務來最大程度地開發(fā)利用SDK 提供的系統(tǒng)函數(shù) , 因此選擇 VS2021 作為 IDE 來進行此次開發(fā)。相對以前的編程語言來說, C++語言在效率與安全性上得了很大的改善,并且支持現(xiàn)有的網(wǎng)絡編程新標準,它使程序員快速便捷地創(chuàng)建基于 MFC 平臺的解決方案 快速投入網(wǎng)絡開發(fā),于是筆者選擇 Visual C++語言來進行此次開發(fā)。 語音連接模塊實現(xiàn) 主要數(shù)據(jù)結構 在功能模塊總體設計中,已經(jīng)具體表明了此模塊由三部分組成:建立連接、音頻獲取、音頻回放 。當用戶輸入 IP 地址并按下連接鍵后,語音軟件將打開麥克風,首先進行初始化等一系列工作 ,同時向基于 IP的 語音通信 22 被請求方發(fā)送是否愿意接受語音通信的請求信息,并等待對方的請求處理,并完成初始化套接字等一系列準備工作。 其中關于套接字的主要數(shù)據(jù)結構代碼如下: 1. sockaddr_in 結構 ,用做 bind,connect,recvfrom,sendto 等函數(shù)的參數(shù),指明地址信息。 typedef struct sockaddr_in { if(_WIN32_WINNT 0x0600) else ADDRESS_FAMILY sin_family endif USHORT sin_port。 IN_ADDR sin_addr。 CHAR sin_zero[8]。 } SOCKADDR_IN, *PSOCKADDR_IN。 2. Hostent 結構,該結構用于記錄主機的信息,包括主機名、別名、地址類型、地址長度和地址列表。 struct hostent { char FAR * h_name。 char FAR * FAR * h_aliases。 short h_addrtype。 short h_length。 char FAR * FAR * h_addr_list。 define h_addr h_addr_list[0] }。 3. _NETWORK_ADDRESS_IP 結構 體將網(wǎng)絡地址轉換為 IP 地址,其結構體代碼如下: typedef struct _NETWORK_ADDRESS_IP { USHORT sin_port。 ULONG in_addr。 UCHAR sin_zero[8]。 } NETWORK_ADDRESS_IP, *PNETWORK_ADDRESS_IP。 主要算法實現(xiàn) 1. 實現(xiàn)連接 函數(shù) Connect 主要向被請求 方 發(fā)送語音請求消息,并試圖建立連基于 IP的 語音通信 23 接,在獲得對方同意后將語音通信雙方連接起來,如果 被請求方拒接則此函數(shù)返回連接失敗的消息,提請請求方顯示。函數(shù)功能實現(xiàn) 代碼如下: int i=GetLocalIP(amp。ip,1)。 in_addr t。 =ip。 if(i!=0) str=i_ntoa(t)。 wsprintf(chQuery,PHONE %s,str)。 =AF_INET。 =htons(RECEIVEPORT)。 =m_RemoteIP。 int iError=sendto(m_sSend,chQuery,sizeof(chQuery),0, (LPSOCKADDR)amp。to,sizeof(to))。 語音采集模塊實現(xiàn) 主要數(shù)據(jù)結構 1. wavehdr_tag 結構, 此結構主要定義了波形數(shù)據(jù)緩沖區(qū)的設備頭,其結構定義代碼如下: typedef struct wavehdr_tag { LPSTR lpData。 DWORD dwBufferLength。 DWORD dwBytesRecorded。 DWORD_PTR dwUser。 DWORD dwFlags。 DWORD dwLoops。 struct wavehdr_tag FAR *lpNext。 DWORD_PTR reserved。 } WAVEHDR, *PWAVEHDR, NEAR *NPWAVEHDR, FAR *LPWAVEHDR。 2. tWAVEFORMATEX 結構 主要為波形音頻流格式的數(shù)據(jù)結構,該結 構中的 wFormatTag 參數(shù)作為設置波形聲音格式,參數(shù) nChannels作為設置聲道格式, nSamplesPerSec 參數(shù)作為設置每個聲道播放和記錄時的樣本頻率,參數(shù) nAvgBytesPerSec 參數(shù)用于設置請求的平均數(shù)據(jù)傳輸率,參數(shù) nBlockAlign 以字節(jié)為單位設置塊對齊,參數(shù)基于 IP的 語音通信 24 wBitsPerSample 根據(jù) wFormatTag 的類型設置每個樣本的位深(即每次采樣樣本的大小,以 bit 為單位) 。 typedef struct tWAVEFORMATEX { WORD wFormatTag。 WORD nChannels。 DWORD nSamplesPerSec。 DWORD nAvgBytesPerSec。 WORD nBlockAlign。 WORD wBitsPerSample。 WORD cbSize。 }WAVEFORMATEX,*PWAVEFORMATEX,NEAR *NPWAVEFORMATEX, FAR *LPWAVEFORMATEX。 主要算法實現(xiàn) 1. 參數(shù)初始化 初始化音頻格式 函數(shù) WaveInitFormat 主要做語音處理的初始化工作,包括設置采樣率,波形格式,聲道方式選擇等選項,具體設置如下功能代碼 代碼: = WAVE_FORMAT_PCM。 = nCh。 = nSampleRate。 =nSampleRate*nCh*BitsPerSample/8。 =*BitsPerSample/8。 = BitsPerSample。 = 0。 2. 采集過程 OpenMic 函數(shù)作為 采集過程 中重要的一環(huán)擔負著許多音頻設置工作,主要包括緩沖區(qū)的設置、分配、音頻設備性能測試、開啟麥克等一系列的函數(shù)調(diào)用,是決定音頻質量,語音速率的關鍵,為后面的語音壓縮做準備 ,其主要代碼如下: m_WaveHeader=(WAVEHDR*)malloc(m_nBlockNum*sizeof(WAVEHDR))。 int n=(int)m_nBits/8。 m_pInputBuffer=(char*)malloc(n*m_nBlockNum*m_nBlock)。 基于 IP的 語音通信 25 m_cpSendSetWaveFormat(1,m_WaveInSampleRate, m_nBits)。 m_cpSendSetSrcSamples(m_nBlock, (unsigned char*)m_pInputBuffer)。 m_cpSendInitialize()。 m_cpSendPrepareSpace(TRUE)。 MMRESULT result。 result=waveInGetNumDevs()。 語音壓縮模塊實現(xiàn) 主要數(shù)據(jù)結構 1. 查找驅動信息結構體 是自定義數(shù)據(jù)結構,其中兩個重要的成員變量 HACMDRIVERID hadid 和 WORD wFormatTag 分別用于保存ACM 驅動號的句柄和要轉換的數(shù)據(jù)格式,實現(xiàn)代碼如下: typedef struct { HACMDRIVERID hadid。 WORD wFormatTag。 unsigned short nBits。 unsigned long lSampleRate。 } FIND_DRIVER_INFO。 2. tACMFORMATDETAILSA 結構主要實現(xiàn) 對查詢到的波形音頻詳細格式標記,其結構代碼如下: typedef struct tACMFORMATDETAILSA { DWORD cbStruct。 DWORD dwFormatIndex。 DWORD dwFormatTag。 DWORD fdwSupport。 LPWAVEFORMATEX pwfx。 DWORD cbwfx。 char szFormat[ACMFORMATDETAILS_FORMAT_CHARS]。 } ACMFORMATDETAILSA, *PACMFORMATDETAILSA, FAR *LPACMFORMATDETAILSA。 3. tACMSTREAMHEADER 結構定義了一對用來標示 ACM 轉換基于 IP的 語音通信 26 源和目的緩沖區(qū)的轉換流,參數(shù) cbStruct 在應用程序啟動以前必須初始化,這個成員指定的大小必須大到足以包含基本的ACMSTREAMHEADER 結構,相應代碼如下: typedef struct tACMSTREAMHEADER { DWORD cbStruct。 DWORD fdwStatus。 DWORD_PTR dwUser。 LPBYTE pbSrc。 DWORD cbSrcLength。 DWORD cbSrcLengthUsed。 DWORD_PTR dwSrcUser。 LPBYTE pbDst。 DWORD cbDstLength。 DWORD cbDstLengthUsed。 DWORD_PTR dwDstUser。 DWORD dwReservedDriver[_DRVRESERVED]。 }ACMSTREAMHEADER,*PACMSTREAMHEADER, FAR *LPACMSTREAMHEADER。 主要實現(xiàn)算法 1. 初始化音頻設備 Initialize()函數(shù)主要做壓縮前的初始化工作 , 用于搜索音頻壓縮驅動程序,并查找選擇的驅動是否存在,這是音頻壓縮的起點, 功能實現(xiàn) 如下: hadid = FindDriver(wFormatTag)。 ACMDRIVERDETAILS dd。 = sizeof(dd)。 MMRESULT mmr = acmDriverDetails(hadid, amp。dd, 0)。 pwfDrv = GetDriverF
點擊復制文檔內(nèi)容
試題試卷相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1