diff options
Diffstat (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp')
| -rw-r--r-- | Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp new file mode 100644 index 0000000..91e16a2 --- /dev/null +++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp @@ -0,0 +1,77 @@ +/* + * WavefileSuperposition.cpp + * + * Created on: 01.04.2011 + * Author: sven + */ + +#ifndef WAVEFILESUPERPOSITION_H_ + #include "WavefileSuperposition.h" +#endif +#ifndef _GLIBCXX_IOSTREAM + #include <iostream> +#endif + +#ifndef _GLIBCXX_FSTREAM + #include <fstream> +#endif + +#ifndef _GLIBCXX_NUMERIC_LIMITS + #include <limits> +#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<numSamples;) + { + srcFile1.read((char*) &data1,sizeof(data1)); + srcFile2.read((char*) &data2,sizeof(data2)); + result = data1 + data2; + if (result > std::numeric_limits<short>::max()) + { + shortResult = std::numeric_limits<short>::max(); + } + else if (result < std::numeric_limits<short>::min()) + { + shortResult = std::numeric_limits<short>::min(); + } else + { + shortResult = static_cast<short>(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 +} |
