鉴于大家对VC与C++类别十分关注,我们编辑小组在此为大家搜集整理了“VC++语音聊天系统的设计”一文,供大家参考学习!
客服咨询,网学网竭诚为您服务,本站永久域名:myeducs.cn |
1 语音传输系统功能实现 本系统以语音聊天为例给出了应用实例。 1.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_pWaveHdrIn[0].lpData=m_cBufferIn; m_pWaveHdrIn[0].dwBufferLength=MAX_BUFFER_SIZE; m_pWaveHdrIn[0].dwBytesRecorded=0; m_pWaveHdrIn[0].dwFlags=0; 为了能够进行录制和播放,还需要利用低级音频函数——wave系列函数。对于播放过程,需要利用waveOutPrepareHeader函数准备缓冲数据头信息,然后调用函数waveOutWrite将音频数据缓冲区中的数据写到播放设备中去进行播放。对于录制过程,需要先调用waveInPrepareHeader进行接收数据缓冲区的准备工作,然后调用waveInAddBuffer函数添加录制数据缓冲区,最后调用函数waveInStart进行录制。下边将列出这些函数在源程序中的应用: result=waveOutPrepareHeader(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR)); if (result!= MMSYSERR_NOERROR) { AfxMessageBox(_T("Cannot OutPrepareHeader !")); return; }; If以后为信息出错警告,以下函数省略。 result=waveOutWrite(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR)); result=waveInPrepareHeader(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR)); result=waveInAddBuffer(m_hWaveIn,&m_pWaveHdrIn[0],sizeof(WAVEHDR)); void CSound::Record() { waveInStart(m_hWaveIn);//开始录音 } 1.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 以上为部分功能实现。其他实现详见源文件。 2 系统功能的测试与分析 2.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)服务器如果关闭那么客户端将自动断开。 |
本站发布的计算机毕业设计均是完整无错的全套作品,包含开题报告+程序+论文+源代码+翻译+答辩稿PPT |
本文选自计算机毕业设计http://myeducs.cn |