Как остановить воспроизведение звука в моей игре на C? - PullRequest
0 голосов
/ 26 января 2019

Я делаю игру на C, и я хотел перейти с одного аудиофайла на другой, но мне нужно дождаться окончания воспроизведения первого файла.Есть ли способ сделать так, чтобы первая остановилась сразу же?

Это мой код:

void MusicPlayer (){
    while (music == true)
        PlaySound("elevat_loop1.wav" , NULL, SND_FILENAME);
    while (music == false)
        PlaySound("silence.wav", NULL, SND_FILENAME);
    if (music == true)
        MusicPlayer();
}

thread t(MusicPlayer);//I used thread because I want music to play independently

Я хочу, чтобы первый файл прекратил воспроизведение без ожидания.Я попытался использовать SND_ASYNC, но при этом звук не будет воспроизводиться.

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Я решил это.Код

void MusicPlayer (){
    if (music == true)
        PlaySound(TEXT("elevmus.wav"), NULL, SND_LOOP | SND_ASYNC);
    while (music == true)
        ;
    if (music == false)
        PlaySound("silence.wav", NULL, SND_LOOP | SND_ASYNC);
    while (music == false)
        ;
    if (music == true)
        MusicPlayer();
}
0 голосов
/ 26 января 2019

может быть выполнено PlaySound в другом потоке и при необходимости уничтожить этот поток?


из этого

void MusicPlayer (){
  while (music == true)
    PlaySound("elevat_loop1.wav" , NULL, SND_FILENAME);
  while (music == false)
    PlaySound("silence.wav", NULL, SND_FILENAME);
  if (music == true)
    MusicPlayer();
}

рекурсия ничего не делает,даже если компилятор оптимизирует, кажется, что лучше использовать цикл

while (music == false) {...} даст руку, когда music вернется к истине, поэтому у if (music == true) есть большой шанс быть правдой,действительно ли это нужно для проверки?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...