将音乐作为SDL_Mixer块运行

时间:2009-03-07 23:53:47

标签: c++ audio sdl sdl-mixer

目前,SDL_Mixer有两种类型的声音资源:块和音乐。

除了API和支持的格式限制外,有没有理由不加载和播放音乐作为SDL_Chunk和频道? (记忆,速度等)

2 个答案:

答案 0 :(得分:1)

API是真正的问题。 “音乐”API旨在处理流式压缩音乐,而“声音”API则不是。再说一次,如果你设法让它在你的应用程序中运行,那么它就可以了。

答案 1 :(得分:1)

我没有看过SDL代码,但我的猜测是“块”是用于较小的声音样本,并且在“音乐”流式传输(未缓存)时缓存在内存中,解码完整在整个内存中,但根据需要进行解码和缓冲,假设它在大多数情况下从头开始播放,并从那一点开始连续播放,偶尔可能会有一些重置回到开头。

所以原因是记忆。您不想将16位立体声歌曲中的4分钟解码到内存中,因为它会吃掉44100Hz * 2bytes * 2channels * 4minutes * 60sec / min == 42336000 bytes如果您尝试它,当您可以解码时缓冲它的小部分。

OTOH,如果你每分钟有大约10Mb的音乐浪费,你需要通过即时解码消耗的CPU ......你可以使用块。