【问题标题】: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。

谢谢大家!

【问题讨论】:

    标签: c++ audio sdl sdl-mixer


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-08-31
        • 2012-04-01
        • 1970-01-01
        相关资源
        最近更新 更多