[英]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.