Я хочу, чтобы в моей игре было несколько 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";
}
(я пытался без сна тоже интересно, если мне это нужно, потому что если поток достигает конца, он может получить удаленные и звук прекращается ... Я не уверен, как работают нити или mmsystem)
Если я просто назову эту функцию Shout()
, она будет воспроизводить звук, выполнять Sleep (2000), а затем cout. Все работало нормально. Но я должен использовать потоки, поэтому я стараюсь:
thread(Shout, "Muzle");
и у меня возникла ошибка: вызывается abort(). Я понял, что я, возможно, потребуется, чтобы отделить нить:
thread t(Shout, "Muzle");
t.detach();
С этим, все выглядело работать нормально (через 2 секунды, я вижу «Test WOI», напечатанный на консоли), но ни один звук не воспроизводится.
Хм, спасибо за чтение всего ^. ^. Вы знаете, как решить эту проблему?
Мне нужна игра, чтобы иметь возможность воспроизводить сразу несколько звуков, поэтому, если я правильно понимаю, я не буду использовать ожидание, если у меня будет только один поток. Но проблема в том, что звук вообще не воспроизводится, когда я вызываю его с помощью потока xD. Я не знаю, почему это происходит. –
Хорошо, я точно не знаю, что вам нужно делать. Есть много вещей, которые возникают, если вы google для «воспроизведения нескольких звуков с помощью MCI» и других, которые придумывают «несколько потоков MCIsendstring», и некоторые из предложений, по-видимому, подразумевают, что это не так просто сделать в вторичный поток - я думаю, из-за того, как работает обработка событий. Если вы чувствуете, что мой ответ не пригодится, я его удалю. –