]> git.tdb.fi Git - libs/al.git/blobdiff - source/waveform.cpp
Split Sound into SoundDecoder and Waveform parts
[libs/al.git] / source / waveform.cpp
diff --git a/source/waveform.cpp b/source/waveform.cpp
new file mode 100644 (file)
index 0000000..36978c6
--- /dev/null
@@ -0,0 +1,50 @@
+#include "sounddecoder.h"
+#include "waveform.h"
+
+using namespace std;
+
+namespace Msp {
+namespace AL {
+
+Waveform::Waveform():
+       format(MONO8),
+       freq(0),
+       size(0),
+       data(0)
+{ }
+
+Waveform::~Waveform()
+{
+       delete[] data;
+}
+
+void Waveform::load_file(const string &fn)
+{
+       SoundDecoder decoder;
+       decoder.open_file(fn);
+       load(decoder);
+}
+
+void Waveform::load_memory(const void *d, unsigned len)
+{
+       SoundDecoder decoder;
+       decoder.open_memory(d, len);
+       load(decoder);
+}
+
+void Waveform::load(SoundDecoder &decoder)
+{
+       delete[] data;
+
+       format = decoder.get_format();
+       freq = decoder.get_frequency();
+       size = decoder.get_size();
+       data = new char[size];
+       unsigned pos = 0;
+       while(unsigned len = decoder.read(data+pos, size-pos))
+               pos += len;
+       size = pos;
+}
+
+} // namespace AL
+} // namespace Msp