tiramisu/audio
Types
Type of audio (global or positional)
pub type Audio {
GlobalAudio(buffer: AudioBuffer, config: AudioConfig)
PositionalAudio(
buffer: AudioBuffer,
config: AudioConfig,
ref_distance: Float,
rolloff_factor: Float,
max_distance: Float,
)
}
Constructors
-
GlobalAudio(buffer: AudioBuffer, config: AudioConfig)Global audio (2D, same volume everywhere)
-
PositionalAudio( buffer: AudioBuffer, config: AudioConfig, ref_distance: Float, rolloff_factor: Float, max_distance: Float, )Positional audio (3D, volume based on distance)
Arguments
- ref_distance
-
Maximum hearing distance
- rolloff_factor
-
How quickly audio fades with distance
- max_distance
-
Maximum distance where audio can be heard
Audio buffer type (opaque, wraps Web Audio API AudioBuffer)
pub type AudioBuffer
Audio playback configuration
pub type AudioConfig {
AudioConfig(
state: AudioState,
volume: Float,
loop: Bool,
playback_rate: Float,
fade: FadeConfig,
group: option.Option(AudioGroup),
on_end: option.Option(fn() -> Nil),
)
}
Constructors
-
AudioConfig( state: AudioState, volume: Float, loop: Bool, playback_rate: Float, fade: FadeConfig, group: option.Option(AudioGroup), on_end: option.Option(fn() -> Nil), )Arguments
- state
-
Playback state (Playing, Stopped, Paused)
- volume
-
Volume (0.0 to 1.0)
- loop
-
Whether to loop the audio
- playback_rate
-
Playback rate (1.0 = normal speed)
- fade
-
Fade configuration for state transitions
- group
-
Audio group for volume control (optional)
- on_end
-
Callback when audio ends (for non-looping audio)
Audio group categories for volume control
pub type AudioGroup {
SFX
Music
Voice
Ambient
Custom(String)
}
Constructors
-
SFXSound effects (footsteps, gunshots, etc.)
-
MusicBackground music
-
VoiceVoice lines and dialogue
-
AmbientAmbient sounds (wind, rain, etc.)
-
Custom(String)Custom group with a name
Opaque handle to a THREE.Audio or THREE.PositionalAudio object
pub type AudioSource
Audio playback state
pub type AudioState {
Playing
Stopped
Paused
}
Constructors
-
PlayingAudio is playing
-
StoppedAudio is stopped (reset to beginning)
-
PausedAudio is paused (can be resumed)
Fade configuration for smooth transitions
pub type FadeConfig {
NoFade
Fade(duration_ms: Int)
}
Constructors
-
NoFadeNo fade (instant transition)
-
Fade(duration_ms: Int)Fade in/out over specified milliseconds
Values
pub fn global(buffer: AudioBuffer, config: AudioConfig) -> Audio
Create global audio (2D, same volume everywhere)
pub fn positional(
buffer: AudioBuffer,
config: AudioConfig,
) -> Audio
Create a default positional audio configuration
pub fn with_fade(
config: AudioConfig,
duration_ms: Int,
) -> AudioConfig
Set fade configuration
pub fn with_group(
config: AudioConfig,
group: AudioGroup,
) -> AudioConfig
Set audio group in config
pub fn with_loop(config: AudioConfig, loop: Bool) -> AudioConfig
Set looping in config
pub fn with_max_distance(audio: Audio, distance: Float) -> Audio
Set maximum distance for positional audio
pub fn with_no_fade(config: AudioConfig) -> AudioConfig
Set no fade (instant transitions)
pub fn with_on_end(
config: AudioConfig,
callback: fn() -> Nil,
) -> AudioConfig
Set callback to be called when audio ends (for non-looping audio)
This is useful for one-shot sounds like SFX where you need to know when the sound has finished playing.
Example
audio.config()
|> audio.with_state(audio.Playing)
|> audio.with_on_end(fn() {
// Audio finished playing
io.println("SFX finished!")
})
pub fn with_playback_rate(
config: AudioConfig,
rate: Float,
) -> AudioConfig
Set playback rate in config (1.0 = normal, 2.0 = double speed, etc.)
pub fn with_ref_distance(audio: Audio, distance: Float) -> Audio
Set reference distance for positional audio
pub fn with_rolloff_factor(audio: Audio, factor: Float) -> Audio
Set rolloff factor for positional audio
pub fn with_state(
config: AudioConfig,
state: AudioState,
) -> AudioConfig
Set playback state (Playing, Stopped, Paused)
pub fn with_volume(
config: AudioConfig,
volume: Float,
) -> AudioConfig
Set volume in config (0.0 to 1.0)