Aufgabe 3

main
s.eser 2024-05-31 14:41:30 +02:00
parent 88427ffa73
commit 7d62200041
5 changed files with 47 additions and 3 deletions

BIN
.DS_Store vendored

Binary file not shown.

Binary file not shown.

View File

@ -1,5 +1,6 @@
#include <iostream> #include <iostream>
// Aufgabe 1
// Template für flexiblen Array Typ // Template für flexiblen Array Typ
template <typename T> template <typename T>
class Container { class Container {
@ -33,7 +34,7 @@ public:
data = new T[initial_arr_size]; data = new T[initial_arr_size];
} }
// Destruktor // Destruktor ?
~Container() { ~Container() {
// Speicherfreigabe von Array Inhalt // Speicherfreigabe von Array Inhalt
// delete[] data; // delete[] data;
@ -55,7 +56,9 @@ public:
} }
}; };
Container<char> readWavFile(){ // Aufgabe 2
// Liest "test.wav" im Projektordner ein und gibt ein char Array mit dem Inhalt zurück
Container<char> wavFileToArr(){
// Erstellen der Klasseninstanz mit Konstruktor // Erstellen der Klasseninstanz mit Konstruktor
Container<char> wavData(0); Container<char> wavData(0);
@ -91,9 +94,50 @@ Container<char> readWavFile(){
return wavData; return wavData;
}; };
// Aufgabe 3
// Transformiert "test.wav" im Projektordner zu einer Version mit 8000 Delay Echo
void wavFileEcho(){
// FILE pointer output öffnet "output.wav" mit Schreibrechten
FILE* output = fopen("output.wav","w");
// Erstellung Array Instanz mit Methode zum Einlesen von Wav Dateien
Container<char> sound_samples = wavFileToArr();
// Erstellung Array Instanz für Ringbuffer
Container<char> ringbuffer(0);
// Übergangsvariable für später
char mem;
// Index für Ringbuffer
int index = 0;
// Füllen des dynamischen Array vom Ringbuffer mit 0en
for(int i = 0; i<8000; i++){
ringbuffer[i] = 0;
}
// Anfang bei i=44, weil ab da die Headerdatei fertig ist
for(int i = 44; i<sound_samples.getArraySize(); i++){
// Übergangsvariable zum merken von sound_samples[i]
mem = sound_samples[i];
// sound_samples[i] + Ringbuffer, der durch Index erst nach 8000 Durchläufen > 0 ist
sound_samples[i] = sound_samples[i] + ringbuffer[index];
// Ringbuffer bekommt Übergangsvariable übergeben
ringbuffer[index] = mem;
// Index erhöhen bis alle 8000stel
index = (index+1)%8000;
}
// Schreiben der output.wav aus aktualisierten sound_samples.data
fwrite(sound_samples.data, sizeof(char), sound_samples.getArraySize(), output);
// Freigabe des FILE Pointer
fclose(output);
}
int main() { int main() {
std::cout << "wavData: " << readWavFile().getArraySize() << std::endl; wavFileEcho();
std::cout << "wavFile Size: " << wavFileToArr().getArraySize() << std::endl;
return 0; return 0;
}; };

BIN
output.wav 100644

Binary file not shown.

BIN
test.wav

Binary file not shown.