/* * WavefileSuperposition.cpp * * Created on: 01.04.2011 * Author: sven */ #ifndef WAVEFILESUPERPOSITION_H_ #include "WavefileSuperposition.h" #endif #ifndef _GLIBCXX_IOSTREAM #include #endif #ifndef _GLIBCXX_FSTREAM #include #endif #ifndef _GLIBCXX_NUMERIC_LIMITS #include #endif WavefileSuperposition::WavefileSuperposition(SuperpositionParameters& params) { std::cout << "superposing " << params.getSourceFileOne() << " and " << params.getSourceFileTwo() << " to " << params.getDestinationFile() << std::endl; std::ofstream supFile; std::ifstream srcFile1; std::ifstream srcFile2; srcFile1.open(params.getSourceFileOne().c_str(), std::ios::in | std::ios::binary); srcFile2.open(params.getSourceFileTwo().c_str(), std::ios::in | std::ios::binary); supFile.open(params.getDestinationFile().c_str(), std::ios::out | std::ios::binary); int dataStartOffset = 0x28; char header[dataStartOffset]; srcFile1.read(&header[0],dataStartOffset); supFile.write(&header[0],dataStartOffset); int numSamples; srcFile1.read((char*) &numSamples,sizeof(numSamples)); std::cout<<"Processing "<< numSamples << " samples" << std::endl; srcFile2.seekg(srcFile1.tellg()); supFile.write((char*) &numSamples,sizeof(numSamples)); if (!(srcFile1.tellg() == srcFile2.tellg()) || !(srcFile1.tellg() == supFile.tellp()) ) { std::cout << "file positions not in sync" << std::endl; return; } short data1; short data2; int result; short shortResult; for (int i=0;i std::numeric_limits::max()) { shortResult = std::numeric_limits::max(); } else if (result < std::numeric_limits::min()) { shortResult = std::numeric_limits::min(); } else { shortResult = static_cast(result); } supFile.write((char*) &shortResult,sizeof(shortResult)); i += sizeof(short); } supFile.close(); srcFile1.close(); srcFile2.close(); std::cout<<"done" << std::endl; } WavefileSuperposition::~WavefileSuperposition() { // TODO Auto-generated destructor stub }