我正在尝试在一个非常简单的程序中播放wav
文件,目前正在尝试使用nim-csfml:
import csfml_audio
var alarmsong = newMusic("alarm.wav")
alarmsong.play()
但它似乎依赖于libcsfml.audi
o的存在,而我的程序编译得很好,当我尝试实际运行它时出现错误
| => ./alarm
could not load: libcsfml-audio.so
(我有一个libcsfml-audio.dylib
,因为我使用了csfml/sfml
的OSX共享库
还有其他方法可以在.wav
中播放Nim
文件吗?
修改1:
在@ def-制作PR后,我现在得到一个不同的,稍微更安慰的错误,这可能是由于对nim如何处理共享库的一些不太了解:
| => ./alarm
could not load: libcsfml-audio.dylib
我将path = "/usr/local/lib"
添加到我的nim.cfg
文件中,但似乎没有任何影响。我还导出$LD_LIBRARY_PATH="/usr/local/lib"
(/usr/local/bin
是libcsfml-audio.dylib
所在的位置。),并尝试通过
nim c alarm.nim --clib:/usr/local/lib/libcsfml-audio.dylib
感谢您的帮助!
答案 0 :(得分:3)
要使nim-csfml正常工作,您需要SFML 2.1和CSFML 2.1。此外,似乎nim-csfml实际上已经破坏了Mac OS X,因此我发出了一个带有修复的拉取请求:https://github.com/BlaXpirit/nim-csfml/pull/4
其他可播放声音的模块包括sdl_mixer,sdl2/audio和allegro5。
作为仅使用OSX的替代方案,不使用任何库,通过调用afplay
二进制文件:
import osproc
discard execProcess("afplay", ["file.wav"])
<强> EDIT1:强>
当Nim报告&#34;无法加载时:libcsfml-audio.dynlib&#34;这也可能意味着该库的某个依赖项缺失或版本错误。特别是SFML 2.2不适用于CSFML 2.1。确保libsfml-audio.dynlib也在LD_LIBRARY_PATH中。如果这也不起作用,您可以尝试编译并运行像这样的常规C CSFML示例:https://gist.github.com/def-/fee8bb041719337c8812
使用clang -o mainpage -lcsfml-graphics -lcsfml-audio -lGL -lGLEW mainpage.c
进行编译,以查看有关缺少库的错误/警告。
答案 1 :(得分:3)
这个程序会立即退出;你需要在声音播放时保持活着。将此附加到程序:
import csfml_system
while alarmsong.status == SoundStatus.Playing:
sleep 100.milliseconds