gpt4 book ai didi

c++ - 使用 SDL_mixer 播放一个接一个的声音?

转载 作者:行者123 更新时间:2023-11-30 04:48:25 37 4
gpt4 key购买 nike

我有 4 个声音。我需要播放声音1,当它结束时,自动播放声音2;当声音 2 结束时,自动播放声音 3。声音 3 结束时,播放声音 4....我正在使用 SDL Mixer 2.0,没有 SDL Sound...有什么办法吗?

int main() {
int frequencia = 22050;
Uint16 formato = AUDIO_S16SYS;
int canal = 2; // 1 mono; 2 = stereo;
int buffer = 4096;
Mix_OpenAudio(frequencia, formato, canal, buffer);

Mix_Chunk* sound_1;
Mix_Chunk* sound_2;
Mix_Chunk* sound_3;
Mix_Chunk* sound_4;

som_1 = Mix_LoadWAV("D:\\sound1.wav");
som_2 = Mix_LoadWAV("D:\\sound1.wav");
som_3 = Mix_LoadWAV("D:\\sound1.wav");
som_4 = Mix_LoadWAV("D:\\sound1.wav");

Mix_PlayChannel(-1, sound_1, 0);
Mix_PlayChannel(1, sound_2, 0);
Mix_PlayChannel(2, sound_3, 0);
Mix_PlayChannel(3, sound_4, 0);

return 0;

}

最佳答案

使用 Mix_Playing() 循环检查 channel 是否仍在播放, 并使用 SDL_Delay() 添加延迟以防止循环消耗所有可用的 CPU 时间。

(在本例中,我将您对 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);

关于c++ - 使用 SDL_mixer 播放一个接一个的声音?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55786004/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com