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