摘 要 本文讲述了利用计算机进行声音录制和播放技术,以及数据在网络上传输的方法,并结合实例设计了一个网络语音通讯程序。 关键字 网络通讯,声音录制,声音播放,GSM610语音压缩 网络语音通讯是一项很实用的技术,由于这方面的资料较少,所以本文将结合程序对此作详细介绍,要实现网络语音通讯,必须搞清楚以下几个问题以及相应的编程方法:1.电脑如何录音;2.电脑如何播放声音;3.电脑之间如何进行数据传输;4.声音数据如何压缩与解压。
- 电脑录音的原理
电脑依靠声卡来处理声音,Windows把声卡看作是录音和放音设备的组合体,录音时首先要准备一个录音队列,队列中包含录音的基本参数,比如录音数据缓冲区的地址,缓冲区的大小等,为了使录音过程平滑的进行,队列中至少包含两个以上数据缓冲区,当一个缓冲区录完后,Windows系统会给应用程序发送一个录音结束的消息,并自动开始转入下一个缓冲区进行录音,应用程序收到该消息后应该释放含有录音数据的队列,并取出该队列所指向的缓冲区的声音数据,然后将该缓冲区再次加入录音队列,以便继续进行录音。Windows就是这样利用这些数据缓冲区进行周而复始的录入工作。使用到的函数说明如下: waveInOpen() 打开录音设备 waveInPrepareHeader()准备录音缓冲区 waveInAddBuffer()将缓冲区加入录音队列 waveInStart()开始录音 waveInUnprepareHeader()从录音队列中释放缓冲区 waveInReset()复位录音设备 waveInClose()关闭录音设备
- 电脑播放声音的原理
同样的道理放音时也有放音队列和放音数据缓冲区,当用户需要播放声音时,先把声音数据放入数据缓冲区,然后将缓冲区加入放音队列,并向放音设备发送写数据命令,声卡就可以播放缓冲区中的声音了。缓冲区中数据播放完成后系统会向应用程序发送放音完成的消息,应用程序可以重复前面的工作,先释放完成的队列,然后向缓冲区加入新的声音数据,并再次将该缓冲区加入放音队列,让该队列继续工作。 waveOutOpen()打开放音设备 waveOutStart()开始放音 waveOutPrepareHeader()准备放音缓冲区 waveOutWrite()将数据写到放音设备上 waveOutUnprepareHeader()从放音队列中释放缓冲区 waveOutReset()复位放音设备 waveOutClose()关闭放音设备
...................................................(作者:倪建华)
...
|