C++ 以SDL_混音块的形式运行音乐

C++ 以SDL_混音块的形式运行音乐,c++,audio,sdl,sdl-mixer,C++,Audio,Sdl,Sdl Mixer,目前,SDL_混音器有两种类型的声音资源:块和音乐 除了API和支持的格式限制外,是否有任何理由不将音乐作为SDL_块和频道加载和播放?(内存、速度等)API才是真正的问题。“音乐”API设计用于处理流式压缩音乐,而“声音”API则不是。再说一次,如果你能让它在你的应用程序中正常工作,那么它就正常工作了。我还没有看过SDL代码,但我猜“块”是为更小的声音样本设计的,在播放“音乐”的同时被缓存在内存中并解码(不是全部缓存在内存中,而是根据需要进行解码和缓冲,假设大部分情况下从一开始就播放,并从那一

目前,SDL_混音器有两种类型的声音资源:块和音乐


除了API和支持的格式限制外,是否有任何理由不将音乐作为SDL_块和频道加载和播放?(内存、速度等)

API才是真正的问题。“音乐”API设计用于处理流式压缩音乐,而“声音”API则不是。再说一次,如果你能让它在你的应用程序中正常工作,那么它就正常工作了。

我还没有看过SDL代码,但我猜“块”是为更小的声音样本设计的,在播放“音乐”的同时被缓存在内存中并解码(不是全部缓存在内存中,而是根据需要进行解码和缓冲,假设大部分情况下从一开始就播放,并从那一点开始连续播放,偶尔会有一些重置回到开始)

所以原因是内存。你不想在内存中解码一首16位立体声歌曲,比如说4分钟,因为如果你尝试解码并缓冲较小的片段,它会消耗44100Hz*2字节*2通道*4分钟*60秒/分钟==42336000字节


OTOH,如果你每分钟要浪费约10Mb的内存,并且需要实时解码所需的CPU,你可能会使用块。

因此,对于大型声音音乐文件,音乐API的加载速度比声音API快…?我想是的。我已经有一段时间没有使用SDL_Mixer了。我想我应该试试d贡献一点,因为这里没有其他人回答任何问题…我不认为这与加载速度有关,我认为这与节省内存有关。原始PCM数据非常昂贵。解压缩音乐流并播放音乐比播放音乐在计算上更昂贵,但它节省了大量空间。