文件格式:IMA ADPCM的WAV格式,参数如下设置。
pcmWaveFormat.wFormatTag=WAVE_FORMAT_IMA_ADPCM;
pcmWaveFormat.nChannels=1;
pcmWaveFormat.nSamplesPerSec=8000;
pcmWaveFormat.nAvgBytesPerSec=4055;
pcmWaveFormat.nBlockAlign=256;
pcmWaveFormat.wBitsPerSample=4;
pcmWaveFormat.cbSize=0;
当调用waveOutOpen时返回:WAVERR_BADFORMAT-Attempted to open with an unsupported waveform-audio format。
此格式的文件在windows自带的录音机中能正确识别出格式,能播放。
问题:waveOutOpen能播放此格式的文件吗?能的话,要怎么播放?最好给出例子。
      如果不能,怎样才能播放此格式的文件?最好给出例子。
谢谢。

解决方案 »

  1.   

    还是按PCM打开。pcmWaveFormat.cbSize=0;??????????????????
      

  2.   

    录音按ADPCM,放音可以直接当然PCM。
      

  3.   

    to "DentistryDoctor(雅克医生<医德,值得反思>) "
    pcmWaveFormat.cbSize=0;看MSDN上的,说没有额外信息的话,置0;其它值试过了(32,64,256),还是一样。
    刚开始的时候也是按PCM格式放音的,返回结果WAVERR_BADFORMAT。就是不行。
      

  4.   

    偶有使用ACM录音放音的程序。
      

  5.   

    偶也写几行出来。WAVEFORMATEX * pSrcFmt = NULL;
    WAVEFORMATEX * pCompFmt = NULL;
    pCompFmt =  (WAVEFORMATEX*)new BYTE[sizeof(WAVEFORMATEX)];
    pSrcFmt =  (WAVEFORMATEX*)new BYTE[sizeof(WAVEFORMATEX)];
    ZeroMemory(pCompFmt,sizeof(WAVEFORMATEX)); pCompFmt->wFormatTag = static_cast<WORD>(theApp.GetProfileInt("DVR","AudioCodec",WAVE_FORMAT_GSM610));
    pCompFmt->nChannels = static_cast<WORD>(nChannel);
    pCompFmt->wBitsPerSample = static_cast<WORD>(nBit);
    pCompFmt->nSamplesPerSec = static_cast<WORD>(nFreq);
    pCompFmt->nBlockAlign = pCompFmt->nChannels * pCompFmt->wBitsPerSample / 8;
    pCompFmt->nAvgBytesPerSec = pCompFmt->nSamplesPerSec * pCompFmt->nBlockAlign;
    CopyMemory(pSrcFmt,pCompFmt,sizeof(WAVEFORMATEX));
      

  6.   

    to“DentistryDoctor(雅克医生<医德,值得反思>) ”
    谢谢你的代码。
    看了MSDN关于cbSize参数的说明,明白了要是要使用IMA_ADPCM格式的话,要在WAVEFORMATEX结构后面添加格式信息,不知道这个格式信息是怎么样的,在哪里可以得到这方面的信息?
    谢谢。
      

  7.   

    cbSize=2,0x19F,这是从acmFormatEnum中得到的信息。
    还是放不出来,真的不行的话,要经过解压缩才行了。