X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=nihav-core%2Fsrc%2Ftest%2Fwavwriter.rs;h=50b194945c1dfe535d8bdb14d32d0c572f22da43;hb=2b8bf9a03242bbd6e80091082a50ec13b1a95143;hp=1cd9541754f662154c91a71248f6b1f0e20b266c;hpb=5641dccfbf2a70d589cf094a0d4ed5a10f919f00;p=nihav.git diff --git a/nihav-core/src/test/wavwriter.rs b/nihav-core/src/test/wavwriter.rs index 1cd9541..50b1949 100644 --- a/nihav-core/src/test/wavwriter.rs +++ b/nihav-core/src/test/wavwriter.rs @@ -1,7 +1,9 @@ +//! Audio output in WAV format. use crate::io::byteio::*; use crate::frame::*; use std::io::SeekFrom; +/// WAVE output writer. pub struct WavWriter<'a> { io: &'a mut ByteWriter<'a>, data_pos: u64, @@ -46,9 +48,13 @@ macro_rules! write_data { } impl<'a> WavWriter<'a> { + /// Constructs a new `WavWriter` instance. pub fn new(io: &'a mut ByteWriter<'a>) -> Self { - WavWriter { io: io, data_pos: 0 } + WavWriter { io, data_pos: 0 } } + /// Writes audio format information to the file header. + /// + /// This function should be called exactly once before writing actual audio data. pub fn write_header(&mut self, ainfo: NAAudioInfo) -> ByteIOResult<()> { let bits = ainfo.get_format().get_bits() as usize; @@ -59,16 +65,16 @@ impl<'a> WavWriter<'a> { self.io.write_buf(b"fmt ")?; self.io.write_u32le(16)?; self.io.write_u16le(0x0001)?; // PCM - self.io.write_u16le(ainfo.get_channels() as u16)?; - self.io.write_u32le(ainfo.get_sample_rate() as u32)?; + self.io.write_u16le(u16::from(ainfo.get_channels()))?; + self.io.write_u32le(ainfo.get_sample_rate())?; if bits < 16 { - self.io.write_u32le((ainfo.get_channels() as u32) * (ainfo.get_sample_rate() as u32))?; - self.io.write_u16le(ainfo.get_channels() as u16)?; // block align + self.io.write_u32le(u32::from(ainfo.get_channels()) * ainfo.get_sample_rate())?; + self.io.write_u16le(u16::from(ainfo.get_channels()))?; // block align self.io.write_u16le(8)?; } else { - self.io.write_u32le(2 * (ainfo.get_channels() as u32) * (ainfo.get_sample_rate() as u32))?; - self.io.write_u16le((2 * ainfo.get_channels()) as u16)?; // block align + self.io.write_u32le(2 * u32::from(ainfo.get_channels()) * ainfo.get_sample_rate())?; + self.io.write_u16le(u16::from(2 * ainfo.get_channels()))?; // block align self.io.write_u16le(16)?; } @@ -78,6 +84,7 @@ impl<'a> WavWriter<'a> { self.data_pos = self.io.tell(); Ok(()) } + /// Writes audio data. pub fn write_frame(&mut self, abuf: NABufferType) -> ByteIOResult<()> { match abuf { NABufferType::AudioU8(ref buf) => {