#dsp #bevy #gamedev #fundsp

bevy_procedural_audio

A Bevy plugin that integrates FunDSP into Bevy

2 unstable releases

Uses new Rust 2024

new 0.5.0 May 16, 2025
0.4.0 May 15, 2025

#497 in Audio

36 downloads per month

MIT/Apache

54KB
610 lines

Bevy Procedural Audio

CI Crates.io Crates.io docs.rs

A third party Bevy plugin that integrates FunDSP into Bevy.

bevy_procedural_audio supports integration for bevy_audio, bevy_kira_audio, and bevy_oddio.

WARNING: Lower your volume before testing your sounds!

Remember to lower the volume by passing the settings with DspManager::add_graph_with_settings or multiplying your DSP graph with a low constant (lower than 1.0).

Usage

#![allow(clippy::precedence)]

use bevy::prelude::*;

use bevy_procedural_audio::prelude::*;

fn main() {
    App::new()
        .add_plugins((
            DefaultPlugins,
            DspPlugin::default(),
        ))
        .add_dsp_source(white_noise, SourceType::Dynamic)
        .add_systems(PostStartup, play_noise)
        .run();
}

fn white_noise() -> impl AudioUnit {
    white() >> split::<U2>() * 0.2
}

fn play_noise(
    mut commands: Commands,
    mut assets: ResMut<Assets<DspSource>>,
    dsp_manager: Res<DspManager>,
) {
    let source = assets.add(
        dsp_manager
            .get_graph(white_noise)
            .unwrap_or_else(|| panic!("DSP source not found!"))
            .clone(),
    );
    commands.spawn(AudioPlayer(source));
}

Acknowledgement

I'd like to offer a big thank you to the authors of FunDSP and Bevy for making this plugin possible.

License

bevy_procedural_audio is distributed under the terms of either the MIT license or the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT for details.

Dependencies

~36–74MB
~1M SLoC