目前,SDL_Mixer 有两种声音资源:块和音乐。
除了 API 和支持的格式限制之外,还有什么理由不将音乐作为 SDL_Chunk 和频道加载和播放?(内存、速度等)
API 是真正的问题。“音乐” API 旨在处理流式压缩音乐,而“声音” API 则不是。再说一次,如果你设法让它在你的应用程序中工作,那么它就可以工作。
我还没有查看 SDL 代码,但我的猜测是“块”用于较小的声音样本,并且在“音乐”被流式传输时被缓存在内存中,被解码(不缓存在内存中)它的全部,但根据需要进行解码和缓冲,假设它在大多数情况下会从头开始播放,并从那一点连续播放,有时可能会重置回开始)
所以原因是记忆。您不想将 4 分钟的 16 位立体声歌曲解码到内存中,因为如果您尝试它,它将吃掉 44100Hz * 2bytes * 2channels *4minutes *60sec/min == 42336000 字节,当您可以解码和缓冲较小的部分。
OTOH,如果您每分钟有大约 10Mb 的 RAM 要浪费,并且您需要动态解码所消耗的 CPU……您可能会使用块。