Expand description
An unofficial easy-to-use wrapper around Symphonia for loading audio files. It also handles resampling at load-time.
The resulting DecodedAudio resources are stored in their native sample format whenever
possible to save on memory, and have convenience methods to fill a buffer with f32 samples
from any arbitrary position in the resource in realtime during playback. Alternatively you
can use the DecodedAudioF32 resource if you only need samples in the f32 format.
§Example
// A struct used to load audio files.
let mut loader = SymphoniumLoader::new();
let target_sample_rate = NonZeroU32::new(44100).unwrap();
// Probe the audio file.
let probed = loader.probe_from_file(file_path).unwrap();
// Decode the probed data.
let audio_data = loader
.decode(
// The probed audio data.
probed,
// The target sample rate. If this differs from the
// file's sample rate, then it will be resampled.
// If you wish to never resample, set this to `None`.
Some(target_sample_rate),
// The quality of the resampling algorithm. The
// default is recommended for most applications.
ResampleQuality::default(),
// The maximum size a file can be in bytes before an
// error is returned. This is to protect against
// out of memory errors when loading really long
// audio files. Set to `None` to use the default of
// 1 GB.
None
)
.unwrap();
// Fill a stereo buffer with samples starting at frame 100.
let mut buf_l = vec![0.0f32; 512];
let mut buf_r = vec![0.0f32; 512];
audio_data.fill_stereo(100, &mut buf_l, &mut buf_r);
// Alternatively, if you don't need to save memory, you can
// decode directly to an `f32` format.
let probed = loader.probe_from_file(file_path).unwrap();
let audio_data_f32 = loader
.decode_f32(
probed,
Some(target_sample_rate),
ResampleQuality::Normal,
None
)
.unwrap();
// Print info about the data (`data` is a `Vec<Vec<f32>>`).
println!("num channels: {}" audio_data_f32.data.len());
println!("num frames: {}" audio_data_f32.data[0].len());§Features
By default, only wav and ogg support is enabled. If you need more formats, enable them
as features in your Cargo.toml file like this:
symphonium = { version = "0.8", features = ["mp3", "flac"] }
Available codecs:
aacadpcmalacflacmp1mp2mp3pcmvorbis
Available container formats:
cafisomp4mkvoggaiffwav
Alternatively you can enable the all feature if you want everything, or the open-standards
feature if you want all of the royalty-free open-source standards.
Re-exports§
pub use symphonia;
Modules§
Structs§
- Decode
Stretched Config - Decoded
Audio - A resource of raw audio samples stored in deinterleaved format.
- Decoded
Audio F32 - A resource of raw f32 audio samples stored in deinterleaved format.
- Fill
Channel Error - An error occured while using
DecodedAudio::fill_channel. - Probed
Audio Source - An audio source which has had its metadata probed, but has not been decoded yet.
- Symphonium
Loader - Used to load audio files into RAM. This stores samples in their native sample format when possible to save memory.
Enums§
- Decoded
Audio Type - The format of the raw audio samples stored in deinterleaved format.
- Resample
Quality - The quality of the resampling algorithm used for a
PacketResampleror aResamplercreated withresampler_from_quality.
Statics§
- DEFAULT_
MAX_ BYTES - The default maximum size of an audio file in bytes.