2013-07-21 8 views
0

내 게임에서 sfx를 재생하고 싶습니다. 처음에는 mp3 파일 mciSendString("open Muzle.mp3 alias Muzle");을 엽니 다.c threads - mmsystem (mciSendString 사용)이 사운드 파일을 재생하지 않는 이유는 무엇입니까?

내 문제는 여전히 mciSendString("play Muzle from 0");은 약간의 지연을 유발하고 게임은 소리를 자주 재생해야한다는 것입니다.

다른 질문으로, 스레드를 사용하면 문제가 해결 될 것이라고 읽었습니다. 나는 쓰레드를 사용하는 것에 완전히 익숙하다. 이제 문제는 사운드가 재생되지 않는다는 것입니다 : p. 마지막에 cout을 주면 스레드가 제대로 실행되는지 확인했습니다.

는 지금이 기능이 있습니다. 스레드가 마지막에 이르렀을 경우,이를 삭제하고 소리가 종료 얻을 수 있기 때문에 내가 필요하면

void Shout(string SoundName){ 
    string FNstr; 
    wstring FNwstr; 
    FNstr = "play " + SoundName + " from 0"; 
    FNwstr.assign(FNstr.begin(), FNstr.end()); 
    mciSendString(FNwstr.c_str(), NULL, 0, NULL); 
    Sleep(2000); 
    cout << "Test woi\n"; 
} 

(나는 너무 수면없이 시도를 궁금해 ...

단순히이 Shout() 함수를 호출하면 사운드가 재생되고 Sleep (2000), cout이 실행됩니다. 모든 것이 잘 작동했습니다. 하지만 스레드를 사용하는, 그래서 시도 :

thread(Shout, "Muzle"); 

을 나는 오류가 있어요 : 호출 된 중단을(). 모든 것이 잘 (2 초 후, 나는 콘솔에 인쇄 된 "테스트 WOI"참조) 작업을 보았다이와

thread t(Shout, "Muzle"); 
t.detach(); 

을하지만, 소리가 재생되지 않은 : 나는 스레드를 분리해야 알아 냈어.

흠, 모든 것을 읽어 주셔서 감사합니다 ^. ^. 이 문제를 해결하는 방법을 알고 있습니까?

답변

0

다음과 같은 하나의 영구 스레드가 있어야합니다. 1. 소리가 끝나기 전에 기다렸다가 계속 진행합니다 (원하는대로 작동한다고 가정). 이를 위해서는 "wait" 옵션을 사용할 수 있습니다. 2. 사운드를 재생하지 않을 때 pipe을 사용하여 스레드에 메시지를 보내면 다음 소리를 재생할 때까지 기다리지 만 다른 방법을 사용할 수 있습니다.

+0

한 번에 여러 사운드를 재생할 수있는 게임이 필요하므로 제대로 이해하면 단 하나의 스레드 만 있으면 대기를 사용하지 않습니다. 하지만 문제는 사운드가 xD 스레드로 호출 될 때 사운드가 전혀 재생되지 않는다는 것입니다. 나는 이것이 왜 일어나는 지 모른다. –

+0

그래, 네가해야 할 일을 정확히 모르겠다. "MCI로 여러 사운드 재생"을위한 Google과 "MCIsendstring multiple threads"와 함께 제공되는 다른 프로그램의 경우 많은 제안이 있습니다. 제안 사항 중 일부는이 작업을 쉽게 수행 할 수 없다는 것을 암시하는 것 같습니다. 보조 스레드 - 나는 이벤트 처리 방식이 작동하는 방식 때문에 생각합니다. 내 대답이 어떤 용도로도 사용되지 않는다고 생각되면 삭제하겠습니다. –