summaryrefslogtreecommitdiffstats
path: root/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp')
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp77
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
+}