diff options
feat: working music
Diffstat (limited to 'src/main.rs')
-rw-r--r-- | src/main.rs | 32 |
1 files changed, 8 insertions, 24 deletions
diff --git a/src/main.rs b/src/main.rs index 7d42d2f..82ec725 100644 --- a/src/main.rs +++ b/src/main.rs @@ -4,40 +4,21 @@ mod font; pub mod generated; mod interpolation; +mod music; mod render; pub mod vendored; -use std::io::{BufWriter, Write}; use std::time::{Duration, SystemTime}; +use music::{mmc2r_to_pcm, Music}; use sdl2::{event::Event, keyboard::Keycode}; #[cfg(all(not(feature = "notimeout"), not(feature = "32k")))] const TIMEOUT_DEATH: f64 = render::JUST_DVD + 20.0; -use sdl2::audio::{AudioCallback, AudioSpecDesired}; +use sdl2::audio::AudioSpecDesired; use vendored::micromod::MmC2r; -struct Music<'a> { - mm: MmC2r<'a>, -} - -impl<'a> AudioCallback for Music<'a> { - type Channel = f32; - - fn callback(&mut self, out_f: &mut [f32]) { - let len = out_f.len(); - println!("{len}"); - let mut out = [0; 32768]; - if !self.mm.get_audio(&mut out, len as isize) { - return; - } - for i in 0..len { - out_f[i] = f32::from(out[i]) / f32::from(0x7FFF as i16); - } - } -} - pub fn main() { let sdl_context = sdl2::init().unwrap(); @@ -45,7 +26,7 @@ pub fn main() { let desired_spec = AudioSpecDesired { freq: Some(48_000), - channels: Some(1), + channels: Some(2), samples: Some(8192 as u16), }; @@ -53,7 +34,10 @@ pub fn main() { .open_playback(None, &desired_spec, |spec| { // initialize the audio callback Music { - mm: MmC2r::new(include_bytes!("../uwudhd.mod"), spec.freq as isize).unwrap(), + offset: 0, + pcm: mmc2r_to_pcm( + &mut MmC2r::new(include_bytes!("../uwudhd.mod"), spec.freq as isize).unwrap(), + ), } }) .unwrap(); |