#include "WavWriter.h" WavWriter::WavWriter(std::ostream& stream) : m_stream(stream) { } void WavWriter::WritePcmHeader(const WavMetaData& metaData, const size_t dataLen) const { constexpr auto riffMasterChunkSize = sizeof(WAV_CHUNK_ID_RIFF) + sizeof(uint32_t) + sizeof(WAV_WAVE_ID) + sizeof(WavChunkHeader) + sizeof(WavFormatChunkPcm) + sizeof(WavChunkHeader) + sizeof(dataLen); m_stream.write(reinterpret_cast(&WAV_CHUNK_ID_RIFF), sizeof(WAV_CHUNK_ID_RIFF)); m_stream.write(reinterpret_cast(&riffMasterChunkSize), sizeof(riffMasterChunkSize)); m_stream.write(reinterpret_cast(&WAV_WAVE_ID), sizeof(WAV_WAVE_ID)); constexpr WavChunkHeader formatChunkHeader{WAV_CHUNK_ID_FMT, sizeof(WavFormatChunkPcm)}; m_stream.write(reinterpret_cast(&formatChunkHeader), sizeof(formatChunkHeader)); const WavFormatChunkPcm formatChunk{ WavFormat::PCM, static_cast(metaData.channelCount), metaData.samplesPerSec, metaData.samplesPerSec * metaData.channelCount * metaData.bitsPerSample / 8, static_cast(metaData.channelCount * (metaData.bitsPerSample / 8)), static_cast(metaData.bitsPerSample), }; m_stream.write(reinterpret_cast(&formatChunk), sizeof(formatChunk)); const WavChunkHeader dataChunkHeader{WAV_CHUNK_ID_DATA, dataLen}; m_stream.write(reinterpret_cast(&dataChunkHeader), sizeof(dataChunkHeader)); } void WavWriter::WritePcmData(const void* data, const size_t dataLen) const { m_stream.write(static_cast(data), dataLen); }