1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
mod constants; mod types; pub use constants::OCTAVE; use rug::Rational; pub use types::{IntExt, LatticeDimension, Ordinal, Pitch, Ratio}; pub fn lattice_relation(prime: usize, ordinal: Ordinal) -> Rational { let octave = Rational::from(OCTAVE); let p = Rational::from((prime, 1)); let ratio = match ordinal { Ordinal::Otonal => p / octave, Ordinal::Utonal => octave / p, }; ratio.flatten() } pub fn gen_lattice(dimensions: &[usize], steps: usize) -> Vec<LatticeDimension> { let mut result = vec![]; for dimension in dimensions { result.push(LatticeDimension::new(*dimension, steps)); } result }