From cf29a6d26b500d26f63ced1cd1781e07617cb138 Mon Sep 17 00:00:00 2001 From: jess Date: Mon, 30 Mar 2026 21:35:35 -0700 Subject: [PATCH] scaffold missing module crates --- oxide-modules/click_instrument/Cargo.toml | 11 +++++++ oxide-modules/click_instrument/src/lib.rs | 11 +++++++ oxide-modules/compressor/Cargo.toml | 11 +++++++ oxide-modules/compressor/src/lib.rs | 19 ++++++++++++ oxide-modules/eq/Cargo.toml | 11 +++++++ oxide-modules/eq/src/lib.rs | 19 ++++++++++++ oxide-modules/gain/Cargo.toml | 11 +++++++ oxide-modules/gain/src/lib.rs | 22 ++++++++++++++ oxide-modules/input/src/lib.rs | 36 +++++++++++++++++++++++ oxide-modules/metronome_midi/Cargo.toml | 11 +++++++ oxide-modules/metronome_midi/src/lib.rs | 11 +++++++ oxide-modules/midi_player/Cargo.toml | 11 +++++++ oxide-modules/midi_player/src/lib.rs | 11 +++++++ oxide-modules/output/Cargo.toml | 10 +++++++ oxide-modules/output/src/lib.rs | 33 +++++++++++++++++++++ oxide-modules/phase_compressor/Cargo.toml | 11 +++++++ oxide-modules/phase_compressor/src/lib.rs | 19 ++++++++++++ 17 files changed, 268 insertions(+) create mode 100644 oxide-modules/click_instrument/Cargo.toml create mode 100644 oxide-modules/click_instrument/src/lib.rs create mode 100644 oxide-modules/compressor/Cargo.toml create mode 100644 oxide-modules/compressor/src/lib.rs create mode 100644 oxide-modules/eq/Cargo.toml create mode 100644 oxide-modules/eq/src/lib.rs create mode 100644 oxide-modules/gain/Cargo.toml create mode 100644 oxide-modules/gain/src/lib.rs create mode 100644 oxide-modules/metronome_midi/Cargo.toml create mode 100644 oxide-modules/metronome_midi/src/lib.rs create mode 100644 oxide-modules/midi_player/Cargo.toml create mode 100644 oxide-modules/midi_player/src/lib.rs create mode 100644 oxide-modules/phase_compressor/Cargo.toml create mode 100644 oxide-modules/phase_compressor/src/lib.rs diff --git a/oxide-modules/click_instrument/Cargo.toml b/oxide-modules/click_instrument/Cargo.toml new file mode 100644 index 0000000..8c7f562 --- /dev/null +++ b/oxide-modules/click_instrument/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oxide-click-instrument" +version = "0.1.0" +edition = "2024" + +[lib] +name = "oxide_click_instrument" +path = "src/lib.rs" + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/click_instrument/src/lib.rs b/oxide-modules/click_instrument/src/lib.rs new file mode 100644 index 0000000..0d48200 --- /dev/null +++ b/oxide-modules/click_instrument/src/lib.rs @@ -0,0 +1,11 @@ +use oxforge::mdk::*; + +pub struct ClickInstrumentModule; + +impl OxideModule for ClickInstrumentModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, _ports: Ports, _context: &ProcessContext) {} +} diff --git a/oxide-modules/compressor/Cargo.toml b/oxide-modules/compressor/Cargo.toml new file mode 100644 index 0000000..1c47a2d --- /dev/null +++ b/oxide-modules/compressor/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oxide-compressor" +version = "0.1.0" +edition = "2024" + +[lib] +name = "oxide_compressor" +path = "src/lib.rs" + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/compressor/src/lib.rs b/oxide-modules/compressor/src/lib.rs new file mode 100644 index 0000000..5c7dbdf --- /dev/null +++ b/oxide-modules/compressor/src/lib.rs @@ -0,0 +1,19 @@ +use oxforge::mdk::*; + +pub struct CompressorModule; + +impl OxideModule for CompressorModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, ports: Ports, _context: &ProcessContext) { + let Some(audio_in) = ports.main_audio_in else { return }; + let Some(mut audio_out) = ports.main_audio_out else { return }; + + let inp = audio_in.buffer(); + let out = audio_out.buffer_mut(); + let len = out.len().min(inp.len()); + out[..len].copy_from_slice(&inp[..len]); + } +} diff --git a/oxide-modules/eq/Cargo.toml b/oxide-modules/eq/Cargo.toml new file mode 100644 index 0000000..d50d26a --- /dev/null +++ b/oxide-modules/eq/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oxide-eq" +version = "0.1.0" +edition = "2024" + +[lib] +name = "oxide_eq" +path = "src/lib.rs" + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/eq/src/lib.rs b/oxide-modules/eq/src/lib.rs new file mode 100644 index 0000000..bba5870 --- /dev/null +++ b/oxide-modules/eq/src/lib.rs @@ -0,0 +1,19 @@ +use oxforge::mdk::*; + +pub struct EqModule; + +impl OxideModule for EqModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, ports: Ports, _context: &ProcessContext) { + let Some(audio_in) = ports.main_audio_in else { return }; + let Some(mut audio_out) = ports.main_audio_out else { return }; + + let inp = audio_in.buffer(); + let out = audio_out.buffer_mut(); + let len = out.len().min(inp.len()); + out[..len].copy_from_slice(&inp[..len]); + } +} diff --git a/oxide-modules/gain/Cargo.toml b/oxide-modules/gain/Cargo.toml new file mode 100644 index 0000000..bc520ae --- /dev/null +++ b/oxide-modules/gain/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oxide-gain" +version = "0.1.0" +edition = "2024" + +[lib] +name = "oxide_gain" +path = "src/lib.rs" + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/gain/src/lib.rs b/oxide-modules/gain/src/lib.rs new file mode 100644 index 0000000..12e271d --- /dev/null +++ b/oxide-modules/gain/src/lib.rs @@ -0,0 +1,22 @@ +use oxforge::mdk::*; + +pub struct GainModule; + +impl OxideModule for GainModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, ports: Ports, context: &ProcessContext) { + let Some(audio_in) = ports.main_audio_in else { return }; + let Some(mut audio_out) = ports.main_audio_out else { return }; + + let gain = context.params.get("gain").copied().unwrap_or(1.0); + let inp = audio_in.buffer(); + let out = audio_out.buffer_mut(); + let len = out.len().min(inp.len()); + for i in 0..len { + out[i] = inp[i] * gain; + } + } +} diff --git a/oxide-modules/input/src/lib.rs b/oxide-modules/input/src/lib.rs index e69de29..afde6e7 100644 --- a/oxide-modules/input/src/lib.rs +++ b/oxide-modules/input/src/lib.rs @@ -0,0 +1,36 @@ +use oxforge::mdk::*; + +pub struct InputDeviceModule; + +#[unsafe(no_mangle)] +pub extern "C" fn create_module(config: &GlobalConfig) -> *mut Box { + let module = InputDeviceModule::new(config); + let boxed_trait: Box = Box::new(module); + Box::into_raw(Box::new(boxed_trait)) +} + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn destroy_module(module_ptr: *mut Box) { + if !module_ptr.is_null() { + let _ = unsafe { Box::from_raw(module_ptr) }; + } +} + +impl OxideModule for InputDeviceModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, ports: Ports, context: &ProcessContext) { + let Some(audio_in) = ports.main_audio_in else { return }; + let Some(mut audio_out) = ports.main_audio_out else { return }; + + let trim = context.params.get("trim").copied().unwrap_or(1.0); + let inp = audio_in.buffer(); + let out = audio_out.buffer_mut(); + let len = out.len().min(inp.len()); + for i in 0..len { + out[i] = inp[i] * trim; + } + } +} diff --git a/oxide-modules/metronome_midi/Cargo.toml b/oxide-modules/metronome_midi/Cargo.toml new file mode 100644 index 0000000..58a0c9e --- /dev/null +++ b/oxide-modules/metronome_midi/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oxide-metronome-midi" +version = "0.1.0" +edition = "2024" + +[lib] +name = "oxide_metronome_midi" +path = "src/lib.rs" + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/metronome_midi/src/lib.rs b/oxide-modules/metronome_midi/src/lib.rs new file mode 100644 index 0000000..2a0e95e --- /dev/null +++ b/oxide-modules/metronome_midi/src/lib.rs @@ -0,0 +1,11 @@ +use oxforge::mdk::*; + +pub struct MetronomeMidiModule; + +impl OxideModule for MetronomeMidiModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, _ports: Ports, _context: &ProcessContext) {} +} diff --git a/oxide-modules/midi_player/Cargo.toml b/oxide-modules/midi_player/Cargo.toml new file mode 100644 index 0000000..579d7bf --- /dev/null +++ b/oxide-modules/midi_player/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oxide-midi-player" +version = "0.1.0" +edition = "2024" + +[lib] +name = "oxide_midi_player" +path = "src/lib.rs" + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/midi_player/src/lib.rs b/oxide-modules/midi_player/src/lib.rs new file mode 100644 index 0000000..40d1ade --- /dev/null +++ b/oxide-modules/midi_player/src/lib.rs @@ -0,0 +1,11 @@ +use oxforge::mdk::*; + +pub struct MidiPlayerModule; + +impl OxideModule for MidiPlayerModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, _ports: Ports, _context: &ProcessContext) {} +} diff --git a/oxide-modules/output/Cargo.toml b/oxide-modules/output/Cargo.toml index e69de29..2d97384 100644 --- a/oxide-modules/output/Cargo.toml +++ b/oxide-modules/output/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "output_device" +version = "0.1.0" +edition = "2024" + +[lib] +crate-type = ["cdylib"] + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/output/src/lib.rs b/oxide-modules/output/src/lib.rs index e69de29..0f1cf8d 100644 --- a/oxide-modules/output/src/lib.rs +++ b/oxide-modules/output/src/lib.rs @@ -0,0 +1,33 @@ +use oxforge::mdk::*; + +pub struct OutputDeviceModule; + +#[unsafe(no_mangle)] +pub extern "C" fn create_module(config: &GlobalConfig) -> *mut Box { + let module = OutputDeviceModule::new(config); + let boxed_trait: Box = Box::new(module); + Box::into_raw(Box::new(boxed_trait)) +} + +#[unsafe(no_mangle)] +pub unsafe extern "C" fn destroy_module(module_ptr: *mut Box) { + if !module_ptr.is_null() { + let _ = unsafe { Box::from_raw(module_ptr) }; + } +} + +impl OxideModule for OutputDeviceModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, ports: Ports, _context: &ProcessContext) { + let Some(audio_in) = ports.main_audio_in else { return }; + let Some(mut audio_out) = ports.main_audio_out else { return }; + + let inp = audio_in.buffer(); + let out = audio_out.buffer_mut(); + let len = out.len().min(inp.len()); + out[..len].copy_from_slice(&inp[..len]); + } +} diff --git a/oxide-modules/phase_compressor/Cargo.toml b/oxide-modules/phase_compressor/Cargo.toml new file mode 100644 index 0000000..2a02818 --- /dev/null +++ b/oxide-modules/phase_compressor/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "oxide-phase-compressor" +version = "0.1.0" +edition = "2024" + +[lib] +name = "oxide_phase_compressor" +path = "src/lib.rs" + +[dependencies] +oxforge = { path = "../../oxforge" } diff --git a/oxide-modules/phase_compressor/src/lib.rs b/oxide-modules/phase_compressor/src/lib.rs new file mode 100644 index 0000000..4730b28 --- /dev/null +++ b/oxide-modules/phase_compressor/src/lib.rs @@ -0,0 +1,19 @@ +use oxforge::mdk::*; + +pub struct PhaseCompressorModule; + +impl OxideModule for PhaseCompressorModule { + fn new(_config: &GlobalConfig) -> Self { + Self + } + + fn process(&mut self, ports: Ports, _context: &ProcessContext) { + let Some(audio_in) = ports.main_audio_in else { return }; + let Some(mut audio_out) = ports.main_audio_out else { return }; + + let inp = audio_in.buffer(); + let out = audio_out.buffer_mut(); + let len = out.len().min(inp.len()); + out[..len].copy_from_slice(&inp[..len]); + } +}