初学VC网络编程,最近看一个例子看的有点不明白
void CSound::Init()
{
//初始化音频输入输出设备
  ...........................
 waveOutWrite(m_hWaveOut,&m_pWaveHdrOut[0],sizeof(WAVEHDR));
}//播放本地的录音实际上就是将m_cBufferIn的内容拷贝到m_cBufferOut中(就是对这句话不明白)
void CSound::Play()
{
  memcpy(m_cBufferOut,m_cBufferIn,MAX_BUFFER_SIZE);
}播放声音是不是通过waveOutWrite()实现的?这个函数是不是只要调用一次它的管理权是不是就交给了 系统负责,只要调用一次它就会不断的读取m_cBufferOut中的内容,我们要做的工作只是把m_cBufferIn的内容拷贝到m_cBufferOut中?

解决方案 »

  1.   

    不光是这两个函数,还有callback部分。
      

  2.   

    要一直调用
    waveOutWrite (hWaveOut, pWaveHdrOut[nIn], sizeof (WAVEHDR)) ;
      

  3.   

    楼主要是公司的话,可考虑商业的SDK包:http://www.anychat.cn
      

  4.   

    理论上是这样的,实际上用DSOUND 上层调用。
    采集 然后用gips 或者 speex压缩 传输 也叫编码
    另外一端解码 接收端要有一个 jitter buffer也叫抖动buffer.
    这个buffer会带来声音的一些延迟,不过会让声音流畅。
      

  5.   

    是的,WaveOut函数太旧了,早就过时了,虽然还能用,-:)
      

  6.   

    对,没办法混音,必须由上层的应用软件来实现,然后交给WaveOut去播放,比较麻烦!