如何在 SDL 中同时播放多个 MP3 文件?

Posted

技术标签:

【中文标题】如何在 SDL 中同时播放多个 MP3 文件?【英文标题】:How to Play Multiple MP3 files simultaneously in SDL? 【发布时间】:2014-02-24 06:34:46 【问题描述】:

我想在 SDL 中播放多个 MP3 文件。使用SDL_Mixer,我可以播放一个MP3文件。

Mix_Music *music = Mix_LoadMUS("music.mp3");

Mix_PlayMusic(music, 0);

但是当我尝试与第一个 MP3 一起播放另一个 MP3 时,第一个停止并播放第二个。有人可以帮忙吗?

【问题讨论】:

不确定 mp3,但似乎可以使用 channels 同时播放波形文件。也许您可以将您的 MP3 转换为 WAV,然后再使用它们? 根据我的要求,我只需要播放 mp3。 mp3 将被动态加载。 【参考方案1】:

SDL_mixer 是一个超级简单的音频库;单一音乐曲目是其限制之一。

您可以将音乐播放为多种音效。不过也有一些缺点:

您必须自己管理暂停/音量/循环,方法是跟踪用于播放声音的通道。不是太难,但它是你必须编写的代码。 声音不会被流式传输,因此您的所有音乐曲目都将被解码并加载到未压缩的 RAM 中。现在未压缩的音频还不错那么 - 要计算未压缩的大小,只需将num_channels * sample_rate * bit_rate * duration_in_seconds 相乘,即为2 * 44100 * 2 * 6010584000 或每分钟约10mb 的立体声,44.1kHz 16 位(即 2 字节)音频。在嵌入式或低端系统中需要注意这一点。

或者,您可以使用支持多个音乐频道的更高级的音频库。

【讨论】:

以上是关于如何在 SDL 中同时播放多个 MP3 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何一次播放多个 mp3/wma 文件?

如何同时播放多个音频文件

如何在 AVAudioPlayer 中循环播放多个音频文件?

如何使用 MediaPlayer 同时播放多个曲目?

ncurses + SLD2 和 SDL2_Mixer:尝试播放 mp3 时没有声音

为啥 SDL_Mixer 不能播放某些 mp3 的音乐?