#![forbid(unsafe_code)]
pub const PERIODS1: &[u16; 12] = &[256, 242, 228, 215, 203, 192, 181, 171, 161, 152, 144, 136];
pub const PERIODS2: &[u16; 51] = &[
4096, 3864, 3648, 3444, 3252, 3068, 2896, 2732, 2580, 2436, 2300, 2168, 2048, 1932, 1824, 1722,
1626, 1534, 1448, 1366, 1290, 1218, 1150, 1084, 1024, 966, 912, 861, 813, 767, 724, 683, 645,
609, 575, 542, 512, 483, 456, 430, 406, 383, 362, 341, 322, 304, 287, 271, 256, 241, 228,
];
pub const PERIODS3: &[u16; 72] = &[
8192, 7728, 7296, 6888, 6504, 6136, 5792, 5464, 5160, 4872, 4600, 4336, 4096, 3864, 3648, 3444,
3252, 3068, 2896, 2732, 2580, 2436, 2300, 2168, 2048, 1932, 1824, 1722, 1626, 1534, 1448, 1366,
1290, 1218, 1150, 1084, 1024, 966, 912, 861, 813, 767, 724, 683, 645, 609, 575, 542, 512, 483,
456, 430, 406, 383, 362, 341, 322, 304, 287, 271, 256, 241, 228, 215, 203, 191, 181, 170, 161,
152, 143, 135,
];
pub const EMPTY_TRACK: &[u8; 1] = &[0x80];
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PeriodTable {
P1,
P2,
P3,
}
impl PeriodTable {
pub fn period(&self, note: usize) -> Option<u16> {
match self {
PeriodTable::P1 => PERIODS1.get(note).copied(),
PeriodTable::P2 => PERIODS2.get(note).copied(),
PeriodTable::P3 => PERIODS3.get(note).copied(),
}
}
}