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

标签 c++ audio mp3 sdl sdl-mixer

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

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

Mix_PlayMusic(music, 0);

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

最佳答案

SDL_mixer 是一个 super 简单的音频库;单一音乐轨道是其局限性之一。

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

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

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

关于c++ - 如何在 SDL 中同时播放多个 MP3 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21980507/

相关文章:

c++ - 为变量分配新值时内存泄漏?

c++ - C++中模板类型中的类层次结构

android - 使用jlayer在Android上进行慢速MP3解码

Javascript:如何暂停/停止当前播放的音频?

audio - 播放 “mp3”音频文件的简单gstreamer代码出错

c++ - 检测图像中的正方形

c++ - 将 BSTR 从 C++ DLL 函数传递到 VB6 应用程序

SDL 的 ubuntu 问题

c# - 当我尝试通过HttpWebRequest上传音频文件时,Hololens应用程序卡住了

android - Phonegap记录声音。听到声音后保存到文件