Mengirim file .Wav melalui jaringan menggunakan NAudio

Saya bekerja dengan NAudio untuk mengirim file audio .wav tepatnya dari satu komputer ke komputer lainnya.

Saya telah mencoba mengirim pesan melalui aliran jaringan tetapi saya tidak dapat memeriksa apakah pesan telah terkirim dengan benar atau tidak karena sejauh ini saya mengalami masalah dalam menerima kode.

Ini kode pengirimannya.

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();
    }

dan ini kode penerimanya

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);
    }

Sekarang saya mengalami kesulitan untuk melanjutkan penerimaan kode karena jika saya memanggil metode read dari read maka ia meminta array byte, offset dan panjang. Tetapi mengapa ia meminta sebuah array berada di luar jangkauan saya, karena ia hanya menerima data.

Ada saran tentang bagaimana saya harus melanjutkan lebih jauh dengan metode ReadFile.

MEMPERBARUI---

Selama Debugging saya menemukan bahwa NetworkStream yang diteruskan ke SendFile untuk digunakan di WaveFileWriter belum menentukan panjangnya sehingga memberikan Stream Does not Support Seek Operations. Namun saya tidak mengerti mengapa ia memberikan kesalahan ini karena prototipenya mengatakan ia dapat menerima Aliran apa pun.


person Win Coder    schedule 04.07.2013    source sumber


Jawaban (1)


Anda tidak dapat menggunakan WaveFileWriter dengan NetworkStream, karena header file WAV berisi informasi panjang yang tidak diketahui hingga seluruh file telah ditulis. Jadi headernya ditulis terakhir, membutuhkan aliran yang bisa dicari.

Daripada melakukan streaming file WAV, cukup kirimkan audio PCM (dan format informasi terlebih dahulu jika Anda perlu) dan masukkan ke dalam file WAV di ujung lainnya.

person Mark Heath    schedule 04.07.2013
comment
Sekarang saya menyadari judul pertanyaan saya agak menyesatkan karena saya tidak mengirim file .wav melalui networkstream. Sebaliknya StreamToSend di SendFile hanyalah aliran lain yang saya peroleh setelah tutorial ini. - person Win Coder; 04.07.2013
comment
Jika Anda sudah mendapatkan fike WAV, kirimkan saja melalui NetworkStream. Tidak perlu melibatkan WaveFileWriter sama sekali. - person Mark Heath; 05.07.2013
comment
Hai @MarkHeath Bisakah Anda memberi kami contoh cara mengirim data melalui jaringan yang ditangkap oleh WasapiLoopbackCapture? Bagaimana cara mengirim audio PCM? Terima kasih! - person Fernando Pelliccioni; 26.12.2013