将音乐作为 SDL_Mixer 块运行
Posted
技术标签:
【中文标题】将音乐作为 SDL_Mixer 块运行【英文标题】:Running music as SDL_Mixer chunks 【发布时间】:2009-03-07 23:53:46 【问题描述】:目前,SDL_Mixer 有两种声音资源:块和音乐。
除了 API 和支持的格式限制之外,是否有任何理由不将音乐作为 SDL_Chunk 和频道加载和播放? (内存、速度等)
【问题讨论】:
【参考方案1】:API 是真正的问题。 “音乐” API 旨在处理流式压缩音乐,而“声音” API 则不是。再说一次,如果你设法让它在你的应用中工作,那么它就可以工作。
【讨论】:
那么,对于大型声音音乐文件,音乐 API 的加载速度比声音 API 快...? 我想是的。自从我使用 SDL_Mixer 以来已经有一段时间了。只是想我会尝试贡献一点,因为没有其他人在这里回答任何问题...... 我不认为这是为了加快加载速度,我认为这是为了节省内存。原始 PCM 数据非常昂贵。解压缩音乐流并播放它比播放它的计算成本更高,但它节省了大量空间。【参考方案2】:我没有查看 SDL 代码,但我的猜测是“块”用于较小的声音样本,并在“音乐”流式传输(不缓存全部在内存中,但根据需要进行解码和缓冲,假设它会在大多数情况下从头开始播放,并且从那一点开始连续播放,有时可能会重新回到开头)
所以原因是记忆。您不想将 4 分钟的 16 位立体声歌曲解码到内存中,因为如果您尝试它,它将吃掉 44100Hz * 2bytes * 2channels *4minutes *60sec/min == 42336000 字节,当您可以解码和缓冲较小的部分。
OTOH,如果您有大约 10Mb 的 RAM 每分钟要浪费音乐,并且您需要动态解码所消耗的 CPU...您可能会使用块。
【讨论】:
以上是关于将音乐作为 SDL_Mixer 块运行的主要内容,如果未能解决你的问题,请参考以下文章
SDL_Mixer 崩溃一次;现在所有使用 SDL_Mixer 的程序在初始化时都会崩溃