录音,然后保存成wave格式。录音时,将数据暂时写到内存快上(使用WAVEHDR结构)再写成wave文件时,wave头格式中的裸数据使用来自WAVEHDR.lpData的数据,wave头格式中的data段的数据长度用来自WAVEHDR.dwBufferLength的数据的数据,wave头格式中的header段的文件长度("RIFF"标志后)使用WAVEHDR.dwBufferLength+44-8,(其他方面的格式没问题已确定没问题)。通过以上方法写出来的wave文件,播放器不支持(也就是格式错误了),但是不知道错在哪里?希望高手出马。

解决方案 »

  1.   

    应该是文件头写错了,你在看看wave文件的文件头和你写的文件头有什么不同.比较一下.播放不出来和数据段没有关系的.主要就是文件头.
      

  2.   

    是不是PCM还是压缩过的,如果是压缩过的
    WAVEHDR.lpData长度不一定是18,还要加上WAVEFORMATEX结构中的cbSize
      

  3.   

    如果是PCM,只要前WAVEHDR.lpData中的16个字节,或者46-8
    4x = 8+12+WAVEHDR.lpData长度+8
    前提,只有fmt和Data在Riff结下
      

  4.   

    最后,顺便再问一下(呵呵,节约分数)
    录制音乐结束,保存wave时,如何指定其声道(如保存为左声道,或右声道)
      

  5.   

    录制音乐结束,保存wave时,才指定其声道?wave是每个字节有BlockAlign个(双声道一般为4),而一个采样是8bits和16bits(下面以16bits说)根据waveformatex中的,一点点地输出(如只要左声道,前16bit,再跳16bits)记着,别忘了改waveformatex中的nChannels