Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将声音从服务器传输到客户端?_C#_Sockets_Network Programming_Udp_Client Server - Fatal编程技术网

C# 如何将声音从服务器传输到客户端?

C# 如何将声音从服务器传输到客户端?,c#,sockets,network-programming,udp,client-server,C#,Sockets,Network Programming,Udp,Client Server,我不明白是什么问题 有一个服务器正在接受来自客户端的数据并发回。客户端发送从麦克风录制的声音,从服务器接收声音时播放。 由于某些原因,如果缓冲区超过47毫秒,客户端不希望从服务器接收数据。但是,即使缓冲区保存45毫秒的声音,也不会播放从服务器接收的声音。如果您制作了一个缓冲区,例如30毫秒,那么从服务器接收的音频将是可播放的,但它将是错误的(您只听到敲门声)。 一些超自然现象 using NAudio.Wave; using System.Net.Sockets; class Program {

我不明白是什么问题

有一个服务器正在接受来自客户端的数据并发回。客户端发送从麦克风录制的声音,从服务器接收声音时播放。 由于某些原因,如果缓冲区超过47毫秒,客户端不希望从服务器接收数据。但是,即使缓冲区保存45毫秒的声音,也不会播放从服务器接收的声音。如果您制作了一个缓冲区,例如30毫秒,那么从服务器接收的音频将是可播放的,但它将是错误的(您只听到敲门声)。 一些超自然现象

using NAudio.Wave;
using System.Net.Sockets;
class Program
{
 private void Main()
 {
  Recorder rec = new Recorder();
  Console.ReadKey();
 }
}
    class Recorder
        {
            UdpClient client = new UdpClient(755);
            WaveInEvent wave = new WaveInEvent();
            public Recorder()
            {
                Thread play = new Thread(new ThreadStart(Play));
                play.Start();
                wave.BufferMilliseconds = 100;
                wave.DeviceNumber = 0;
                wave.WaveFormat = new WaveFormat(8000, 16, 2);
                wave.DataAvailable += Wave_DataAvailable;
                wave.StartRecording();
            }
            private void Play()
            {
                WaveOutEvent output = new WaveOutEvent();
                BufferedWaveProvider buffer = new BufferedWaveProvider(new WaveFormat(8000, 16, 2));
                output.Init(buffer);
                output.Play();
                for(;;)
                {
                    IPEndPoint remoteEP = null;
                    byte[] data = client.Receive(ref remoteEP);
                    buffer.AddSamples(data, 0, data.Length);
                }
            }
            private void Wave_DataAvailable(object sender, WaveInEventArgs e)
            {
                client.Send(e.Buffer, e.BytesRecorded, "46.174.49.51", 54321);
            }
        }
为了让您确信服务器确实会将数据发送回客户端,下面是代码:

UdpClient client = new UdpClient(755);
byte[] sdata = Encoding.UTF8.GetBytes("Test");
client.Send(sdata, sdata.Length, "46.174.49.51", 54321);
IPEndPoint remoteEP = null;
byte[] rdata = client.Receive(ref remoteEP);
Console.WriteLine(Encoding.UTF8.GetString(rdata) + " from " + remoteEP.Port);
Console.ReadLine();

UDP数据包不保证按顺序到达。所以你可以听到一些超自然的声音,但理论上听不到那么多。UDP语音聊天在游戏中得到了很好的实现。可能与