aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.rs45
1 files changed, 45 insertions, 0 deletions
diff --git a/src/main.rs b/src/main.rs
index edd7f87..7d42d2f 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -7,6 +7,7 @@ mod interpolation;
mod render;
pub mod vendored;
+use std::io::{BufWriter, Write};
use std::time::{Duration, SystemTime};
use sdl2::{event::Event, keyboard::Keycode};
@@ -14,8 +15,52 @@ 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 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();
+
+ let audio_subsystem = sdl_context.audio().unwrap();
+
+ let desired_spec = AudioSpecDesired {
+ freq: Some(48_000),
+ channels: Some(1),
+ samples: Some(8192 as u16),
+ };
+
+ let device = audio_subsystem
+ .open_playback(None, &desired_spec, |spec| {
+ // initialize the audio callback
+ Music {
+ mm: MmC2r::new(include_bytes!("../uwudhd.mod"), spec.freq as isize).unwrap(),
+ }
+ })
+ .unwrap();
+
+ // Start playback
+ device.resume();
+
let video_subsystem = sdl_context.video().unwrap();
let mut builder = video_subsystem.window("Cosin25 Invite", 512, 256);