feat: add random meters in demo

This commit is contained in:
Lucas
2026-09-30 16:09:18 +02:00
parent f4650ece00
commit e661022329
7 changed files with 217 additions and 74 deletions
@@ -1,8 +1,9 @@
use std::collections::HashMap;
use strum::IntoEnumIterator;
use rand::RngExt;
use crate::dsp408::types::ConnectionStatus;
use super::types::{
use crate::dsp408::types::{
Compressor, Crossover, CrossoverFilter, CrossoverFilters, DSPConfigState, DSPState, DelayUnit,
DeviceFlags, DiscreteFrequency, Gate, GraphicEQ, InputChannel, InputChannelState, InputMeters,
InputSource, InputType, Limiter, MatrixRoutes, Meter, OutputChannel, OutputChannelState,
@@ -301,3 +302,32 @@ fn default_meter() -> Meter {
clip: false,
}
}
fn random_meter() -> Meter {
let mut rng = rand::rng();
let rms = rng.random_range(-60.0..=0.0);
let peak = (rms + rng.random_range(0.0..=12.0) as f32).min(12.0);
Meter {
rms,
peak,
clip: peak > 0.0,
}
}
pub fn random_input_meters() -> InputMeters {
InputMeters {
meters: InputChannel::iter()
.map(|channel| (channel, random_meter()))
.collect(),
}
}
pub fn random_output_meters() -> OutputMeters {
OutputMeters {
meters: OutputChannel::iter()
.map(|channel| (channel, random_meter()))
.collect(),
}
}
+10 -9
View File
@@ -8,17 +8,12 @@ use std::{
};
use crate::{
common::errors::DSPError,
dsp408::{
default::{default_input_meters, default_output_meters},
default_dsp_state,
mapper::{
common::errors::DSPError, dsp408::{
client::default::{default_dsp_state, default_input_meters, default_output_meters, random_input_meters, random_output_meters}, mapper::{
self,
constants::{CONFIG_CHUNK_INDEX_MAX, PRESET_INDEX_MAX, delay_range},
response::map_response,
},
protocol::{commands, config::decode_config, frame::extract_frame},
types::{self, ConnectionStatus::Disconnected, DSPMode},
}, protocol::{commands, config::decode_config, frame::extract_frame}, types::{self, ConnectionStatus::Disconnected, DSPMode},
},
};
@@ -1796,7 +1791,13 @@ impl DSP408 {
match self.state.connection {
types::ConnectionStatus::Connected => {
if self.mode == types::DSPMode::Demo {
return Ok((self.input_meters.clone(), self.output_meters.clone()));
self.input_meters = random_input_meters();
self.output_meters = random_output_meters();
return Ok((
self.input_meters.clone(),
self.output_meters.clone(),
));
}
let request = commands::build_get_meter_levels();
+2
View File
@@ -1,2 +1,4 @@
mod dsp408;
mod default;
pub use dsp408::DSP408;
-2
View File
@@ -1,9 +1,7 @@
mod client;
mod default;
mod mapper;
mod protocol;
pub mod types;
pub use client::DSP408;
pub(crate) use default::default_dsp_state;