执子之手

与子偕老


  • 首页

  • 分类

  • 归档

  • 标签

  • 关于

  • 搜索
close

如何在Mac上编译vcmi(续)-解决无法播放MP3的问题

时间: 2020-06-21   |   分类: 游戏     |   阅读: 932 字 ~2分钟   |   访问: 0

1. 问题

按照上一篇文档的步骤编译之后,发现mp3格式的背景音乐无法播放。通过直接执行vcmiclient可以看到在控制台中输出如下信息:

1Warning: Cannot open Music/MainMenu: Unrecognized audio format
2Unable to play music (music parameter was NULL)

原因是我本地环境使用的sdl2_mixer是通过brew安装的,当时无法按照官方文档介绍通过brew install sdl2_mixer --with-smpeg2进行安装。 因为发现无法播放mp3音乐,所以我对这个库进行了一些了解,发现brew官方的版本屏蔽了mp3格式的支持。查看brew官方的源码可以看到:

 1def install
 2    inreplace "SDL2_mixer.pc.in", "@prefix@", HOMEBREW_PREFIX
 3
 4    args = %W[
 5      --prefix=#{prefix}
 6      --disable-dependency-tracking
 7      --disable-music-flac
 8      --disable-music-flac-shared
 9      --disable-music-midi-fluidsynth
10      --disable-music-midi-fluidsynth-shared
11      --disable-music-mod-mikmod-shared
12      --disable-music-mod-modplug-shared
13      --disable-music-mp3-mpg123
14      --disable-music-mp3-mpg123-shared
15      --disable-music-mp3-smpeg
16      --disable-music-ogg-shared
17      --enable-music-mod-mikmod
18      --enable-music-mod-modplug
19      --enable-music-ogg
20    ]
21
22    system "./configure", *args
23    system "make", "install"
24  end

可以看到有关mp3的选项都被disabled掉了。

2. 解决办法

brew官方的版本不支持mp3,而且也不提供定制参数。所以只能通过手工编译源码的方式解决。可以使用brew --build-from-source功能简化手工编译的过程。 下载上面的rb文件,编辑如下:

 1...
 2  # 经过验证,可以只增加 mpg123 这一个依赖库。  
 3  depends_on "mpg123"
 4  # 经过验证,可以不添加smpeg2,但需要同时启用相应的disable选项
 5  #depends_on "smpeg2"
 6...
 7# 屏蔽mp3有关的几个的几个disable选项,相当于启用mp3播放功能
 8# 屏蔽mpg123选项,但是继续保留disable shared mpg123的选项,禁用动态链接
 9#      --disable-music-mp3-mpg123
10      --disable-music-mp3-mpg123-shared
11# 继续屏蔽smpeg2
12      --disable-music-mp3-smpeg

特别注意:

  • 需要保留--disable-music-mp3-mpg123-shared这个选项,否则在libSDL2_mixer.dylib的依赖表中无法看到libmpg123,从而导致使用cpack打包的时候无法侦测到libmpg123这个依赖库;
  • 猜测是因为屏蔽shared之后会使用动态加载动态库的方式,这种方式不会出现在依赖库列表中。

然后使用编译源码的方式安装:

1# 首先卸载已经安装的版本
2brew remove sdl2_mixer
3# 编译安装
4brew install --build-from-source ./sdl2_mixer

这样brew就会读取本地的sdl2_mixer.rb文件,并按照指定的参数进行编译安装了。安装成功之后的sdl2_mixer提供mp3的支持。 不需要重新编译vcmi,直接运行之前编译成功的版本就可以发现mp3格式的背景音乐可以正常播放了!

附录、参考资料

  • sdl2_mixer on github

更新记录

  • 2020.07.06 明确只需要依赖mpg123这个库即可,明确编译方法。
#Mac# #英雄无敌# #Heroes2# #HoMM#
如何在Mac上编译vcmi(续)-cpack打包后异常退出
如何在Mac上编译vcmi
  • 文章目录
  • 站点概览
Orchidflower

Orchidflower

Do one thing at a time, and do well.

77 日志
6 分类
84 标签
GitHub 知乎 OSC 豆瓣
  • 1. 问题
  • 2. 解决办法
  • 附录、参考资料
  • 更新记录
© 2009 - 2024 执子之手
Powered by - Hugo v0.113.0
Theme by - NexT
ICP - 鲁ICP备17006463号-1
0%