feat: decode meters clip indicators

This commit is contained in:
2026-07-31 13:54:48 +02:00
parent f6b6beda5e
commit 3d94df0b7a
6 changed files with 158 additions and 20 deletions
+38 -2
View File
@@ -1,8 +1,12 @@
use std::{collections::HashMap, net::IpAddr};
use strum_macros::{EnumCount, EnumIter};
#[cfg(feature = "serialization")]
use serde::{Deserialize, Serialize};
// ------ Enums ------
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum DelayUnit {
Millisecond,
@@ -10,6 +14,7 @@ pub enum DelayUnit {
Feet,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EnumIter, EnumCount, PartialOrd, Ord)]
pub enum InputChannel {
InA,
@@ -18,6 +23,7 @@ pub enum InputChannel {
InD,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EnumIter, EnumCount, PartialOrd, Ord)]
pub enum OutputChannel {
Out1,
@@ -30,12 +36,14 @@ pub enum OutputChannel {
Out8,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub enum Channel {
Input(InputChannel),
Output(OutputChannel),
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Ratio {
#[default]
@@ -57,6 +65,7 @@ pub enum Ratio {
Limit,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum CrossoverFilter {
#[default]
@@ -96,6 +105,7 @@ pub enum PEQBand {
B9,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum PEQFilter {
Peak,
@@ -109,6 +119,7 @@ pub enum PEQFilter {
AllPass2,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, EnumIter)]
pub enum DiscreteFrequency {
F20,
@@ -144,6 +155,7 @@ pub enum DiscreteFrequency {
F20000,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub enum InputType {
Analog,
@@ -152,6 +164,7 @@ pub enum InputType {
SineWave,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct InputSource {
pub r#type: InputType,
@@ -194,6 +207,7 @@ pub struct PresetName {
pub name: String,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct DeviceFlags {
pub is_locked: bool,
@@ -204,9 +218,17 @@ pub struct AuthenticationResult {
pub success: bool,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct Meter {
pub level: f32,
pub clip: bool,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub struct Meters {
pub levels: Vec<f32>,
pub channels: Vec<Meter>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
@@ -238,7 +260,7 @@ pub enum DeviceResponseType {
}
// ------ State ------
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct Gate {
pub attack: u16,
@@ -247,6 +269,7 @@ pub struct Gate {
pub threshold: f32,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct Compressor {
pub threshold: f32,
@@ -256,6 +279,7 @@ pub struct Compressor {
pub knee: u16,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct Limiter {
pub threshold: f32,
@@ -263,12 +287,14 @@ pub struct Limiter {
pub release: u16,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct GraphicEQ {
pub gains: Vec<f32>,
pub bypass: bool,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq)]
pub struct PEQ {
pub gain: f32,
@@ -278,30 +304,35 @@ pub struct PEQ {
pub bypass: bool,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct CrossoverFilters {
pub high_pass: Crossover,
pub low_pass: Crossover,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub struct Crossover {
pub frequency: f32,
pub slope: CrossoverFilter,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct MatrixRoutes {
pub connected: Vec<InputChannel>,
pub gains: Vec<f32>,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct PEQChain {
pub bands: Vec<PEQ>,
pub bypass: bool,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub struct PresetBank {
pub current_index: usize,
@@ -309,6 +340,7 @@ pub struct PresetBank {
pub modified: Vec<bool>,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
pub struct DeviceConnection {
pub host: IpAddr,
@@ -316,6 +348,7 @@ pub struct DeviceConnection {
pub device_id: u8,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq, Default)]
pub struct InputChannelState {
pub name: String,
@@ -330,6 +363,7 @@ pub struct InputChannelState {
pub mute: bool,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, Default, PartialEq)]
pub struct OutputChannelState {
pub name: String,
@@ -345,6 +379,7 @@ pub struct OutputChannelState {
pub mute: bool,
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub struct DSPConfigState {
pub(crate) input_states: HashMap<InputChannel, InputChannelState>,
@@ -367,6 +402,7 @@ impl DSPConfigState {
}
}
#[cfg_attr(feature = "serialization", derive(Serialize, Deserialize))]
#[derive(Debug, Clone, PartialEq)]
pub struct DSPState {
pub(crate) name: String,