#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Note {
length: u32,
velocity: u8,
}
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
pub struct Step {
notes: [Option<Note>; 8],
}
pub struct Track<const STEPS: usize> {
steps: [Option<Step>; STEPS],
length: u8,
}
pub struct Pattern<const TRACKS: usize, const STEPS: usize> {
tracks: [Option<Track<STEPS>>; TRACKS],
}
impl<const TRACKS: usize, const STEPS: usize> Pattern<TRACKS, STEPS> {
pub fn new() -> Self {
Self {
tracks: [const { None::<Track<STEPS>> }; TRACKS],
}
}
}