🔉 raudio - a simple audio library based on miniaudio - for Crystal
Add to shard.yml:
dependencies:
raudio:
github: kojix2/raudio.crRun shards install. The native library builds automatically.
require "raudio"
Raudio::AudioDevice.open do
Raudio::AudioDevice.master_volume = 0.8
endRaudio::AudioDevice.open do
sound = Raudio::Sound.load("effect.wav")
sound.volume = 0.5
sound.play
while sound.playing?
sleep 10.milliseconds
end
endRaudio::AudioDevice.init
music = Raudio::Music.load("background.mp3")
music.volume = 0.8
music.looping = false # Disable looping (enabled by default)
music.play
loop do
music.update
break unless music.playing?
sleep 10.milliseconds
end
Raudio::AudioDevice.closeRaudio::AudioDevice.open do
wave = Raudio::Wave.load("audio.wav")
sound = Raudio::Sound.from_wave(wave)
sound.play
wave.export("output.wav")
endResources should be explicitly released when done, or use the block form for automatic cleanup.
# Block form (automatic cleanup)
Raudio::Sound.load("effect.wav") do |sound|
sound.play
end
# Manual release
sound = Raudio::Sound.load("effect.wav")
begin
sound.play
ensure
sound.release # or sound.close
endFinalizers are provided as a fallback but explicit cleanup is recommended.
- Non-blocking:
Sound#play/Music#playreturn immediately. Mixing/output is done on a separate audio thread (miniaudio). - Streaming: Call
Music#updateregularly (e.g. once per frame/tick) to refill the buffer and avoid underruns/stutter. - Threading: The library synchronizes internally, but treat the public API as single-threaded. Prefer calling all raudio APIs from one thread (usually the main thread). If you call from multiple threads/fibers, serialize at a higher level.
- Device lifetime: After
AudioDevice.init(or insideAudioDevice.open), the device keeps running untilAudioDevice.close.
WAV, OGG, MP3, FLAC, QOA, XM, MOD
Raudio::AudioDevice- audio device managementRaudio::Sound- short audio clipsRaudio::Music- streaming audioRaudio::Wave- raw waveform dataRaudio::AudioStream- custom streaming
Low-level C bindings: Raudio::LibRaudio
git clone --recursive https://github.com/kojix2/raudio.cr # submodule
make -C ext # build native library
crystal spec # run tests
crystal build examples/simple_sound.cr
./simple_sound # one of the two sounds will playMIT
Dependencies (bundled single-header/native libraries):
- raudio (C library) – zlib
Summary: Project code is MIT, bundled raudio is zlib, and all other bundled dependencies are permissive (Public Domain, MIT-0, MIT, WTFPL v2) with no copyleft obligations.