簡體   English   中英

SDL_Mixer是否可以自己播放單個塊?

[英]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秒后用完所有通道,因此直到其中一個通道結束播放之前,您都無法播放新塊。

因此,基本上有兩種解決方案:

  1. 分配更多通道(大於:ChunkDuration(以秒為單位)/ Delay(以秒為單位))
  2. 停止頻道,以便您可以使用它。 (並且要正確執行此操作,您不應使用-1作為通道,而應使用每次播放塊時增加的變量(當它等於通道數時,不要忘記將其設置回0))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM