Expand description
Use rg3d-sound with SDL’s audio subsystem
This crate allows you to use SDL2’s audio backend to output rendered audio data from
rg3d_sound. This provides maximum portability between operating systems as SDL audio works
almost everywhere SDL does, and it will also take advantage of newer audio interfaces like
Pulseaudio and PipeWire on Linux.
§Example
use std::{fs::File, io::BufReader, thread, time::Duration};
use rg3d_sound::{
buffer::{DataSource, SoundBufferResource},
context::SoundContext,
source::{generic::GenericSourceBuilder, Status},
};
let sdl = sdl2::init()?;
let audio = sdl.audio()?;
let (engine, device) = rg3d_sound_sdl::open(&audio, None)?;
device.resume();
let ctx = SoundContext::new();
engine.lock().unwrap().add_context(ctx.clone());
let sound_buffer = SoundBufferResource::new_generic(DataSource::File {
path: "ding.wav".into(),
data: BufReader::new(File::open("ding.wav")?),
})
.expect("Failed to create data source");
let source = GenericSourceBuilder::new()
.with_buffer(sound_buffer)
.with_status(Status::Playing)
.build_source()?;
ctx.state().add_source(source);
thread::sleep(Duration::from_millis(1090));Structs§
- Callback
- An
AudioCallbackused to feed the SDL audio device with rendered audio from aSoundEngine
Functions§
- desired_
spec - Obtain the desired SDL audio parameters for use with
rg3d_sound. This is used internally byopento configure the playback device. - open
- Opens a new audio device.
- to_
tuple_ slice - Converts a slice of
f32values, of even length, to a slice of(f32, f32)tuples. The returned slice will be half the length of the input slice.