|
PlaySound 함수는 사운드가 출력중인지 알 수 있는 방법이 없습니다.
1.wav와 2.wav의 시간을 미리 계산해서 프로그램에 집어 넣는 방법 밖에 없지요.
[의사코드]
if ( 플레이시작시간+웨이브파일길이 < 현재시간 )
{
다음곡플레이
}
만약에 웨이브 파일 길이가 계속 변한다면 DirectSound나 DirectMusic 같은 Direct-X 계열 함수를 이용하세요.
이윤성 님이 쓰신 글 :
: 지금 다이얼 보드로 4채널로 작동하는 프로그램 짜는 중입니다.
: 기존 샘플 코드가 winAPI 로 되어 있어서..
: winAPi 로 프로그램 짜다가 사운드 출력 부분이 막혀서 질문 드립니다.
: 멀티 쓰레드로 4개의 쓰레드가 돌다가..사용자 입력이 들어오면..
: 어떤 함수를 호출합니다.
: 이 함수에는 데이터 저장하고 사운드 출력 이 있기에 크리티컬 세션으로 보호하고 사용 중인데요..
: 여기서 사운드 출력에 문제가 생깁니다.
: 사운드가 한개만 출력 되면 몰라도 사운드가 한번에 5개씩 출력 되게 세팅 해야 합니다.
: 근데..
: 5개를 동기로 해놓으면....이게 실행 되는 동안 다른 작업이 진행이 안되고 다른 쓰레드에서 사용자 입력은 받지 못하는 사태가 생기네요..
: 그래서 비동기로 세팅하면..제일 마지막 사운드만 출력이 됩니다.
: 만약 2개의 사운드만 출력하게 된다면.
:
: PlaySound("1.wav",NULL,SND_SYNC|SND_NOSTOP);
: PlaySound("2.wav",NULL,SND_SYNC|SND_NOSTOP);
:
: 처음 1번 쓰레드에서 사용자 입력으로 호출한 함수에서 저 두개의 사운드를 재생해야 하는데 재생이 끝나기전에 다른 작업으로 넘어 가야 합니다.
: 그리고 1번 쓰레드에서 호출한 함수에서 사운드 재생중에 다른 쓰레드에서 이 함수를 호출하면..
: 1,2 번 사운드를 재생해야 합니다.
: 즉
: 순차적으로 1,2,1,2 가 재생되어야 하는데...
: 이 4개의 사운드가 재생될동안 다른 작업은 계속 수행 하게 할려면 어떻게 해야 좋을지 조언 부탁 드리겠습니다.
: 설명중에 간단한..예제라도 보여주시면 감사하고요...
: 즐프하시고 주말 잘보네세요..
: 제가 적은 질문이지만 질문이 조금 어렵네요..
:
: 그리고 WinAPi 라서 질문 적을만한곳이 없어서 이곳에 적게 되어서 죄송합니다 ^^;
|