想用Socket传输wav文件,但是转换成netStream的时候说文件头已经被破坏~~
 高手给一段转换的代码吧~~其实意思就很简单,就是把wav文件准确的转换成二进制文件.

解决方案 »

  1.   

    用 FileStream 有问题吗?
      

  2.   

    用FileStream可以得到一个Stream对象,但是这个Stream对象我又怎么去跟我的NetworkStream关联起来呢?我的NetworkStream是这样构造的:NetworkStream netStream = new NetworkStream(accsock);  所以我是把得到的那个Stream转换成sendbyte,然后这样写到NetworkStream里:netstream.Write(sendbyte, 0, sendbyte.Length);可是这样在用SoundPlay播放的时候就不能播放了.
      

  3.   

    FileStream fs=File.OpenRead(@"E:\....wav");
    byte[] content=new byte[fs.Length];
    fs.Read(content, 0,content.Length);
    fs.Close();
    然后把此byte[]  content发送出去就是了!
      

  4.   

    这样的转换在播放的时候会报错:"波形头已经破坏"
    我写了一段这样的事例代码:
     FileStream fs = File.OpenRead("E:\\SoundTest.wav");
     Byte[] send = new byte[1024];
     fs.Read(send, 0, send.Length);
     SoundPlayer sp = new SoundPlayer();
     sp.Stream = (Stream)fs;
     sp.Play();
    这样的话会报上面的错,但是把fs.Read(send, 0, send.Length)这一句去掉,就运行正常了~
    是不是wav有些特殊的格式呀?
      

  5.   

    wt3056() ( ) 信誉:100    Blog  2006-12-30 11:22:49  得分: 0  
     
     
       这样的转换在播放的时候会报错:"波形头已经破坏"
    我写了一段这样的事例代码:
     FileStream fs = File.OpenRead("E:\\SoundTest.wav");
     Byte[] send = new byte[1024];
     fs.Read(send, 0, send.Length);
     SoundPlayer sp = new SoundPlayer();
     sp.Stream = (Stream)fs;
     sp.Play();
    这样的话会报上面的错,但是把fs.Read(send, 0, send.Length)这一句去掉,就运行正常了~
    是不是wav有些特殊的格式呀?
    --------------------------
    因为你sp的参数是文件流,你fs.Read就改变了数据流,数据流的内容都跑到send里去了,你再播放此流当然是空的了!
      wav用socket一样传送,没有区别!
     
      

  6.   

    你说的"wav用socket一样传送"还是用NetworkStream,这样
    NetworkStream netstream = new NetworkStream(accsock);
    netstream.Write(sendbyte, 0, sendbyte.Length);的传吗?我昨天试过,还是不好使的~
      

  7.   

    Socket socket=listener.AcceptSocket();
    int length=0;
    while(sendbyte.Length-length>=10240)
    {

    socket.Send(sendbyte,length,10240,SocketFlags.None);
    length+=10240;
    }
    socket.Send(sendbyte,length,sendbyte.Length-length,SocketFlags.None);
    给你部分代码
      

  8.   

    那我在接收段接受到的是一个二进制数组,转换成给SoundPlay播放的Stream又是不能播放的呀~
      

  9.   

    byte[] content=new byte[10240];
    FileStream fw=new FileStream(("E:\\SoundTest.wav");,FileMode.OpenOrCreate,FileAccess.ReadWrite);
    while(Alllength>0)  //Alllength是此Wav文件总长度
    {
    int i=socket.Receive(content,0);
    fw.Write(content,0,i);
    Alllength-=i;
    }
    fw.Flush();
    fw.Close();
    sp.Stream = (Stream)fw;
    sp.Play();我基本已经给你把代码写完了!
      

  10.   

    Alllength是此Wav文件总长度,此长度预先传递过来,
    可用StreamReader,StreamWriter传递简单命令,包括比如你要传的文件长度等
    NetworkStream ns=new NetworkStream(socket);
    StreamReader reader=new StreamReader(ns);
    StreamWriter writer=new StreamWriter(ns);
    嘿嘿,楼主免费用工!
      

  11.   

    fw.Flush();
    sp.Stream = (Stream)fw;
    sp.Play();
    fw.Close();