У меня есть следующая ситуация. На машине есть Неисправность ISDN карта. Есть процесс, который ответственен за игру определенного файла волны на этом device' s волна ( ISDN связь установлена при запуске и сделана постоянная). Сценарий легок, при необходимости, требования процесса 'waveOutWrite ()' на ранее открытом устройстве волны (все инициализированное без любых проблем, конечно) и функция обратного вызова ждут сообщения 'MM_WOM_DONE', чтобы знать, что воспроизведение было закончено.
С нескольких дней однако (ничто не изменилось ни в процессе, ни в машине) сообщение 'MM_WOM_DONE' появлялось немедленно после запроса 'waveOutWrite ()' даже при том, что волна длится несколько секунд. Снова ни о какой ошибке не сообщают, похоже, что файл игрался, но имел нулевую длину (который не имеет место). Я также уверен, что 'waveOutReset ()' не был назван моим процессом (он также вызовет отправку упомянутого сообщения). Я уже раньше имел некоторые странные проблемы в прошлом что, где решено просто, повторно устанавливая TAPI водители. На этот раз по некоторым причинам это проблематично для меня, чтобы выполнить это еще раз, и я пробую более аналитический подход:). Какие-либо предложения, что могло бы вызвать такое поведение? Возможно, что-то на другом конце ISDN линия?
На основе Вашего описания Вы делаете игру asynchonously. Вы уверены, что поддерживающая память для wav файла не очищается в то время?
Я don' у t есть время к Google слишком много для этого, но я знаю, что или Ларри Остерман или Рэймонд Чен вели блог об аналогичной ситуации.
I' ll перепроверяют позже, когда у меня есть больше времени, чтобы видеть, открыт ли этот вопрос все еще.
Каково возвращаемое значение, когда звук не играет? Если Вы получаете MMSYSERR_NOERROR, который указывает водителю, неправильно сообщающему OS, что буфер был обработан.
Имеет файл WAV сам измененный? Этот запись в блоге указывает, что некоторая довольно всесторонняя проверка сделана на метаданных.