c темы — почему mmsystem (используя mciSendString) не воспроизводит звуковой файл?

Я хочу, чтобы моя игра играла в sfx. В начале я открываю какой-нибудь mp3 файл mciSendString("open Muzle.mp3 alias Muzle");,

Моя проблема в том что mciSendString("play Muzle from 0"); по-прежнему вызывает небольшое отставание, и игра должна играть звуки часто.

В другом вопросе я прочитал, что использование потоков решит проблему. Я совершенно новичок в использовании потоков. Проблема в том, что звук не воспроизводится: с. Я проверил, что нить работает правильно, дав в конце метку.

У меня есть эта функция сейчас:

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";
}

(Я тоже пробовал без Sleep. Интересно, нужно ли мне это, потому что, если поток достигает конца, он может быть удален, а звук прекращен … Я не уверен, как работают потоки или mmsystem)

Если я просто позвоню Shout() функция, он будет играть звук, сделать сон (2000), а затем cout. Все работало нормально Но я должен использовать темы, поэтому я стараюсь:

thread(Shout, "Muzle");

и я получил ошибку: abort () был вызван. Я понял, что мне может понадобиться отсоединить нить:

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

При этом все выглядело нормально, но через 2 секунды на консоли появляется надпись «Test woi», но звук не воспроизводится.

Хм, так что спасибо, что прочитали все ^. ^. Вы знаете, как решить эту проблему?

0

Решение

Вы, вероятно, должны иметь ОДИН постоянный поток, который:
1. Дождитесь окончания звука, прежде чем двигаться дальше (при условии, что вы хотите, чтобы он работал). Вы можете, вероятно, просто использовать «Подождите» вариант сделать это.
2. Когда звук не воспроизводится, ждет команды для воспроизведения следующего звука — с помощью труба отправка сообщений в ветку была бы одним из таких решений, но вы могли бы использовать другие методы.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]