1 /* -*- Mode: C++; c-basic-offset: 2; tab-width: 2; indent-tabs-mode: nil -*-
2  *
3  * Quadra, an action puzzle game
4  * Copyright (C) 1998-2000  Ludus Design
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 2.1 of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public
17  * License along with this library; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  */
20 
21 #ifndef _HEADER_SOUND
22 #define _HEADER_SOUND
23 
24 #include <vector>
25 
26 #include "SDL.h"
27 #include "res.h"
28 
29 class SampleData;
30 class Playing_sfx;
31 
32 class Sound {
33   SDL_AudioSpec spec;
34 	std::vector<Playing_sfx*> plays;
35 	static void audio_callback(void *userdata, Uint8 *stream, int len);
36 	Sound(const SDL_AudioSpec& _spec);
37 public:
38   static Sound* New();
39   SampleData* normalize(char* _sample, unsigned int _size,
40                         unsigned int _freq, unsigned int _bps);
41   void start(SampleData* _sam, int _vol, int _pan, int _freq);
42 	~Sound();
43 };
44 
45 class Sample {
46   SampleData* data;
47 	void loadriff(Res& _res);
48 public:
49 	Sample(Res& re);
50   // It's a mystery to me why the previous constructor isn't
51   // sufficient, but it isn't, so here we are.
52   Sample(Res_doze re);
53 	void play(int _vol, int _pan, int _freq);
54 	~Sample();
55 };
56 
57 extern Sound* sound;
58 
59 #endif
60