rlm@1: // WavWriter.cpp: implementation of the WavWriter class. rlm@1: // rlm@1: ////////////////////////////////////////////////////////////////////// rlm@1: rlm@1: #include "stdafx.h" rlm@1: #include "WavWriter.h" rlm@1: rlm@1: #include "../common/Util.h" rlm@1: rlm@1: ////////////////////////////////////////////////////////////////////// rlm@1: // Construction/Destruction rlm@1: ////////////////////////////////////////////////////////////////////// rlm@1: rlm@1: WavWriter::WavWriter() rlm@1: { rlm@1: m_file = NULL; rlm@1: m_len = 0; rlm@1: m_posSize = 0; rlm@1: } rlm@1: rlm@1: WavWriter::~WavWriter() rlm@1: { rlm@1: if (m_file) rlm@1: Close(); rlm@1: } rlm@1: rlm@1: void WavWriter::Close() rlm@1: { rlm@1: // calculate the total file length rlm@1: u32 len = ftell(m_file)-8; rlm@1: fseek(m_file, 4, SEEK_SET); rlm@1: u8 data[4]; rlm@1: utilPutDword(data, len); rlm@1: fwrite(data, 1, 4, m_file); rlm@1: // write out the size of the data section rlm@1: fseek(m_file, m_posSize, SEEK_SET); rlm@1: utilPutDword(data, m_len); rlm@1: fwrite(data, 1, 4, m_file); rlm@1: fclose(m_file); rlm@1: m_file = NULL; rlm@1: } rlm@1: rlm@1: bool WavWriter::Open(const char *name) rlm@1: { rlm@1: if (m_file) rlm@1: Close(); rlm@1: m_file = fopen(name, "wb"); rlm@1: rlm@1: if (!m_file) rlm@1: return false; rlm@1: // RIFF header rlm@1: u8 data[4] = { 'R', 'I', 'F', 'F' }; rlm@1: fwrite(data, 1, 4, m_file); rlm@1: utilPutDword(data, 0); rlm@1: // write 0 for now. Will get filled during close rlm@1: fwrite(data, 1, 4, m_file); rlm@1: // write WAVE header rlm@1: u8 data2[4] = { 'W', 'A', 'V', 'E' }; rlm@1: fwrite(data2, 1, 4, m_file); rlm@1: return true; rlm@1: } rlm@1: rlm@1: void WavWriter::SetFormat(const WAVEFORMATEX *format) rlm@1: { rlm@1: if (m_file == NULL) rlm@1: return; rlm@1: // write fmt header rlm@1: u8 data[4] = { 'f', 'm', 't', ' ' }; rlm@1: fwrite(data, 1, 4, m_file); rlm@1: u32 value = sizeof(WAVEFORMATEX); rlm@1: utilPutDword(data, value); rlm@1: fwrite(data, 1, 4, m_file); rlm@1: fwrite(format, 1, sizeof(WAVEFORMATEX), m_file); rlm@1: // start data header rlm@1: u8 data2[4] = { 'd', 'a', 't', 'a' }; rlm@1: fwrite(data2, 1, 4, m_file); rlm@1: rlm@1: m_posSize = ftell(m_file); rlm@1: // write 0 for data chunk size. Filled out during Close() rlm@1: utilPutDword(data, 0); rlm@1: fwrite(data, 1, 4, m_file); rlm@1: } rlm@1: rlm@1: void WavWriter::AddSound(const u8 *data, int len) rlm@1: { rlm@1: if (m_file == NULL) rlm@1: return; rlm@1: // write a block of sound data rlm@1: fwrite(data, 1, len, m_file); rlm@1: m_len += len; rlm@1: } rlm@1: