[英]SDL_Mixer is playing single chunk over itself possible?
我在使用SDL_Mixer时遇到了麻烦(我缺乏经验)。 块和音乐可以很好地播放(使用Mix_PlayChannel和Mix_PlayMusic),同时播放两个不同的块不是问题。
我的问题是我想播放一些chunk1,然后播放chunk1的第二次迭代,使其与第一个迭代重叠。 我试图快速连续播放单个块,但是它以更长的间隔重复播放声音(不如我想要的那样快)。 我已经测试了控制台输出,并且我的播放/循环方法没有错误,因为我可以看到控制台消息以正确的速度循环打印。
我有一个块数组,我使用Mix_LoadWAV()在初始化期间定期加载这些块;
Mix_Chunk *sounds[32];
我还有保留用于播放这些块的功能:
void PlaySound(int snd_id)
{
if(snd_id >= 0 && snd_id < 32)
{
if(Mix_PlayChannel(-1, sounds[snd_id], 0) == -1)
{
printf("Mix_PlayChannel: %s\n",Mix_GetError());
}
}
}
尝试快速连续播放几次声音(例如100ms延迟/ 10bps),尽管功能以10bps的速度被调用,但我还是以固定的,较慢的间隔(大约500ms左右/ 2bps)播放声音。
我已经使用了“ Mix_AllocateChannels(16);” 以确保分配了通道(让我知道我是否使用了不正确的通道),并且仍然从数组中分离出一个块以一定速率拒绝播放。
感谢任何想法/帮助,以及对我如何发布此问题的批评。
如SDL_Mixer( https://www.libsdl.org/projects/SDL_mixer/docs/SDL_mixer_28.html )的文档所述:“ ... -1为第一个免费的未保留频道。”
因此,如果您的块超过1.6秒(16个通道* 100ms),您将在1.6秒后用完所有通道,因此直到其中一个通道结束播放之前,您都无法播放新块。
因此,基本上有两种解决方案:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.