Aufgabe 3
parent
88427ffa73
commit
7d62200041
Binary file not shown.
|
@ -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;
|
||||||
};
|
};
|
Binary file not shown.
Loading…
Reference in New Issue