diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.rs | 51 | ||||
| -rw-r--r-- | src/music.rs | 7 | 
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); |