From e18385c5240ad8621463c9ef4033549b717e57ce Mon Sep 17 00:00:00 2001 From: Marrub Date: Fri, 22 Feb 2019 20:34:43 -0500 Subject: [PATCH] fix write_wav --- src/durandal/sound.rs | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/durandal/sound.rs b/src/durandal/sound.rs index 476cf2a..5739b8f 100644 --- a/src/durandal/sound.rs +++ b/src/durandal/sound.rs @@ -5,34 +5,30 @@ use std::io; pub fn write_wav(out: &mut impl io::Write, snd: &impl Sound) -> ResultS<()> { - let rate = u32::from(snd.rate()); - let bps = rate * 2; - let ssize = bps * snd.len() as u32; + let rate = u32::from(snd.rate()); + let bps = rate * 2; + let ssize = snd.len() as u32 * 2; let fsize = 36 + ssize; out.write_all(b"RIFF")?; - out.write_all(&fsize.to_le_bytes())?; + out.write_all(&u32::to_le_bytes(fsize))?; out.write_all(b"WAVE")?; out.write_all(b"fmt ")?; - out.write_all(&16u32.to_le_bytes())?; - out.write_all(&1u16.to_le_bytes())?; // PCM - out.write_all(&1u16.to_le_bytes())?; // mono - out.write_all(&rate.to_le_bytes())?; // rate - out.write_all(&bps.to_le_bytes())?; // bytes per second - out.write_all(&2u16.to_le_bytes())?; // block alignment - out.write_all(&16u16.to_le_bytes())?; // bits per sample + out.write_all(&u32::to_le_bytes(16))?; + out.write_all(&u16::to_le_bytes(1))?; // PCM + out.write_all(&u16::to_le_bytes(1))?; // mono + out.write_all(&u32::to_le_bytes(rate))?; + out.write_all(&u32::to_le_bytes(bps))?; + out.write_all(&u16::to_le_bytes(2))?; // block alignment + out.write_all(&u16::to_le_bytes(16))?; // bits per sample out.write_all(b"data")?; - out.write_all(&ssize.to_le_bytes())?; + out.write_all(&u32::to_le_bytes(ssize))?; for p in 0..snd.len() { let sample = snd.index(p); out.write_all(&sample.to_le_bytes())?; } - if ssize & 1 == 1 { - out.write_all(&[0])?; - } - Ok(()) }