sfml-audio-fiddleというRubyから音声ファイルを再生するgemを公開しました。
- github https://github.com/bggd/sfml-audio-fiddle
- rubygems https://rubygems.org/gems/sfml-audio-fiddle
SFMLというゲーム/マルチメディア向けC++ライブラリのCバインディングのCSFMLをFiddle(Rubyの標準FFIライブラリ)から呼び出しています。
CSFMLの共有ライブラリがあればLinux/OSX/Windowsで動くはずです。
Fiddleの制約上、構造体の値渡しができないのでsfVector3fを値渡しする必要がある3D音響の機能は使えません。
読める形式:
ogg, wav, flac, aiff, au, raw, paf, svx, nist, voc, ircam, w64, mat4, mat5 pvf, htk, sds, avr, sd2, caf, wve, mpc2k, rf64.
##使い方
gem instal sfml-audio-fiddle
使っているRubyと同じbitバージョンのCSFMLをダウンロードしてcsfml-audio-2.dllとopenal32.dllを、sfml-audio-fiddleを使うスクリプトの実行時にパスが通っている場所(カレントディレクトリ等)に置きます。
APIはキャメルケースがスネークケースになっただけで、ほぼSFMLと同じです。
.get_durationやplaying_offsetはSFMLだとマイクロ秒を使いますがsfml-audio-fiddleでは秒にしています。
###効果音を鳴らす
require 'sfml/audio'
buffer = SFML::SoundBuffer.new 'sfx.wav'
sound = SFML::Sound.new buffer
sound.play
sleep buffer.get_duration + 1
###BGMをストリーミング再生
require 'sfml/audio'
music = SFML::Music.new 'bgm.ogg'
puts "曲の長さ: #{music.get_duration}秒"
music.play
while music.get_status == :playing
sleep 1
end
#ほかのSFMLのRubyバインディング(どちらもC拡張)
rbSFML
sfml-ruby
#ほかのよさげなライブラリ
Seal
使ったことはありませんが手軽に3D音響を使えそうです。
SoLoud
C++のライブラリですがpythonスクリプトから各種バインディングを生成しています。
RPGツクールのRuby(RGSS)にまで対応しています。
高機能で3D音響も使えます。
今のところWindows向けには32bitのバイナリしか配布していないので、今後に期待しています。
自分でビルドする場合にはPremake4からforkしたGENieを使います。
以上です。