]> git.tdb.fi Git - libs/al.git/blob - source/waveform.cpp
Make SoundDecoder a base class and split off Ogg decoding
[libs/al.git] / source / waveform.cpp
1 #include <msp/core/refptr.h>
2 #include "sounddecoder.h"
3 #include "waveform.h"
4
5 using namespace std;
6
7 namespace Msp {
8 namespace AL {
9
10 Waveform::Waveform():
11         format(MONO8),
12         freq(0),
13         size(0),
14         data(0)
15 { }
16
17 Waveform::~Waveform()
18 {
19         delete[] data;
20 }
21
22 void Waveform::load_file(const string &fn)
23 {
24         RefPtr<SoundDecoder> decoder = SoundDecoder::open_file(fn);
25         load(*decoder);
26 }
27
28 void Waveform::load_io(IO::Seekable &io)
29 {
30         RefPtr<SoundDecoder> decoder = SoundDecoder::open_io(io);
31         load(*decoder);
32 }
33
34 void Waveform::load(SoundDecoder &decoder)
35 {
36         delete[] data;
37
38         format = decoder.get_format();
39         freq = decoder.get_frequency();
40         size = decoder.get_size();
41         data = new char[size];
42         unsigned pos = 0;
43         while(unsigned len = decoder.read(data+pos, size-pos))
44                 pos += len;
45         size = pos;
46 }
47
48 } // namespace AL
49 } // namespace Msp