diff options
author | lonkaars <loek@pipeframe.xyz> | 2023-05-30 14:14:10 +0200 |
---|---|---|
committer | lonkaars <loek@pipeframe.xyz> | 2023-05-30 14:14:10 +0200 |
commit | afa02662b185f62644b1e44a55820ded1e703fd2 (patch) | |
tree | 51538888fac8aefb888c1a6e55e74c59a23debaa | |
parent | e95bd56df67f3ba6d6f9d44c66b791e45bcd54a3 (diff) |
scaffold os2eindopdracht + argument parsing
-rw-r--r-- | os2eindopdracht/.gitignore | 2 | ||||
-rw-r--r-- | os2eindopdracht/Arguments.cpp | 32 | ||||
-rw-r--r-- | os2eindopdracht/Arguments.h | 17 | ||||
-rw-r--r-- | os2eindopdracht/FilterWorker.cpp | 0 | ||||
-rw-r--r-- | os2eindopdracht/FilterWorker.h | 0 | ||||
-rw-r--r-- | os2eindopdracht/SampleBlock.cpp | 0 | ||||
-rw-r--r-- | os2eindopdracht/SampleBlock.h | 0 | ||||
-rw-r--r-- | os2eindopdracht/SampleStream.cpp | 0 | ||||
-rw-r--r-- | os2eindopdracht/SampleStream.h | 0 | ||||
-rw-r--r-- | os2eindopdracht/main.cpp | 17 | ||||
-rw-r--r-- | os2eindopdracht/makefile | 24 | ||||
-rw-r--r-- | os2eindopdracht/readme.md | 28 |
12 files changed, 120 insertions, 0 deletions
diff --git a/os2eindopdracht/.gitignore b/os2eindopdracht/.gitignore new file mode 100644 index 0000000..f0c9b81 --- /dev/null +++ b/os2eindopdracht/.gitignore @@ -0,0 +1,2 @@ +*.o +main diff --git a/os2eindopdracht/Arguments.cpp b/os2eindopdracht/Arguments.cpp new file mode 100644 index 0000000..8e1f98b --- /dev/null +++ b/os2eindopdracht/Arguments.cpp @@ -0,0 +1,32 @@ +#include <getopt.h> + +#include "Arguments.h" + +using std::string; + +Arguments::Arguments(int argc, char** argv) { + while(1) { + switch(getopt(argc, argv, "p:b:t:")) { + case 'p': { + this->max_threads = atoi(optarg); + continue; + } + case 'b': { + this->gain_bass = atoi(optarg); + continue; + } + case 't': { + this->gain_treble = atoi(optarg); + continue; + } + case -1: break; + } + if (optind + 2 > argc) { + printf("please provide an input and output file\n"); + exit(1); + } + this->file_input = string(argv[optind++]); + this->file_output = string(argv[optind++]); + break; + } +} diff --git a/os2eindopdracht/Arguments.h b/os2eindopdracht/Arguments.h new file mode 100644 index 0000000..789d656 --- /dev/null +++ b/os2eindopdracht/Arguments.h @@ -0,0 +1,17 @@ +#pragma once + +#include <string> + +using std::string; + +class Arguments { +public: + Arguments(int argc, char** argv); + +public: + unsigned int max_threads = 4; + int gain_bass = 0; + int gain_treble = 0; + string file_input; + string file_output; +}; diff --git a/os2eindopdracht/FilterWorker.cpp b/os2eindopdracht/FilterWorker.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/os2eindopdracht/FilterWorker.cpp diff --git a/os2eindopdracht/FilterWorker.h b/os2eindopdracht/FilterWorker.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/os2eindopdracht/FilterWorker.h diff --git a/os2eindopdracht/SampleBlock.cpp b/os2eindopdracht/SampleBlock.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/os2eindopdracht/SampleBlock.cpp diff --git a/os2eindopdracht/SampleBlock.h b/os2eindopdracht/SampleBlock.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/os2eindopdracht/SampleBlock.h diff --git a/os2eindopdracht/SampleStream.cpp b/os2eindopdracht/SampleStream.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/os2eindopdracht/SampleStream.cpp diff --git a/os2eindopdracht/SampleStream.h b/os2eindopdracht/SampleStream.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/os2eindopdracht/SampleStream.h diff --git a/os2eindopdracht/main.cpp b/os2eindopdracht/main.cpp new file mode 100644 index 0000000..2e96abe --- /dev/null +++ b/os2eindopdracht/main.cpp @@ -0,0 +1,17 @@ +#include <cstdio> + +#include "Arguments.h" +#include "SampleStream.h" +#include "FilterWorker.h" + +int main(int argc, char** argv) { + Arguments args(argc, argv); + + printf("max_threads: %i\n", args.max_threads); + printf("gain_bass: %+i\n", args.gain_bass); + printf("gain_treble: %+i\n", args.gain_treble); + printf("input filename: \"%s\"\n", args.file_input.c_str()); + printf("output filename: \"%s\"\n", args.file_output.c_str()); + + return 0; +} diff --git a/os2eindopdracht/makefile b/os2eindopdracht/makefile new file mode 100644 index 0000000..d88ea30 --- /dev/null +++ b/os2eindopdracht/makefile @@ -0,0 +1,24 @@ +C++ = g++ +LD = g++ +RM = rm -f +CFLAGS = +LFLAGS = +TARGET = main + +SRCS := $(wildcard *.cpp) +OBJS := $(patsubst %.cpp,%.o, $(SRCS)) + +all: $(TARGET) + +%.o: %.cpp + $(C++) -c $(CFLAGS) $< -o $@ + +$(TARGET): $(OBJS) + $(LD) $^ $(LFLAGS) -o $@ + +clean: + $(RM) $(TARGET) $(OBJS) + +compile_commands: + compiledb make -Bn + diff --git a/os2eindopdracht/readme.md b/os2eindopdracht/readme.md new file mode 100644 index 0000000..c0c5dbf --- /dev/null +++ b/os2eindopdracht/readme.md @@ -0,0 +1,28 @@ +# eindopdracht 2 (equalizer) + +- main thread (dirigent) + - lezen bestand + - opsplitsen + labelen van blocks (sequentieel id's toewijzen) + - worker thread voor elk block filteren maken +- worker thread + - filter blok (leest uit een altijd globaal leesbare pool (queue?)) + - geef blok terug aan dirigent door queue + - stop zelf +- threads worden aangemaakt zolang er nog niet omgezette blokken zijn in de + todo-lijst +- er mogen maximaal een vooraf gedefinieerd aantal worker threads zijn (-p optie) +- threads stoppen als ze klaar zijn met werken, dus 'slapen' nooit. de main + thread maakt gebruik van condition variables om te slapen. +- per blok wordt na de hand door de dirigent de rand-samples naar elkaar + toegeschoven om klikken tegen te gaan +- de dirigent stopt alle blokken weer in volgorde terug in het uitvoer bestand +- tussenklasse maken die een serie samples representeert om uit te bereiden + naar wav als daar nog tijd voor is (anders gewoon ffmpeg scripts) + +## klasses + +- SampleStream (collectie van SampleBlock met mogelijkheid om op te breken in blocks en weer samen te voegen) +- SampleBlock (blok van $n$ samples, kunnen geoffset worden en gedumpt worden voor schrijven naar SampleStream) +- FilterWorker (filtert de inhoud van een SampleBlock) +- \<main\> +- Arguments (command-line opties lezen en toeganklijk maken) |