summaryrefslogtreecommitdiffstats
path: root/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src
diff options
context:
space:
mode:
Diffstat (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src')
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.cpp104
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.h48
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionParameters.h65
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp77
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.h21
-rw-r--r--Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/main.cpp21
6 files changed, 336 insertions, 0 deletions
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.cpp b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.cpp
new file mode 100644
index 0000000..5392621
--- /dev/null
+++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.cpp
@@ -0,0 +1,104 @@
+/*
+ * SuperpositionController.cpp
+ *
+ * Created on: 01.04.2011
+ * Author: sven
+ */
+#ifndef SUPERPOSITIONCONTROLLER_H_
+ #include "SuperpositionController.h"
+#endif
+
+#ifndef _GLIBCXX_IOSTREAM
+ #include <iostream>
+#endif
+
+#ifndef WAVEFILESUPERPOSITION_H_
+ #include "WavefileSuperposition.h"
+#endif
+
+const char* SuperpositionController::UI_FILENAME = "ui/superpos.glade";
+
+SuperpositionController::SuperpositionController()
+{
+ Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(UI_FILENAME);
+ builder->get_widget("mainwindow",mPtrMainWin);
+ builder->get_widget("sourcefile1",mPtrSrcFile1);
+ builder->get_widget("sourcefile2",mPtrSrcFile2);
+ builder->get_widget("destinationfile",mPtrDstFile);
+ builder->get_widget("src1btn",mPtrOpenBtnSrc1);
+ builder->get_widget("src2btn",mPtrOpenBtnSrc2);
+ builder->get_widget("dstbtn",mPtrOpenBtnDst);
+ builder->get_widget("startbtn",mPtrStartBtn);
+
+ mPtrMainWin->signal_hide().connect(sigc::ptr_fun(&Gtk::Main::quit));
+ mPtrOpenBtnSrc1->signal_clicked().connect(sigc::mem_fun(this,&SuperpositionController::on_button_src1));
+ mPtrOpenBtnSrc2->signal_clicked().connect(sigc::mem_fun(this,&SuperpositionController::on_button_src2));
+ mPtrOpenBtnDst->signal_clicked().connect(sigc::mem_fun(this,&SuperpositionController::on_button_dst));
+ mPtrStartBtn->signal_clicked().connect(sigc::mem_fun(this,&SuperpositionController::on_button_start));
+}
+
+SuperpositionController::~SuperpositionController() {
+}
+
+void SuperpositionController::startApp(Gtk::Main& kit)
+{
+ kit.run(*mPtrMainWin);
+}
+
+void SuperpositionController::on_button_src1()
+{
+ std::string filename;
+ choose_file(filename);
+ mParams.setSourceFileOne(filename);
+ mPtrSrcFile1->set_text(mParams.getSourceFileOne());
+}
+
+void SuperpositionController::on_button_src2()
+{
+ std::string filename;
+ choose_file(filename);
+ mParams.setSourceFileTwo(filename);
+ mPtrSrcFile2->set_text(mParams.getSourceFileTwo());
+}
+
+void SuperpositionController::on_button_dst()
+{
+ std::string filename;
+ choose_file(filename);
+ mParams.setDestinationFile(filename);
+ mPtrDstFile->set_text(mParams.getDestinationFile());
+}
+
+void SuperpositionController::choose_file(std::string& filename)
+{
+ Glib::RefPtr<Gtk::Builder> builder = Gtk::Builder::create_from_file(UI_FILENAME);
+ Gtk::FileChooserDialog* ptrFilechooser;
+ builder->get_widget("filechooserdlg",ptrFilechooser);
+ Gtk::FileFilter waveFilter;
+ waveFilter.set_name("Wave files");
+ waveFilter.add_pattern("*.wav");
+ ptrFilechooser->add_filter(waveFilter);
+ ptrFilechooser->add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
+ ptrFilechooser->add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
+ ptrFilechooser->set_transient_for(*mPtrMainWin);
+ int result = ptrFilechooser->run();
+ switch (result)
+ {
+ case Gtk::RESPONSE_OK:
+ filename = ptrFilechooser->get_filename();
+ break;
+ default:
+ break;
+ }
+ delete ptrFilechooser;
+}
+
+void SuperpositionController::on_button_start()
+{
+ if(!mParams.validate())
+ {
+ std::cout << "Please specify 3 different files" << std::endl;
+ return;
+ }
+ WavefileSuperposition superPos(mParams);
+}
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.h b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.h
new file mode 100644
index 0000000..fe0637b
--- /dev/null
+++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.h
@@ -0,0 +1,48 @@
+/*
+ * SuperpositionController.h
+ *
+ * Created on: 01.04.2011
+ * Author: sven
+ */
+
+#ifndef SUPERPOSITIONCONTROLLER_H_
+#define SUPERPOSITIONCONTROLLER_H_
+
+#ifndef SUPERPOSITIONPARAMETERS_H_
+ #include "SuperpositionParameters.h"
+#endif
+
+#ifndef _GTKMM_H
+ #include <gtkmm.h>
+#endif
+
+#ifndef _GLIBCXX_STRING
+ #include <string>
+#endif
+
+class SuperpositionController {
+public:
+ SuperpositionController();
+ virtual ~SuperpositionController();
+ void startApp(Gtk::Main&);
+private:
+ static const char* UI_FILENAME;
+ SuperpositionParameters mParams;
+
+ Gtk::Window* mPtrMainWin;
+ Gtk::Entry* mPtrSrcFile1;
+ Gtk::Entry* mPtrSrcFile2;
+ Gtk::Entry* mPtrDstFile;
+ Gtk::Button* mPtrOpenBtnSrc1;
+ Gtk::Button* mPtrOpenBtnSrc2;
+ Gtk::Button* mPtrOpenBtnDst;
+ Gtk::Button* mPtrStartBtn;
+
+ void on_button_src1();
+ void on_button_src2();
+ void on_button_dst();
+ void on_button_start();
+ void choose_file(std::string&);
+};
+
+#endif /* SUPERPOSITIONCONTROLLER_H_ */
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionParameters.h b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionParameters.h
new file mode 100644
index 0000000..4f87444
--- /dev/null
+++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionParameters.h
@@ -0,0 +1,65 @@
+/*
+ * SuperpositionParameters.h
+ *
+ * Created on: 01.04.2011
+ * Author: sven
+ */
+
+#ifndef SUPERPOSITIONPARAMETERS_H_
+#define SUPERPOSITIONPARAMETERS_H_
+
+#ifndef _GLIBCXX_STRING
+ #include <string>
+#endif
+
+class SuperpositionParameters
+{
+public:
+private:
+ std::string mSourceFileOne;
+ std::string mSourceFileTwo;
+ std::string mDestinationFile;
+public:
+ bool validate() const
+ {
+ return !(mSourceFileOne.empty()
+ || mSourceFileTwo.empty()
+ || mDestinationFile.empty()
+ || (mSourceFileOne.compare(mSourceFileTwo) == 0)
+ || (mSourceFileOne.compare(mDestinationFile) == 0)
+ || (mSourceFileTwo.compare(mDestinationFile) == 0)
+ );
+ }
+ std::string getDestinationFile() const
+ {
+ return mDestinationFile;
+ }
+
+ std::string getSourceFileOne() const
+ {
+ return mSourceFileOne;
+ }
+
+ std::string getSourceFileTwo() const
+ {
+ return mSourceFileTwo;
+ }
+
+ void setDestinationFile(std::string& mDestinationFile)
+ {
+ this->mDestinationFile = mDestinationFile;
+ }
+
+ void setSourceFileOne(std::string& mSourceFileOne)
+ {
+ this->mSourceFileOne = mSourceFileOne;
+ }
+
+ void setSourceFileTwo(std::string& mSourceFileTwo)
+ {
+ this->mSourceFileTwo = mSourceFileTwo;
+ }
+
+};
+
+#endif /* SUPERPOSITIONPARAMETERS_H_ */
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
+}
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.h b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.h
new file mode 100644
index 0000000..da7ab5e
--- /dev/null
+++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.h
@@ -0,0 +1,21 @@
+/*
+ * WavefileSuperposition.h
+ *
+ * Created on: 01.04.2011
+ * Author: sven
+ */
+
+#ifndef WAVEFILESUPERPOSITION_H_
+#define WAVEFILESUPERPOSITION_H_
+
+#ifndef SUPERPOSITIONPARAMETERS_H_
+ #include "SuperpositionParameters.h"
+#endif
+
+class WavefileSuperposition {
+public:
+ WavefileSuperposition(SuperpositionParameters&);
+ virtual ~WavefileSuperposition();
+};
+
+#endif /* WAVEFILESUPERPOSITION_H_ */
diff --git a/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/main.cpp b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/main.cpp
new file mode 100644
index 0000000..664127f
--- /dev/null
+++ b/Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/main.cpp
@@ -0,0 +1,21 @@
+/*
+ * main.cpp
+ *
+ * Created on: 01.04.2011
+ * Author: sven
+ */
+#ifndef SUPERPOSITIONCONTROLLER_H_
+ #include "SuperpositionController.h"
+#endif
+
+#ifndef _GTKMM_H
+ #include <gtkmm.h>
+#endif
+
+int main(int argc,char* argv[])
+{
+ Gtk::Main kit(argc,argv);
+ SuperpositionController superPosController;
+ superPosController.startApp(kit);
+ return 0;
+}