2

我正在尝试wav在一个看起来像这样的非常简单的程序中播放文件,目前正在尝试使用nim-csfml

import csfml_audio

var alarmsong = newMusic("alarm.wav")
alarmsong.play()

但它似乎依赖于libcsfml.audio的存在,虽然我的程序编译得很好,但当我尝试实际运行它时出现错误

| => ./alarm
could not load: libcsfml-audio.so 

(我有一个libcsfml-audio.dylib,因为我使用了 OSX 共享库csfml/sfml

还有其他方法可以播放.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

谢谢您的帮助!

4

2 回答 2

3

该程序将立即退出;您需要在播放声音时让它保持活力。将此附加到程序中:

import csfml_system

while alarmsong.status == SoundStatus.Playing:
  sleep 100.milliseconds
于 2015-02-19T04:47:35.040 回答
3

要使 nim-csfml 工作,您需要 SFML 2.1 和 CSFML 2.1。此外,对于 Mac OS X,nim-csfml 似乎实际上已经损坏,所以我提出了一个修复请求:https ://github.com/BlaXpirit/nim-csfml/pull/4

其他可以播放声音的模块是sdl_mixersdl2/audioallegro5

作为不使用任何库的仅 OSX 替代方案,通过调用afplay二进制文件:

import osproc
discard execProcess("afplay", ["file.wav"])

编辑1:

当 Nim 报告“无法加载:libcs​​fml-audio.dynlib”时,这也可能意味着该库的依赖项之一丢失或版本错误。特别是 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以查看有关缺少库的错误/警告。

于 2015-02-19T01:45:28.607 回答