웨이브 파일 재생이 즉시 종료됨(C++, Windows)
다음과 같은 상황이 발생했습니다. 컴퓨터에는 Fritz ISDN 카드가 있습니다. 이 장치의 웨이브 아웃에서 특정 웨이브 파일을 재생하는 프로세스가 있습니다(ISDN 연결은 시작 시 만들어지고 영구적으로 유지됨). 시나리오는 간단합니다. 프로세스는 필요할 때마다 이전에 열린 웨이브 장치에서 waveOutWrite()
를 호출하고 (물론 모든 것이 문제없이 초기화 됨) 콜백 함수는 재생이 완료되었음을 알기 위해 MM_WOM_DONE
메시지가 나타날 때까지 기다립니다.
그러나 며칠 전부터 (프로세스나 기기에서 아무것도 변경된 것이 없음) 웨이브가 몇 초 동안 지속되더라도 waveOutWrite()
를 호출 한 직후에 MM_WOM_DONE
메시지가 계속 나타납니다. 다시 오류는보고되지 않으며 파일이 재생되었지만 길이가 0 인 것처럼 보입니다 (사실이 아님). 또한 내 프로세스에서 waveOutReset()
이 호출되지 않았다고 확신합니다 (언급 된 메시지 전송을 트리거 할 수도 있음). 나는 이미 과거에 TAPI 드라이버를 다시 설치하여 해결 된 몇 가지 이상한 문제가있었습니다. 이번에는 어떤 이유로 다시 한 번 수행하는 것이 문제가되어 더 분석적인 접근 방식을 시도하고 있습니다.) 이러한 동작의 원인이 될 수있는 제안 사항이 있습니까? ISDN** 라인의 다른 쪽 끝에 뭔가 있을까요?
3
3
설명에 따르면 비동기식으로 재생하고 있습니다. 그 시간에 wav 파일의 백업 메모리가 정리되지 않는 것이 확실합니까?
구글을 검색할 시간이 많지는 않지만, 래리 오스터만이나 레이몬드 첸이 비슷한 상황에 대해 블로그에 글을 남겼다는 것을 알고 있습니다.
나중에 시간이 더 생기면 이 질문이 아직 열려 있는지 다시 확인해 보겠습니다.
사운드가 재생되지 않을 때 반환되는 값은 무엇인가요? 드라이버가 버퍼를 처리했다고 OS에 잘못 보고한 것을 가리키는 MMSYSERR_NOERROR가 발생하면 버퍼가 잘못 처리된 것입니다.
WAV 파일 자체가 변경되었나요? 이 블로그 항목은 메타데이터에 대해 꽤 심층적인 유효성 검사가 수행되었음을 나타냅니다.