aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main.rs51
-rw-r--r--src/music.rs7
2 files changed, 36 insertions, 22 deletions
diff --git a/src/main.rs b/src/main.rs
index 82ec725..83b2929 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,12 +4,14 @@ mod font;
pub mod generated;
mod interpolation;
+#[cfg(all(feature = "music", not(feature = "32k")))]
mod music;
mod render;
pub mod vendored;
use std::time::{Duration, SystemTime};
+#[cfg(all(feature = "music", not(feature = "32k")))]
use music::{mmc2r_to_pcm, Music};
use sdl2::{event::Event, keyboard::Keycode};
@@ -17,33 +19,38 @@ use sdl2::{event::Event, keyboard::Keycode};
const TIMEOUT_DEATH: f64 = render::JUST_DVD + 20.0;
use sdl2::audio::AudioSpecDesired;
+
+#[cfg(all(feature = "music", not(feature = "32k")))]
use vendored::micromod::MmC2r;
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(2),
- samples: Some(8192 as u16),
- };
-
- let device = audio_subsystem
- .open_playback(None, &desired_spec, |spec| {
- // initialize the audio callback
- Music {
- offset: 0,
- pcm: mmc2r_to_pcm(
- &mut MmC2r::new(include_bytes!("../uwudhd.mod"), spec.freq as isize).unwrap(),
- ),
- }
- })
- .unwrap();
-
- // Start playback
- device.resume();
+ #[cfg(all(feature = "music", not(feature = "32k")))]
+ {
+ let audio_subsystem = sdl_context.audio().unwrap();
+
+ let desired_spec = AudioSpecDesired {
+ freq: Some(48_000),
+ channels: Some(2),
+ samples: Some(8192 as u16),
+ };
+
+ let device = audio_subsystem
+ .open_playback(None, &desired_spec, |spec| {
+ // initialize the audio callback
+ Music {
+ offset: 0,
+ pcm: mmc2r_to_pcm(
+ &mut MmC2r::new(include_bytes!("../uwudhd.mod"), spec.freq as isize).unwrap(),
+ ),
+ }
+ })
+ .unwrap();
+
+ // Start playback
+ device.resume();
+ }
let video_subsystem = sdl_context.video().unwrap();
diff --git a/src/music.rs b/src/music.rs
index 0f0f7e7..fe48989 100644
--- a/src/music.rs
+++ b/src/music.rs
@@ -1,12 +1,16 @@
+#[cfg(all(feature = "music", not(feature = "32k")))]
use sdl2::audio::AudioCallback;
+#[cfg(all(feature = "music", not(feature = "32k")))]
use crate::vendored::micromod::MmC2r;
+#[cfg(all(feature = "music", not(feature = "32k")))]
pub struct Music {
pub pcm: Vec<i16>,
pub offset: usize,
}
+#[cfg(all(feature = "music", not(feature = "32k")))]
impl AudioCallback for Music {
type Channel = f32;
@@ -22,6 +26,7 @@ impl AudioCallback for Music {
}
}
+#[cfg(all(feature = "music", not(feature = "32k")))]
pub fn mmc2r_to_pcm(state: &mut MmC2r) -> Vec<i16> {
let mut destination = Vec::<i16>::new();
loop {
@@ -35,6 +40,8 @@ pub fn mmc2r_to_pcm(state: &mut MmC2r) -> Vec<i16> {
}
destination
}
+
+#[cfg(all(feature = "music", not(feature = "32k")))]
pub fn pcm_to_f32pcm(input: &[i16], output: &mut [f32], len: usize) {
for i in 0..len {
output[i] = f32::from(input[i]) / f32::from(0x7FFF as i16);