【问题标题】:Playing wave file ends immediately (C++, Windows)播放波形文件立即结束 (C++, Windows)
【发布时间】:2010-09-05 19:05:16
【问题描述】:

我遇到了以下情况。在一台机器上有一个 Fritz ISDN 卡。有一个进程负责在此设备的波形输出上播放某个波形文件(ISDN 连接在启动时建立并保持不变)。场景很简单,只要需要,进程就会在先前打开的 wave 设备上调用waveOutWrite()(当然,一切都已初始化,没有任何问题),并且回调函数等待MM_WOM_DONE msg 知道播放已完成。

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

【问题讨论】:

    标签: c++ windows waveout


    【解决方案1】:

    根据您的描述,您正在异步播放。您确定 wav 文件的后备内存没有在这段时间内被清理吗?

    【讨论】:

      【解决方案2】:

      不播放声音时返回值是多少?如果您收到 MMSYSERR_NOERROR,则表明驱动程序错误地向操作系统报告缓冲区已被处理。

      WAV 文件本身是否发生了变化?这个blog entry 表示对元数据进行了一些相当深入的验证。

      【讨论】:

        【解决方案3】:

        我没有太多时间在 Google 上搜索这个,但我知道 Larry Osterman 或 Raymond Chen 都在博客中提到过类似的情况。

        等我有更多时间再回来看看这个问题是否仍然悬而未决。

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多