Skip to main content

rust_audio_api/nodes/
mod.rs

1use crate::types::AudioUnit;
2
3pub mod convolver;
4pub mod delay;
5pub mod file;
6pub mod filter;
7pub mod gain;
8pub mod microphone;
9pub mod mixer;
10pub mod oscillator;
11pub mod resampler;
12
13pub use convolver::{ConvolverConfig, ConvolverNode};
14pub use delay::DelayNode;
15pub use file::FileNode;
16pub use filter::{FilterNode, FilterType};
17pub use gain::GainNode;
18pub use microphone::MicrophoneNode;
19pub use mixer::MixerNode;
20pub use oscillator::OscillatorNode;
21
22/// Represents the different types of audio nodes available in the library.
23///
24/// Each variant wraps a specific node implementation.
25pub enum NodeType {
26    /// Adjusts the volume of the audio signal.
27    Gain(GainNode),
28    /// Generates periodic waveforms (e.g., sine waves).
29    Oscillator(OscillatorNode),
30    /// Captures audio from the system's default microphone.
31    Microphone(MicrophoneNode),
32    /// Reads audio data from a file.
33    File(FileNode),
34    /// Mixes multiple audio signals together.
35    Mixer(MixerNode),
36    /// Delays the audio signal by a specified amount of time.
37    Delay(DelayNode),
38    /// Applies convolution (e.g., for reverb or IR effects).
39    Convolver(ConvolverNode),
40    /// Applies biquad filtering (e.g., low-pass, high-pass).
41    Filter(FilterNode),
42}
43
44impl NodeType {
45    /// Pulls audio data.
46    /// - `input`: Audio segment processed by upstream nodes
47    /// - `output`: Segment to write calculated audio into
48    #[inline(always)]
49    pub fn process(&mut self, input: Option<&AudioUnit>, output: &mut AudioUnit) {
50        match self {
51            NodeType::Gain(node) => node.process(input, output),
52            NodeType::Oscillator(node) => node.process(input, output),
53            NodeType::Microphone(node) => node.process(input, output),
54            NodeType::File(node) => node.process(input, output),
55            NodeType::Mixer(node) => node.process(input, output),
56            NodeType::Delay(node) => node.process(input, output),
57            NodeType::Convolver(node) => node.process(input, output),
58            NodeType::Filter(node) => node.process(input, output),
59        }
60    }
61}