通过网络发送和播放麦克风的声音

文档及代码下载:http://www.dingos.cn/index.php?topic=362.0



介绍

这个例子主要告诉你如何获取麦克风的声音且通过UDP方式传送给另外的计算机。加入双方都能播放声音且把麦克风的声音传送给对方,这个程序可当作一个P2P的电话。源码将通过文件的方式发布在网站上,附件中还有第二个程序,此程序主要包括一个能发送/接收/压缩语音成g711编码的UDP服务端。仅仅通过UDP方式来传送语音并不是一个很好的方案,RTP才是正确的传送方法。RTP在传输语音的过程中增加了质监服务,你能看到在传输过程中丢失了多少包和有多少包乱序了。

package含有:

LumiSoft.Media - Audio相关API (包含在例子程序中)
LumiSoft.Net - UDP服务器, G711编码

 

代码使用

WaveIn - 提供一个简单的从麦克风获取声音方法的类。
实际上你仅仅需要做的事:
WavIn.Devices - 返回所有能获取到声音数据的可用输入设备。

/// /// Application main class. /// public class Test{ private WavIn m_pSoundReceiver = null; /// /// Default constructor. /// public Test(){ // G711 needs 8KHZ 16 bit 1 channel audio, // 400kb buffer gives us 25ms audio frame. m_pSoundReceiver = new WavIn(WavIn.Devices[0],8000,16,1,400); m_pSoundReceiver.BufferFull += new BufferFullHandler(m_pSoundReceiver_BufferFull); m_pSoundReceiver.Start(); } /// /// This method is called when recording buffer is full /// and we need to process it. /// /// Recorded data. private void m_pSoundReceiver_BufferFull(byte[] buffer){ // Just store audio data or stream it over the network ... } }

WaveOut - 提供播放流媒体数据的方法。
你仅仅需要做的事调用 waveoutInstance.Play 方法。

注意:声音质量依赖于网络延时,假如网络延时很大,声音将变差。另外, 丢包和乱序也会影响声音质量。

你可能感兴趣的:(C#.Net学习,学习实践)