用Win API 来播放WAV文件, 播放流程如下:1、waveOutGetNumDevs()查询设备
2、mmicoOpen()打开文件
3、mmioDescend()来确定文件是否为WAV文件和取出WAV文件的信息
4、mmioRead()读取音频数据
5、waveOutOpen()打开音频设备
6、waveOutPrepareHeader()生成WAV信息头
7、waveOutWrite()将音频数据写入波形设备
8、waveOutUnPrepareHeader()播放完毕后,清除信息头
9、waveOutClose()关闭设备现在我要解决的是:
1、如果音频数据过长(if >500M)。这样的话,是不可能把音频数据
   一次全部写入设备的,因为内存不够。但是,用分段播放(先取一
   部分音频数据写入设备播放,放完后再取另一部分写入设备播放)
   的话,就会用明显的断断续续的感觉。
     请问,如何解决分段播放的断断续续的感觉。
2、在播放的时候,我要时刻检测(用一个While循环)是否播放完毕,
   这样,将会消耗太多的CPU时间。
     请问,如何才能解决CPU消耗。

解决方案 »

  1.   

    TO belllab(bell) : 
    1.我之前就是用此方法, 有继断断续续的感觉. 因为把间频数据写入设备要一段时间.
    2.此方法我以前想过,但我没用过.我想用回调来解决,不知你知道waveOutOpen如何传递回调函数?并且,回调函数应如何声明?
      

  2.   

    学Windows Media Player,用媒体流。。
      

  3.   

    我有一个老外写的wave的语音采集和播放的程序,是双缓冲的,没有断的感觉。如果需要可联系我,Email:[email protected]
      

  4.   

    麻烦你给我发一份吧[email protected]
      

  5.   

    晕.播放WAV音乐要这么复杂吗???看看我的吧.SndPlaySound(pChar(fSoundPath+'\KaoQinFail.wav'),SND_ASYNC); //后台播放.嘿嘿.要记得引用 MMSystem 单元哟.
      

  6.   

    up  belllab(bell) ( )