在Visual C++下用DirectSound实现音频组播时,声音有1秒多的延迟,如何解决?

解决方案 »

  1.   

    buffer的大小
    buffer能触发的事件数再说具体点
      

  2.   

    我是directsound实现声音的捕捉和播放,buffer大小为44200,其他参数设置请看下面代码:
    pcmwf.wFormatTag=WAVE_FORMAT_PCM;
    pcmwf.nChannels=2;
    pcmwf.nSamplesPerSec=22050;
    pcmwf.wBitsPerSample=16;
    pcmwf.nBlockAlign=pcmwf.wBitsPerSample/8*pcmwf.nChannels;
    pcmwf.nAvgBytesPerSec=pcmwf.nSamplesPerSec*pcmwf.nBlockAlign;
    谢谢!
      

  3.   

    整个buffer中设了几个触发事件点?
      

  4.   

    to : ericzhangali(卖女孩的小火柴——五毛钱俩一块钱不卖) ,buffer设了几个触发事件点是什么意思?不好意思。。
      

  5.   

    你是用所谓的乒乓buffer吗?
      

  6.   

    什么叫乒乓buffer啊?我用的数据结构如下:
    typedef struct {
        char m_hostname[255];   //用户名
        char m_strBuffer[44100];//声音数据
        int iTalk; //发言标志位,0不许发言,1允许
        int iInfo;             //信息标志位,0普通信息,1申请信息
    }Data;
      

  7.   

    DSound你可以循环使用缓冲呀,把NotifyEvent的buffersize设到最小(好像是512),不过整个buffersize设置大一点,然后根据你的数据抖动值来调整你的buffer策略,这应该是最佳的方法了,不过说白了,你最好的提高方法是提高采样频率呵呵
      

  8.   

    oeichenwei(合理性) 能说得具体一些吗?数据结构在上面,下面是声音参数 设置的,你看该如何改?
    pcmwf.wFormatTag=WAVE_FORMAT_PCM;
    pcmwf.nChannels=2;
    pcmwf.nSamplesPerSec=22050;
    pcmwf.wBitsPerSample=16;
    pcmwf.nBlockAlign=pcmwf.wBitsPerSample/8*pcmwf.nChannels;
    pcmwf.nAvgBytesPerSec=pcmwf.nSamplesPerSec*pcmwf.nBlockAlign;
      

  9.   

    使用ADPCM压缩后传送,接收端解压播放可能会好一些
      

  10.   

    天哪,你使用的22k的16位采样频率还会有那么大的延时?那你好好调整你的缓存策略吧,用ericzhangali(卖女孩的小火柴——五毛钱俩一块钱不卖) 说的pingpang缓冲机制会好的……
      

  11.   

    楼上的,所谓pingpang缓冲机制是什么意思?能否给出具体代码?本人不胜感激。。
      

  12.   

    谁有代码,发给我一份啊。[email protected]。多谢了。
      

  13.   

    当一个BUFFER播放的时候,其它BUFFER正在录音,并对其BUFFER加以先后录音标志,五六个就可以,这样可以实现实时
      

  14.   

    你的buffer size开的太大了.
      

  15.   

    flyVBC(刘毅) ,能否给段代码说明一下?[email protected]。。先谢了。