การส่งไฟล์ .Wav ผ่านเครือข่ายโดยใช้ 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 อย่างไร

อัปเดต---

ในระหว่างการดีบัก ฉันพบว่า NetworkStream ที่ถูกส่งผ่านไปยัง SendFile เพื่อใช้ใน WaveFileWriter ไม่ได้กำหนดความยาว ดังนั้นจึงให้ Stream Does not Support Seek Operations อย่างไรก็ตาม ฉันไม่เข้าใจว่าทำไมมันถึงแสดงข้อผิดพลาดนี้ เนื่องจากต้นแบบบอกว่าสามารถยอมรับสตรีมใดๆ ได้


person Win Coder    schedule 04.07.2013    source แหล่งที่มา


คำตอบ (1)


คุณไม่สามารถใช้ WaveFileWriter กับ NetworkStream ได้ เนื่องจากส่วนหัวของไฟล์ WAV มีข้อมูลความยาวที่ไม่ทราบจนกว่าจะเขียนไฟล์ทั้งหมดแล้ว ดังนั้นส่วนหัวจึงเขียนเป็นลำดับสุดท้าย โดยต้องมีสตรีมที่ค้นหาได้

แทนที่จะสตรีมไฟล์ WAV เพียงส่งเสียง PCM (และจัดรูปแบบข้อมูลก่อนหากต้องการ) แล้วใส่ลงในไฟล์ WAV ที่ปลายอีกด้านหนึ่ง

person Mark Heath    schedule 04.07.2013
comment
ตอนนี้ฉันสังเกตเห็นว่าชื่อคำถามของฉันทำให้เข้าใจผิดเล็กน้อย เนื่องจากฉันไม่ได้ส่งไฟล์ .wav ผ่าน networkstream อย่างแน่นอน แต่ StreamToSend ใน SendFile เป็นเพียงสตรีมอื่นที่ฉันได้รับหลังจาก บทช่วยสอนนี้ - person Win Coder; 04.07.2013
comment
หากคุณมีไฟล์ WAV แล้ว เพียงส่งผ่าน NetworkStream ไม่จำเป็นต้องเกี่ยวข้องกับ WaveFileWriter เลย - person Mark Heath; 05.07.2013
comment
สวัสดี @MarkHeath คุณช่วยยกตัวอย่างวิธีการส่งข้อมูลผ่านเครือข่ายที่ WasapiLoopbackCapture จับได้หรือไม่ ฉันจะส่งเสียง PCM ได้อย่างไร ขอบคุณ! - person Fernando Pelliccioni; 26.12.2013