播放wave文件立即结束(C ++,Windows)
时间:2020-03-05 18:39:21 来源:igfitidea点击:
我有以下情况。在机器上有一个Fritz ISDN卡。有一个过程负责在该设备的波形输出上播放某个波形文件(ISDN连接在启动时建立并保持不变)。该场景很容易,只要需要,进程就会在先前打开的wave设备上调用" waveOutWrite()"(所有初始化都没有任何问题),并且回调函数会等待" MM_WOM_DONE" msg知道回放已完成。
然而,由于几天(在处理过程和机器上都没有改变),即使调用持续了几秒钟,在调用" waveOutWrite()"之后仍会立即发出" MM_WOM_DONE"消息。再次没有错误报告,看起来文件已播放但长度为零(事实并非如此)。我也确定我的进程没有调用waveOutReset()
(它也会触发发送上述消息)。过去,我曾经遇到过一些奇怪的问题,只需重新安装TAPI驱动程序即可解决。这次由于某种原因,我再次执行该操作很麻烦,我正在尝试更多的分析方法:)。有什么建议可能导致这种行为?也许在ISDN线路的另一端?
解决方案
回答
我没有太多时间在Google上,但我知道Larry Osterman或者Raymond Chen都在博客上写过类似情况。
以后我有更多时间查看此问题是否仍然悬而未决时,请稍后再回来检查。
回答
声音不播放时的返回值是多少?如果得到MMSYSERR_NOERROR,则指向驱动程序错误地向操作系统报告了缓冲区已处理。
WAV文件本身是否已更改?该博客条目表明已对元数据进行了一些相当深入的验证。
回答
根据描述,我们正在异步进行比赛。我们确定那段时间未清除wav文件的后备内存吗?