게시판 즐겨찾기
편집
드래그 앤 드롭으로
즐겨찾기 아이콘 위치 수정이 가능합니다.
Windows 100% 보장하는 효과음 재생방법?
게시물ID : programmer_18823짧은주소 복사하기
작성자 : 1999
추천 : 0
조회수 : 860회
댓글수 : 4개
등록시간 : 2016/10/26 14:52:45
옵션
  • 본인삭제금지
안녕하세요! 몇달동안 해결이 되지 않는 문제입니다. 아주 조금이라도 도움이 될만한 내용이면 꼭 답변 좀 부탁드려요!

현재 특정이벤트 발생시 소리를 재생해줘야 하는 프로그램입니다.
사용자는 다른 작업을 하다가 소리를 듣고 대응을 하는게 주목적입니다.
그래서 100% 소리가 재생되는게 보장되어야 합니다.

그런데 문제는 불특정 PC에서 소리가 간헐적으로 재생이 되지 않는 현상이 발생합니다.
(10번중 1~2번 안나온다거나 연속으로 몇번 안나오다가 다시 나오는 식입니다.)

대상 OS는 일단 Windows10 32bit입니다.

처음 사용한 방식
PlaySound(NULL, NULL, 0);
PlaySound("wav파일명", NULL, SND_ASYNC|SND_FILENAME);

위와 같이 PlaySound(sndPlaySound) 함수를 사용하여 소리를 재생했습니다. 이 방식은 꽤 자주 현상이 발생했습니다.

그래서 DirectSound로 방식을 바꿨습니다.
협력레벨은 DSSCL_NORMAL로 1차 버퍼는 별도로 생성안하고 2차버퍼는 DSBCAPS_STATIC|DSBCAPS_GLOBALFOCUS|DSBCAPS_LOCSOFTWARE 옵션을 주고 생성했습니다.

그리고 재생시에는
IDirectSoundBuffer8객체->Stop():
IDirectSoundBuffer8객체->SetCurrentPosition(0);
IDirectSoundBuffer8객체->Play(0,0,0);

위와 같이 방식을 바꿨더니 PlaySound일때보다는 소리가 안나는 확율이 줄기는 했지만 여전히 소리가 안나는 현상이 발생합니다.
다만 이 경우 소리가 안날때 Play함수에서 DSERR_ACCESSDENIED(0x80070005) 오류가 리턴됩니다.
msdn문서에도 Play함수 리턴코드로는 해당 오류가 난다는 내용이 없습니다...

현재 상황은 여기까지입니다.

지금은 SFML, SDL, OpenAL, XAudio2 등의 방법을 고민중입니다만..

만약에 하드웨어의 문제 또는 Windows의 문제라면 해결이 안되기때문에 삽질하는게 아닌가 하는 생각에 쉽게 
작업을 못하고 있습니다.

관련 작업 경헙이 있으시거나 힌트가 될만한 내용이 있으시면 꼭 좀 댓글 부탁드려요!





전체 추천리스트 보기
새로운 댓글이 없습니다.
새로운 댓글 확인하기
글쓰기
◀뒤로가기
PC버전
맨위로▲
공지 운영 자료창고 청소년보호