使用NAudio通过网络发送.Wav文件

本文关键字:Wav 文件 网络 NAudio 使用 | 更新日期: 2023-09-27 18:20:57

我正在与NAudio合作,将音频文件.wav从一台电脑发送到另一台电脑。

我已经尝试通过网络流发送消息,但我无法检查消息是否发送正确,因为到目前为止,我在接收代码时遇到了问题。

这是发送代码。

public void StartConnection()
    {
        _connection = new TcpClient("localhost",1111);
        _stream = _connection.GetStream();
        SendFile(_stream,_waveStream);
    }
public void SendFile(NetworkStream StreamToWrite,WaveStream StreamToSend)
    {
        WaveFileWriter write = new WaveFileWriter(StreamToWrite,StreamToSend.WaveFormat);
        byte[] decoded = FromStreamToByte(StreamToSend);
        write.Write(decoded,0,decoded.Length);
        write.Flush();
    }

这是接收代码

public void ListenConnection()
    {
        _listener = new TcpListener(IPAddress.Any,1111);
        _listener.Start();
        TcpClient receiver = _listener.AcceptTcpClient();
        _stream = receiver.GetStream();
    }
public void ReadFile(NetworkStream stream)
    {
        WaveFileReader read = new WaveFileReader(stream);
    }

现在我在哪里继续接收代码时遇到了问题,因为如果我调用readread方法,那么它会要求字节数组、偏移量和长度。但它为什么要求一个数组,我无法理解,毕竟它只是在接收数据。

关于如何进一步使用ReadFile方法的任何建议。

更新---

在调试过程中,我发现传递给SendFile以在WaveFileWriter中使用的NetworkStream没有确定长度,因此它给出了Stream Does not Support Seek Operations。然而,我不明白为什么它会给出这个错误,因为它的原型说它可以接受任何Stream。

使用NAudio通过网络发送.Wav文件

不能将WaveFileWriter与NetworkStream一起使用,因为WAV文件头包含的长度信息在写入整个文件之前是未知的。所以头写在最后,需要一个可查找的流。

不需要流式传输WAV文件,只需发送PCM音频(如果需要,请先格式化信息),然后将其放入另一端的WAV文件中。