diff options
| author | lonkaars <loek@pipeframe.xyz> | 2023-06-03 14:54:21 +0200 | 
|---|---|---|
| committer | lonkaars <loek@pipeframe.xyz> | 2023-06-03 14:54:21 +0200 | 
| commit | 33fcc80be5e6d7c755a8bcc285854e872787ff38 (patch) | |
| tree | b094eaded5d42bfd2258ecaba84f838bcd37893e | |
| parent | be7c24ad3e39c2a84c5bf9b264c5c89c811b8162 (diff) | |
filtering working on chunks
| -rw-r--r-- | os2eindopdracht/FilterWorker.cpp | 59 | ||||
| -rw-r--r-- | os2eindopdracht/FilterWorker.h | 9 | ||||
| -rw-r--r-- | os2eindopdracht/SampleBlock.cpp | 5 | ||||
| -rw-r--r-- | os2eindopdracht/SampleBlock.h | 4 | ||||
| -rw-r--r-- | os2eindopdracht/SampleStream.cpp | 14 | ||||
| -rw-r--r-- | os2eindopdracht/SampleStream.h | 2 | ||||
| -rw-r--r-- | os2eindopdracht/main.cpp | 6 | ||||
| -rw-r--r-- | os2eindopdracht/makefile | 2 | 
8 files changed, 59 insertions, 42 deletions
diff --git a/os2eindopdracht/FilterWorker.cpp b/os2eindopdracht/FilterWorker.cpp index 7d2f315..495d3d1 100644 --- a/os2eindopdracht/FilterWorker.cpp +++ b/os2eindopdracht/FilterWorker.cpp @@ -1,30 +1,35 @@ +#include "FilterWorker.h" +#include "SampleBlock.h" -/* -  std::vector<int16_t> original; -	original = std::vector<int16_t>(stream._stream); -  for (unsigned long i = 0; i < original.size(); i++) { -    double x_pp = i < 2 ? 0 : original[i-2]; -    double x_p = i < 1 ? 0 : original[i-1]; -    double x_ = i < 0 ? 0 : original[i-0]; -    double y_pp = i < 2 ? 0 : stream._stream[i-2]; -    double y_p = i < 1 ? 0 : stream._stream[i-1]; -    stream._stream[i] = args.bass.b0 * x_ + -		                    args.bass.b1 * x_p + -		                    args.bass.b2 * x_pp + -		                    args.bass.a1 * y_p + -		                    args.bass.a2 * y_pp; +FilterWorker::FilterWorker(SampleBlock& input, SampleBlock& output) { +	_input = &input; +	_output = &output; +} + +void FilterWorker::filter(Coefficients bass, Coefficients treble) { +  for (size_t i = 0; i < _output->size; i++) { +    double x_pp = i < 2 ? 0 : *(_input->begin + i - 2); +    double x_p = i < 1 ? 0 : *(_input->begin + i - 1); +    double x_ = i < 0 ? 0 : *(_input->begin + i - 0); +    double y_pp = i < 2 ? 0 : *(_output->begin + i - 2); +    double y_p = i < 1 ? 0 : *(_output->begin + i - 1); +    *(_output->begin + i) = bass.b0 * x_ + +		                        bass.b1 * x_p + +		                        bass.b2 * x_pp + +		                        bass.a1 * y_p + +		                        bass.a2 * y_pp;    } -	original = std::vector<int16_t>(stream._stream); -  for (unsigned long i = 0; i < original.size(); i++) { -    double x_pp = i < 2 ? 0 : original[i-2]; -    double x_p = i < 1 ? 0 : original[i-1]; -    double x_ = i < 0 ? 0 : original[i-0]; -    double y_pp = i < 2 ? 0 : stream._stream[i-2]; -    double y_p = i < 1 ? 0 : stream._stream[i-1]; -    stream._stream[i] = args.treble.b0 * x_ + -		                    args.treble.b1 * x_p + -		                    args.treble.b2 * x_pp + -		                    args.treble.a1 * y_p + -		                    args.treble.a2 * y_pp; +  for (size_t i = 0; i < _output->size; i++) { +    double x_pp = i < 2 ? 0 : *(_input->begin + i - 2); +    double x_p = i < 1 ? 0 : *(_input->begin + i - 1); +    double x_ = i < 0 ? 0 : *(_input->begin + i - 0); +    double y_pp = i < 2 ? 0 : *(_output->begin + i - 2); +    double y_p = i < 1 ? 0 : *(_output->begin + i - 1); +    *(_output->begin + i) = treble.b0 * x_ + +		                        treble.b1 * x_p + +		                        treble.b2 * x_pp + +		                        treble.a1 * y_p + +		                        treble.a2 * y_pp;    } -*/ +} + diff --git a/os2eindopdracht/FilterWorker.h b/os2eindopdracht/FilterWorker.h index e1e84b5..2883d8b 100644 --- a/os2eindopdracht/FilterWorker.h +++ b/os2eindopdracht/FilterWorker.h @@ -1,5 +1,14 @@  #pragma once +#include "SampleBlock.h" +#include "Arguments.h" +  class FilterWorker { +public: +	FilterWorker(SampleBlock& input, SampleBlock& output); +	void filter(Coefficients bass, Coefficients treble); +private: +	SampleBlock* _input; +	SampleBlock* _output;  }; diff --git a/os2eindopdracht/SampleBlock.cpp b/os2eindopdracht/SampleBlock.cpp index 4d4fc16..a1288a6 100644 --- a/os2eindopdracht/SampleBlock.cpp +++ b/os2eindopdracht/SampleBlock.cpp @@ -1,6 +1,7 @@  #include "SampleBlock.h" -SampleBlock::SampleBlock(vector<int16_t>::iterator begin, vector<int16_t>::iterator end) { +SampleBlock::SampleBlock(vector<int16_t>::iterator begin, size_t size) {  	this->begin = begin; -	this->end = end; +	this->end = begin + size; +	this->size = size;  } diff --git a/os2eindopdracht/SampleBlock.h b/os2eindopdracht/SampleBlock.h index 57dbabf..cb1f84a 100644 --- a/os2eindopdracht/SampleBlock.h +++ b/os2eindopdracht/SampleBlock.h @@ -1,5 +1,6 @@  #pragma once +#include <cstdlib>  #include <cstdint>  #include <vector> @@ -7,7 +8,8 @@ using std::vector;  class SampleBlock {  public: -	SampleBlock(vector<int16_t>::iterator begin, vector<int16_t>::iterator end); +	SampleBlock(vector<int16_t>::iterator begin, size_t size);  	vector<int16_t>::iterator begin;  	vector<int16_t>::iterator end; +	size_t size;  }; diff --git a/os2eindopdracht/SampleStream.cpp b/os2eindopdracht/SampleStream.cpp index ca60281..3727e52 100644 --- a/os2eindopdracht/SampleStream.cpp +++ b/os2eindopdracht/SampleStream.cpp @@ -15,7 +15,7 @@ SampleStream::SampleStream(string input_stream) {  void SampleStream::load(string input) {    _stream.clear(); -  for (unsigned long i = 0; i < input.size(); i += 2) +  for (size_t i = 0; i < input.size(); i += 2)      _stream.push_back(((input[i] & 0xff) << 0) | ((input[i+1] & 0xff) << 8));  } @@ -28,13 +28,13 @@ string SampleStream::save() {    return out;  } -vector<SampleBlock> SampleStream::split(unsigned long block_size) { +vector<SampleBlock> SampleStream::split(size_t block_size) {  	vector<SampleBlock> out; -	unsigned long stream_size = _stream.size(); -	for (unsigned long i = 0; i < stream_size; i += block_size) { -		unsigned long begin_offset = i; -		unsigned long end_offset = min(i + block_size, stream_size); -		SampleBlock block(_stream.begin() + begin_offset, _stream.begin() + end_offset); +	size_t stream_size = _stream.size(); +	for (size_t i = 0; i < stream_size; i += block_size) { +		size_t begin_offset = i; +		size_t end_offset = min(i + block_size, stream_size); +		SampleBlock block(_stream.begin() + begin_offset, end_offset - begin_offset);  		out.push_back(block);  	}  	return out; diff --git a/os2eindopdracht/SampleStream.h b/os2eindopdracht/SampleStream.h index 917a60e..4c8b5c3 100644 --- a/os2eindopdracht/SampleStream.h +++ b/os2eindopdracht/SampleStream.h @@ -15,7 +15,7 @@ public:  public:    void load(string input);    string save(); -	vector<SampleBlock> split(unsigned long block_size); +	vector<SampleBlock> split(size_t block_size);  public:    vector<int16_t> _stream; diff --git a/os2eindopdracht/main.cpp b/os2eindopdracht/main.cpp index ae042c5..6d8ddd5 100644 --- a/os2eindopdracht/main.cpp +++ b/os2eindopdracht/main.cpp @@ -27,9 +27,9 @@ int main(int argc, char** argv) {  	SampleStream output(file_input_content.str());  	vector<SampleBlock> output_blocks = output.split(SAMPLE_BLOCK_SIZE); -	// for (unsigned int i = 0; i < input_blocks.size(); i++) { -	// 	FilterWorker(input_blocks[i], output_blocks[i]).filter(args.bass, args.treble); -	// } +	for (size_t i = 0; i < input_blocks.size(); i++) { +		FilterWorker(input_blocks[i], output_blocks[i]).filter(args.bass, args.treble); +	}  	std::fstream file_output(args.file_output, std::ios::out | std::ios::binary);  	std::string edited_stream = output.save(); diff --git a/os2eindopdracht/makefile b/os2eindopdracht/makefile index f71ef29..3d8f260 100644 --- a/os2eindopdracht/makefile +++ b/os2eindopdracht/makefile @@ -26,7 +26,7 @@ original.pcm: original.flac  	./any2s16lepcm $< $@  edit.pcm: original.pcm ./main -	./main $< $@ +	./main $< $@ -b-4 -t-18  edit.wav: edit.pcm  	./s16lepcm2any $< $@  |