Проверьте в цикле, воспроизводится ли канал, используя Mix_Playing () , и добавьте задержку, используя SDL_Delay () , чтобы цикл не занимал все доступное время ЦП.
(В этом примере я изменил ваш первый вызов на Mix_PlayChannel()
с -1 на 1.)
Mix_PlayChannel(1, sound_1, 0);
while (Mix_Playing(1) != 0) {
SDL_Delay(200); // wait 200 milliseconds
}
Mix_PlayChannel(2, sound_2, 0);
while (Mix_Playing(2) != 0) {
SDL_Delay(200); // wait 200 milliseconds
}
// etc.
Возможно, вам следует вместо этого обернуть это в функцию, чтобы вы неповторяйте то, что в основном является одним и тем же кодом, снова и снова:
void PlayAndWait(int channel, Mix_Chunk* chunk, int loops)
{
channel = Mix_PlayChannel(channel, chunk, loops);
if (channel < 0) {
return; // error
}
while (Mix_Playing(channel) != 0) {
SDL_Delay(200);
}
}
// ...
PlayAndWait(-1, sound_1, 0);
PlayAndWait(1, sound_2, 0);
PlayAndWait(2, sound_3, 0);
PlayAndWait(3, sound_3, 0);