播放wave文件立即结束(C ++,Windows)

时间:2008-08-13 10:04:41

标签: c++ windows waveout

我有以下情况。在一台机器上有一张 Fritz ISDN 卡。有一个进程负责在此设备的波形上播放某个波形文件( ISDN 连接在启动时进行并且持久化)。方案很简单,只要需要,进程就会在之前打开的wave设备上调用waveOutWrite()(当然所有内容都没有任何问题进行初始化),并且回调函数等待MM_WOM_DONE msg知道回放已经完成。

由于过了几天(过程和机器都没有改变),MM_WOM_DONE消息在调用waveOutWrite()后立即出现,即使wave持续几秒钟。再次没有报告错误,看起来文件已播放但长度为零(事实并非如此)。我也确信我的进程没有调用waveOutReset()(它也会触发发送上述消息)。我过去曾经遇到过一些奇怪的问题,只需重新安装 TAPI 驱动程序即可解决问题。这一次由于某种原因,我再次执行这个问题是有问题的,我正在尝试更多的分析方法:)。什么可能导致这种行为的任何建议?也许在 ISDN 行的另一端有什么东西?

3 个答案:

答案 0 :(得分:3)

根据您的描述,您正在进行异步游戏。您确定在那段时间内没有清理wav文件的后备内存吗?

答案 1 :(得分:2)

我没有时间给谷歌这么多,但我知道Larry Osterman或Raymond Chen在博客中写过类似的情况。

如果我有更多时间看这个问题是否仍未解决,我会稍后再查看。

答案 2 :(得分:0)

声音无法播放时的返回值是多少?如果你得到MMSYSERR_NOERROR指向驱动程序错误地向操作系统报告缓冲区已被处理。

WAV文件本身是否已更改?这个blog entry表示对元数据进行了一些非常深入的验证。