fix write_wav
parent
eac8686324
commit
e18385c524
|
@ -5,34 +5,30 @@ use std::io;
|
||||||
|
|
||||||
pub fn write_wav(out: &mut impl io::Write, snd: &impl Sound) -> ResultS<()>
|
pub fn write_wav(out: &mut impl io::Write, snd: &impl Sound) -> ResultS<()>
|
||||||
{
|
{
|
||||||
let rate = u32::from(snd.rate());
|
let rate = u32::from(snd.rate());
|
||||||
let bps = rate * 2;
|
let bps = rate * 2;
|
||||||
let ssize = bps * snd.len() as u32;
|
let ssize = snd.len() as u32 * 2;
|
||||||
let fsize = 36 + ssize;
|
let fsize = 36 + ssize;
|
||||||
|
|
||||||
out.write_all(b"RIFF")?;
|
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"WAVE")?;
|
||||||
out.write_all(b"fmt ")?;
|
out.write_all(b"fmt ")?;
|
||||||
out.write_all(&16u32.to_le_bytes())?;
|
out.write_all(&u32::to_le_bytes(16))?;
|
||||||
out.write_all(&1u16.to_le_bytes())?; // PCM
|
out.write_all(&u16::to_le_bytes(1))?; // PCM
|
||||||
out.write_all(&1u16.to_le_bytes())?; // mono
|
out.write_all(&u16::to_le_bytes(1))?; // mono
|
||||||
out.write_all(&rate.to_le_bytes())?; // rate
|
out.write_all(&u32::to_le_bytes(rate))?;
|
||||||
out.write_all(&bps.to_le_bytes())?; // bytes per second
|
out.write_all(&u32::to_le_bytes(bps))?;
|
||||||
out.write_all(&2u16.to_le_bytes())?; // block alignment
|
out.write_all(&u16::to_le_bytes(2))?; // block alignment
|
||||||
out.write_all(&16u16.to_le_bytes())?; // bits per sample
|
out.write_all(&u16::to_le_bytes(16))?; // bits per sample
|
||||||
out.write_all(b"data")?;
|
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() {
|
for p in 0..snd.len() {
|
||||||
let sample = snd.index(p);
|
let sample = snd.index(p);
|
||||||
out.write_all(&sample.to_le_bytes())?;
|
out.write_all(&sample.to_le_bytes())?;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ssize & 1 == 1 {
|
|
||||||
out.write_all(&[0])?;
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue