2

wav次のような非常に単純なプログラムでファイルを再生しようとしていますが、現在nim-csfmlを使用しようとしています:

import csfml_audio

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

しかし、o の存在に依存しているように見えますlibcsfml.audi。私のプログラムは正常にコンパイルされますが、実際に実行しようとするとエラーが発生します。

| => ./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/binis where libcsfml-audio.dylibis.) を介してコンパイルを試みました

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 が必要です。また、nim-csfml は実際には Mac OS X で壊れているようです。そのため、プル リクエストで修正を行いました: https://github.com/BlaXpirit/nim-csfml/pull/4

サウンドを再生できるその他のモジュールは、 sdl_mixersdl2/audio、およびallegro5です。

ライブラリを使用しない OSX 専用の代替手段として、afplayバイナリを呼び出します。

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

編集1:

Nim が「読み込めませんでした: libcs​​fml-audio.dynlib」と報告した場合、そのライブラリの依存関係の 1 つが欠落しているか、バージョンが間違っている可能性もあります。特に SFML 2.2 は CSFML 2.1 では動作しません。libsfml-audio.dynlib が LD_LIBRARY_PATH にもあることを確認してください。それでもうまくいかない場合は、次のような通常の C CSFML の例をコンパイルして実行してみてください。

でコンパイルして、clang -o mainpage -lcsfml-graphics -lcsfml-audio -lGL -lGLEW mainpage.c不足しているライブラリに関するエラー/警告を確認します。

于 2015-02-19T01:45:28.607 に答える