use crate::{channel::ChannelInitOptions, AudioStreamParams};
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(rename_all = "snake_case")
)]
pub enum SynthFormat {
#[default]
Midi,
Custom { channels: u32 },
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(rename_all = "snake_case")
)]
pub enum ThreadCount {
None,
Auto,
Manual(usize),
}
#[derive(Clone, Copy, Debug, PartialEq)]
#[cfg_attr(
feature = "serde",
derive(serde::Deserialize, serde::Serialize),
serde(default)
)]
pub struct ParallelismOptions {
pub channel: ThreadCount,
pub key: ThreadCount,
}
impl ParallelismOptions {
pub const AUTO_PER_KEY: Self = ParallelismOptions {
channel: ThreadCount::Auto,
key: ThreadCount::Auto,
};
pub const AUTO_PER_CHANNEL: Self = ParallelismOptions {
channel: ThreadCount::Auto,
key: ThreadCount::None,
};
}
impl Default for ParallelismOptions {
fn default() -> Self {
Self::AUTO_PER_KEY
}
}
#[derive(Clone, Debug, PartialEq)]
#[cfg_attr(feature = "serde", derive(serde::Deserialize, serde::Serialize))]
pub struct ChannelGroupConfig {
pub channel_init_options: ChannelInitOptions,
pub format: SynthFormat,
pub audio_params: AudioStreamParams,
pub parallelism: ParallelismOptions,
}