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

Posted

技术标签:

【中文标题】为啥 SDL_Mixer 不能播放某些 mp3 的音乐?【英文标题】:Why would SDL_Mixer not play music for certain mp3s?为什么 SDL_Mixer 不能播放某些 mp3 的音乐? 【发布时间】:2009-01-20 00:52:04 【问题描述】:

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

我正在创建的应用程序中使用 SDL_Mixer 播放音乐。在某些歌曲(实际上是整张专辑)上,音乐根本不会播放而不会返回任何错误。音乐数据使用 Mix_LoadMUS 成功加载,当使用该数据执行 Mix_PlayMusic 时,它奇怪地返回 0 表示成功但不播放音乐。我还尝试阅读 Mix_GetError() 和 SDL_GetError() (我相信它们是相同的),看看它是否会引发错误,但没有这样的运气。

我的问题是,SDL_mixer 无法播放特定 mp3 的其他原因是什么?

我知道 mp3 的功能很强大,因为我可以在其他音乐播放器中播放它们。我还知道他们没有在播放(而不是音量被调低),因为 Mix_PlayingMusic 返回 0。

谢谢大家!

【问题讨论】:

【参考方案1】:

这实际上是那台特定计算机的声音问题。在另一台机器上尝试相同的测试时,声音完美无缺。只是一个简短的说明,以防其他人遇到此问题。

【讨论】:

【参考方案2】:

MP3 算法的不同实现允许对格式的不同级别的一致性。大多数音乐播放器都非常宽容,因为大多数用户宁愿听到断断续续的声音也不愿听到什么,但常见的播放库容忍度要低得多。

我建议在音频样本编辑器(例如 Audacity)中打开有问题的(或所有)mp3,然后重新导出 mp3。由于 mp3 压缩本质上是有损的,因此您可能会损失一点质量,但它可能会解决播放问题。

【讨论】:

我遇到的主要问题是该应用程序是用来播放其他用户的媒体的,所以虽然这可能有助于我的系统启动和运行,但我无法转换其他用户的 MP3,除非我有一种编程方式。【参考方案3】:

我遇到了同样的问题,大胆地重新导出 mp3 文件并没有帮助,但是通过执行以下操作: if (Mix_PlayingMusic() == 0) Mix_PlayMusic() 在事件循环中,音乐在 2 或 3 次尝试后播放(每次运行程序时都不同)。 另一种解决方案是将音乐转换为 .ogg 文件。

【讨论】:

以上是关于为啥 SDL_Mixer 不能播放某些 mp3 的音乐?的主要内容,如果未能解决你的问题,请参考以下文章

mciSendString为啥有的MP3音乐播放不出来

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

为啥某些 MP4 文件不能通过 HTML5 播放?

如何像 SDL_Mixer 那样播放多种声音,但在 SDL2 中是原生的?

为啥我无法在 android 中播放 mp3 文件?

如何确切地知道为啥声音开始播放?