在OSX上在Nim中播放.wav文件的简单方法是什么?

时间:2015-02-19 01:03:48

标签: macos audio nim

我正在尝试在一个非常简单的程序中播放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/binlibcsfml-audio.dylib所在的位置。),并尝试通过

进行编译
nim c alarm.nim --clib:/usr/local/lib/libcsfml-audio.dylib

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

要使nim-csfml正常工作,您需要SFML 2.1和CSFML 2.1。此外,似乎nim-csfml实际上已经破坏了Mac OS X,因此我发出了一个带有修复的拉取请求:https://github.com/BlaXpirit/nim-csfml/pull/4

其他可播放声音的模块包括sdl_mixersdl2/audioallegro5

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

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

<强> EDIT1:

当Nim报告&#34;无法加载时:libcs​​fml-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