use serde::{Serialize, Deserialize};
pub type GraphObjectId = String;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum ContextType {
#[default]
Realtime,
Offline,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum ContextState {
#[default]
Suspended,
Running,
Closed,
Interrupted,
}
pub type NodeType = String;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum ChannelCountMode {
#[default]
ClampedMax,
Explicit,
Max,
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum ChannelInterpretation {
#[default]
Discrete,
Speakers,
}
pub type ParamType = String;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Default)]
pub enum AutomationRate {
#[default]
ARate,
KRate,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct ContextRealtimeData {
pub currentTime: f64,
pub renderCapacity: f64,
pub callbackIntervalMean: f64,
pub callbackIntervalVariance: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct BaseAudioContext {
pub contextId: GraphObjectId,
pub contextType: ContextType,
pub contextState: ContextState,
#[serde(skip_serializing_if = "Option::is_none")]
pub realtimeData: Option<ContextRealtimeData>,
pub callbackBufferSize: f64,
pub maxOutputChannelCount: f64,
pub sampleRate: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AudioListener {
pub listenerId: GraphObjectId,
pub contextId: GraphObjectId,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AudioNode {
pub nodeId: GraphObjectId,
pub contextId: GraphObjectId,
pub nodeType: NodeType,
pub numberOfInputs: f64,
pub numberOfOutputs: f64,
pub channelCount: f64,
pub channelCountMode: ChannelCountMode,
pub channelInterpretation: ChannelInterpretation,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AudioParam {
pub paramId: GraphObjectId,
pub nodeId: GraphObjectId,
pub contextId: GraphObjectId,
pub paramType: ParamType,
pub rate: AutomationRate,
pub defaultValue: f64,
pub minValue: f64,
pub maxValue: f64,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GetRealtimeDataParams {
pub contextId: GraphObjectId,
}
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct GetRealtimeDataReturns {
pub realtimeData: ContextRealtimeData,
}