1 /**
2  * Copyright (c) 2006-2016 LOVE Development Team
3  *
4  * This software is provided 'as-is', without any express or implied
5  * warranty.  In no event will the authors be held liable for any damages
6  * arising from the use of this software.
7  *
8  * Permission is granted to anyone to use this software for any purpose,
9  * including commercial applications, and to alter it and redistribute it
10  * freely, subject to the following restrictions:
11  *
12  * 1. The origin of this software must not be misrepresented; you must not
13  *    claim that you wrote the original software. If you use this software
14  *    in a product, an acknowledgment in the product documentation would be
15  *    appreciated but is not required.
16  * 2. Altered source versions must be plainly marked as such, and must not be
17  *    misrepresented as being the original software.
18  * 3. This notice may not be removed or altered from any source distribution.
19  **/
20 
21 #ifndef LOVE_SOUND_LULLABY_DECODER_H
22 #define LOVE_SOUND_LULLABY_DECODER_H
23 
24 // LOVE
25 #include "sound/Decoder.h"
26 #include "filesystem/File.h"
27 
28 #include <string>
29 
30 namespace love
31 {
32 namespace sound
33 {
34 namespace lullaby
35 {
36 
37 class Decoder : public love::sound::Decoder
38 {
39 public:
40 
41 	Decoder(Data *data, const std::string &ext, int bufferSize);
42 
43 	virtual ~Decoder();
44 
45 	// Implement some of love::sound::Decoder, but allow subclasses
46 	// to override them.
47 	virtual void *getBuffer() const;
48 	virtual int getSize() const;
49 	virtual int getSampleRate() const;
50 	virtual bool isFinished();
51 
52 protected:
53 
54 	// The encoded data. This should be replaced with buffered file
55 	// reads in the future.
56 	StrongRef<Data> data;
57 
58 	// File extension.
59 	std::string ext;
60 
61 	// When the decoder decodes data incrementally, it writes
62 	// this many bytes at a time (at most).
63 	int bufferSize;
64 
65 	// The desired frequency of the samples. 44100, 22050, or 11025.
66 	int sampleRate;
67 
68 	// Holds internal memory.
69 	void *buffer;
70 
71 	// Set this to true when eof has been reached.
72 	bool eof;
73 }; // Decoder
74 
75 } // lullaby
76 } // sound
77 } // love
78 
79 #endif // LOVE_SOUND_LULLABY_DECODER_H
80