试试DIRECT SOUND
是比底层音频函数更低级的接口

解决方案 »

  1.   

    Direct sound is only for Win95,好像还不支持Wav保存。
      

  2.   

    编了个函数
    void InitSound(CClientDC *dc)     //Init 
    {
    WAVEFORMATEX wfx;
    LPHWAVEIN phwi=NULL;
    UINT uDeviceID=WAVE_MAPPER;
    LPWAVEFORMATEX pwfx=&wfx;
    DWORD dwCallback=0;
    DWORD dwCallbackInstance=0;
    DWORD fdwOpen=CALLBACK_EVENT;
    MMRESULT s=0;

            char mid[80]; wfx.wFormatTag=WAVE_FORMAT_PCM;
    wfx.wBitsPerSample=16;
    wfx.nSamplesPerSec=11025;
    wfx.nAvgBytesPerSec=22050;
    wfx.nBlockAlign=2;
       
    s=waveInOpen(phwi,uDeviceID,pwfx,dwCallback,dwCallbackInstance,fdwOpen);
        sprintf(mid,"phwi=%ld s=%ld" ,phwi,s);
        outword(*&dc,100,7,mid);}  结果显示:phwi=0   s=11
    为什么 waveInOpen(...)的返回值是 11 ??查MSDN说明:
    返回值为:
    MMSYSERR_NOERROR =0
    MMSYSERR_ALLOCATED =4
    MMSYSERR_BADDEVICEID =2
    MMSYSERR_NODRIVER =6
    MMSYSERR_NOMEM =7
    WAVERR_BADFORMAT) =32
    那么 s= 11 是怎么回事??
      

  3.   

    返回值是 11说明参数无效。你没有指定声道数。对WAVEFORMATEX的赋值不全。
      

  4.   

    加入
    wfx.nChannels=1;
    但是,结果还是s=11
      

  5.   

    类似的程序我有,[email protected]
      

  6.   

    http://www.codeguru.com/multimedia/echosound.html
    用wave函数一边录,一边放,一边写
      

  7.   

    你的信箱?
    你的mail我收到,但是无法回复,怎么回事?
      

  8.   

    对了,我的Email是 [email protected] 
    也希望大家能与我多多讨论。