我用这个函数的时候,WAVEFORMATEX怎么填写啊。
WAVEFORMATEX的wFormatTag我只能填写WAVE_FORMAT_QUERY,或者WAVE_FORMAT_PCM才能
调用waveOutOpen成功。Msdn说
wFormatTag 
Waveform-audio format type. Format tags are registered with Microsoft Corporation for many compression algorithms. A complete list of format tags can be found in the MMREG.H header file. 
但我填写其他格式的时候,waveOutOpen总返回WAVERR_BADFORMAT错误。求高手指教!!!我想播放一个
采样 8
声道 单声道
采样级别 8kHz
音频格式 CCITT A-Law
的语音文件。waveOutOpen的WAVEFORMATEX该怎么填写。

解决方案 »

  1.   

    typedef struct {
        WORD  wFormatTag;        // WAVE_FORMAT_PCM,必须写这个。
        WORD  nChannels;         // 单声道就设1
        DWORD nSamplesPerSec;    // 每秒采样,CD音质44100就可以了,你要的8000也可以。
        DWORD nAvgBytesPerSec;   // = nSamplesPerSec * nBlockAlign
        WORD  nBlockAlign;       // = nChannels * wBitsPerSample / 8,因为单位是bytes。
        WORD  wBitsPerSample;    // 分辨率,你要的是8;还可填16。
        WORD  cbSize;            // 保留
    } WAVEFORMATEX;
      

  2.   

    typedef struct {
        WORD  wFormatTag;        // WAVE_FORMAT_PCM,必须写这个。
        WORD  nChannels;         // 单声道就设1
        DWORD nSamplesPerSec;    // 每秒采样,CD音质44100就可以了,你要的8000也可以。
        DWORD nAvgBytesPerSec;   // = nSamplesPerSec * nBlockAlign
        WORD  nBlockAlign;       // = nChannels * wBitsPerSample / 8,因为单位是bytes。
        WORD  wBitsPerSample;    // 分辨率,你要的是8;还可填16。
        WORD  cbSize;            // 保留
    } WAVEFORMATEX;由于我要播放的文件不是WAVE_FORMAT_PCM格式所以填写WAVE_FORMAT_PCM播放的时候有很大的噪音,
    后来,我修改为
    waveOutOpen 的第二个参数为wave_mapper行了.恶梦.....