使用C#实现通过网络发送和播放麦克风的声音

文档及代码下载: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 - 返回所有能获取到声音数据的可用输入设备。

  1. /// <summary>  
  2. /// Application main class.  
  3. /// </summary>  
  4. public class Test{  
  5.     private WavIn m_pSoundReceiver = null;  
  6.     /// <summary>  
  7.     /// Default constructor.  
  8.     /// </summary>  
  9.     public Test(){  
  10.         // G711 needs 8KHZ 16 bit 1 channel audio,  
  11.         // 400kb buffer gives us 25ms audio frame.  
  12.         m_pSoundReceiver = new WavIn(WavIn.Devices[0],8000,16,1,400);  
  13.         m_pSoundReceiver.BufferFull += new BufferFullHandler(m_pSoundReceiver_BufferFull);  
  14.         m_pSoundReceiver.Start();  
  15.     }  
  16.     /// <summary>  
  17.     /// This method is called when recording buffer is full  
  18.     /// and we need to process it.  
  19.     /// </summary>  
  20.     /// <param name="buffer">Recorded data.</param>  
  21.     private void m_pSoundReceiver_BufferFull(byte[] buffer){  
  22.         // Just store audio data or stream it over the network ...  
  23.      }  
  24. }  
WaveOut - 提供播放流媒体数据的方法。  
你仅仅需要做的事调用 waveoutInstance.Play 方法。

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

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页