use std::collections::HashMap;
use sim_lib_sound_timbre::Timbre;
#[derive(Clone, Debug, PartialEq)]
pub struct TimbreBank {
entries: HashMap<(u8, u8, u8), Timbre>,
fallback: Timbre,
}
impl TimbreBank {
pub fn new(fallback: Timbre) -> Self {
Self {
entries: HashMap::new(),
fallback,
}
}
pub fn insert(&mut self, bank_msb: u8, bank_lsb: u8, program: u8, timbre: Timbre) {
self.entries.insert((bank_msb, bank_lsb, program), timbre);
}
pub fn get(&self, bank_msb: u8, bank_lsb: u8, program: u8) -> &Timbre {
self.entries
.get(&(bank_msb, bank_lsb, program))
.unwrap_or(&self.fallback)
}
pub fn fallback(&self) -> &Timbre {
&self.fallback
}
pub fn entries(&self) -> &HashMap<(u8, u8, u8), Timbre> {
&self.entries
}
}