summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlonkaars <loek@pipeframe.xyz>2023-05-30 14:14:10 +0200
committerlonkaars <loek@pipeframe.xyz>2023-05-30 14:14:10 +0200
commitafa02662b185f62644b1e44a55820ded1e703fd2 (patch)
tree51538888fac8aefb888c1a6e55e74c59a23debaa
parente95bd56df67f3ba6d6f9d44c66b791e45bcd54a3 (diff)
scaffold os2eindopdracht + argument parsing
-rw-r--r--os2eindopdracht/.gitignore2
-rw-r--r--os2eindopdracht/Arguments.cpp32
-rw-r--r--os2eindopdracht/Arguments.h17
-rw-r--r--os2eindopdracht/FilterWorker.cpp0
-rw-r--r--os2eindopdracht/FilterWorker.h0
-rw-r--r--os2eindopdracht/SampleBlock.cpp0
-rw-r--r--os2eindopdracht/SampleBlock.h0
-rw-r--r--os2eindopdracht/SampleStream.cpp0
-rw-r--r--os2eindopdracht/SampleStream.h0
-rw-r--r--os2eindopdracht/main.cpp17
-rw-r--r--os2eindopdracht/makefile24
-rw-r--r--os2eindopdracht/readme.md28
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)