我正在与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。
答案 0 :(得分:1)
您不能将WaveFileWriter与NetworkStream一起使用,因为WAV文件头包含在写入整个文件之前不知道的长度信息。因此标题最后写入,需要可搜索的流。
不是流式播放WAV文件,只需发送PCM音频(如果需要,先发送格式信息),然后将其放入另一端的WAV文件中。