fix write_wav

png-branch
an 2019-02-22 20:34:43 -05:00
parent eac8686324
commit e18385c524
1 changed files with 12 additions and 16 deletions

View File

@ -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(())
}