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

时间:2013-07-04 15:23:53

标签: c# .net audio naudio

我正在与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);
    }

现在我无法继续接收代码,因为如果我调用read read方法,那么它会询问字节数组,偏移量和长度。但是,为什么它要求一个数组在我接收数据之后就超出了我的范围。

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

UPDATE ---

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

1 个答案:

答案 0 :(得分:1)

您不能将WaveFileWriter与NetworkStream一起使用,因为WAV文件头包含在写入整个文件之前不知道的长度信息。因此标题最后写入,需要可搜索的流。

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