C#基于UDP实现的P2P语音聊天工具

2019-12-30 10:57:56王冬梅

这篇文章主要是一个应用,使用udp传送语音和文本等信息。在这个系统中没有服务端和客户端,相互通讯都是直接相互联系的,能够很好的实现效果。

语音获取

要想发送语音信息,首先得获取语音,这里有几种方法,一种是使用DirectX的DirectXsound来录音,我为了简便使用一个开源的插件NAudio来实现语音录取。 在项目中引用NAudio.dll

 

 
  1. //------------------录音相关-----------------------------   private IWaveIn waveIn;  
  2. private WaveFileWriter writer;    
  3. private void LoadWasapiDevicesCombo()   {  
  4. var deviceEnum = new MMDeviceEnumerator();   var devices = deviceEnum.EnumerateAudioEndPoints(DataFlow.Capture, DeviceState.Active).ToList();  
  5. comboBox1.DataSource = devices;   comboBox1.DisplayMember = "FriendlyName";  
  6. }   private void CreateWaveInDevice()  
  7. {    
  8. waveIn = new WaveIn();   waveIn.WaveFormat = new WaveFormat(8000, 1);  
  9. waveIn.DataAvailable += OnDataAvailable;   waveIn.RecordingStopped += OnRecordingStopped;  
  10. }   void OnDataAvailable(object sender, WaveInEventArgs e)  
  11. {   if (this.InvokeRequired)  
  12. {   this.BeginInvoke(new EventHandler<WaveInEventArgs>(OnDataAvailable), sender, e);  
  13. }   else 
  14. {   writer.Write(e.Buffer, 0, e.BytesRecorded);  
  15. int secondsRecorded = (int)(writer.Length / writer.WaveFormat.AverageBytesPerSecond);   if (secondsRecorded >= 10)//最大10s  
  16. {   StopRecord();  
  17. }   else 
  18. {   l_sound.Text = secondsRecorded + " s";  
  19. }   }  
  20. }   void OnRecordingStopped(object sender, StoppedEventArgs e)  
  21. {   if (InvokeRequired)  
  22. {   BeginInvoke(new EventHandler<StoppedEventArgs>(OnRecordingStopped), sender, e);