From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../Superposition/src/SuperpositionController.cpp | 104 +++++++++++++++++++++ .../Superposition/src/SuperpositionController.h | 48 ++++++++++ .../Superposition/src/SuperpositionParameters.h | 65 +++++++++++++ .../Superposition/src/WavefileSuperposition.cpp | 77 +++++++++++++++ .../Superposition/src/WavefileSuperposition.h | 21 +++++ .../Aufgabenblatt1/Superposition/src/main.cpp | 21 +++++ 6 files changed, 336 insertions(+) create mode 100644 Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.cpp create mode 100644 Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionController.h create mode 100644 Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/SuperpositionParameters.h create mode 100644 Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.cpp create mode 100644 Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/WavefileSuperposition.h create mode 100644 Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src/main.cpp (limited to 'Master/Modellbildung_und_Simulation/Aufgabenblatt1/Superposition/src') 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 +#endif + +#ifndef WAVEFILESUPERPOSITION_H_ + #include "WavefileSuperposition.h" +#endif + +const char* SuperpositionController::UI_FILENAME = "ui/superpos.glade"; + +SuperpositionController::SuperpositionController() +{ + Glib::RefPtr 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 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 +#endif + +#ifndef _GLIBCXX_STRING + #include +#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 +#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 +#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 +} 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 +#endif + +int main(int argc,char* argv[]) +{ + Gtk::Main kit(argc,argv); + SuperpositionController superPosController; + superPosController.startApp(kit); + return 0; +} -- cgit v1.2.3