웨이브 파일 재생이 즉시 종료됨(C++, Windows)

다음과 같은 상황이 발생했습니다. 컴퓨터에는 Fritz ISDN 카드가 있습니다. 이 장치의 웨이브 아웃에서 특정 웨이브 파일을 재생하는 프로세스가 있습니다(ISDN 연결은 시작 시 만들어지고 영구적으로 유지됨). 시나리오는 간단합니다. 프로세스는 필요할 때마다 이전에 열린 웨이브 장치에서 waveOutWrite()를 호출하고 (물론 모든 것이 문제없이 초기화 됨) 콜백 함수는 재생이 완료되었음을 알기 위해 MM_WOM_DONE 메시지가 나타날 때까지 기다립니다.

그러나 며칠 전부터 (프로세스나 기기에서 아무것도 변경된 것이 없음) 웨이브가 몇 초 동안 지속되더라도 waveOutWrite()를 호출 한 직후에 MM_WOM_DONE 메시지가 계속 나타납니다. 다시 오류는보고되지 않으며 파일이 재생되었지만 길이가 0 인 것처럼 보입니다 (사실이 아님). 또한 내 프로세스에서 waveOutReset()이 호출되지 않았다고 확신합니다 (언급 된 메시지 전송을 트리거 할 수도 있음). 나는 이미 과거에 TAPI 드라이버를 다시 설치하여 해결 된 몇 가지 이상한 문제가있었습니다. 이번에는 어떤 이유로 다시 한 번 수행하는 것이 문제가되어 더 분석적인 접근 방식을 시도하고 있습니다.) 이러한 동작의 원인이 될 수있는 제안 사항이 있습니까? ISDN** 라인의 다른 쪽 끝에 뭔가 있을까요?

설명에 따르면 비동기식으로 재생하고 있습니다. 그 시간에 wav 파일의 백업 메모리가 정리되지 않는 것이 확실합니까?

해설 (0)

구글을 검색할 시간이 많지는 않지만, 래리 오스터만이나 레이몬드 첸이 비슷한 상황에 대해 블로그에 글을 남겼다는 것을 알고 있습니다.

나중에 시간이 더 생기면 이 질문이 아직 열려 있는지 다시 확인해 보겠습니다.

해설 (1)

사운드가 재생되지 않을 때 반환되는 값은 무엇인가요? 드라이버가 버퍼를 처리했다고 OS에 잘못 보고한 것을 가리키는 MMSYSERR_NOERROR가 발생하면 버퍼가 잘못 처리된 것입니다.

WAV 파일 자체가 변경되었나요? 이 블로그 항목은 메타데이터에 대해 꽤 심층적인 유효성 검사가 수행되었음을 나타냅니다.

해설 (0)