2013-07-04 70 views
0

我正在使用NAudio將音頻文件.wav從一臺電腦發送到另一臺電腦。使用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方法的任何建議。

UPDATE ---

調試過程中,我發現,這是傳遞給SENDFILE用於WaveFileWriter的Ne​​tworkStream尚未確定長度,所以它給人的Stream Does not Support Seek Operations。不過,我不明白爲什麼它會給出這個錯誤,因爲它的原型說它可以接受任何流。

回答

1

您不能將WaveFileWriter與NetworkStream一起使用,因爲WAV文件頭包含的長度信息在整個文件寫入之前是未知的。所以頭文件是最後寫的,需要一個可查找的流。

而不是流式傳輸WAV文件,只需發送PCM音頻(並根據需要先發送格式信息)並將其放入另一端的WAV文件中。

+0

現在,我注意到我的問題標題有點誤導,因爲我不是完全通過網絡流發送.wav文件。相反,SendFile中的StreamToSend只是我在[This](http://opensebj.blogspot.com/2009/02/introduction-to-using-naudio.html)教程中獲得的另一個流。 –

+0

如果你已經有了一個WAV,可以通過NetworkStream發送。根本不需要涉及WaveFileWriter。 –

+0

Hi @MarkHeath您可以舉一個如何通過WasapiLoopbackCapture捕獲的網絡發送數據的例子嗎? 如何發送PCM音頻?謝謝! –