use crate::insert_coin::SimplePwmCore; use ch32_hal::println; use ch32_hal::timer::GeneralInstance16bit; use wavetable_synth::{synthesizer::SimpleWavetableSynthesizer, wavetable::SimpleWavetable}; const SQUARE_WAVETABLE: [u8; 2] = [0, 100]; // const SQUARE_WAVETABLE: [u8; 32] = [ // 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100, 100, 100, 100, 100, // 100, 100, 100, 100, 100, 100, 100, // ]; pub struct SynthesizerService { pub synth: SimpleWavetableSynthesizer>, pub enabled: bool, pub need_service: bool, } impl SynthesizerService { pub fn new(clock_freq_hz: usize) -> Self { let square_wt = SimpleWavetable::new(&SQUARE_WAVETABLE); let synth = SimpleWavetableSynthesizer::new(square_wt, clock_freq_hz); Self { synth, enabled: true, need_service: false, } } pub fn tick(&mut self) { if self.enabled { self.synth.tick(); } } pub fn need_service(&self) -> bool { self.need_service || (self.enabled && self.synth.has_new_output()) } pub fn service(&mut self) -> Option { self.need_service = false; if self.enabled { Some(self.synth.get_output()) } else { None } } } impl SynthesizerService { pub fn set_freq(&mut self, freq_hz: usize) { self.synth.set_freq(freq_hz); } pub fn enable(&mut self) { self.enabled = true; self.need_service = true; // TODO: write the enable function } pub fn disable(&mut self) { self.enabled = false; self.need_service = true; // TODO: write the disable function } }