alapp.h
上传用户:qccn516
上传日期:2013-05-02
资源大小:3382k
文件大小:2k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. /* ALApp
  2.  *
  3.  * Copyright (C) 2003-2004, Alexander Zaprjagaev <frustum@frustum.org>
  4.  *
  5.  * This program is free software; you can redistribute it and/or modify
  6.  * it under the terms of the GNU General Public License as published by
  7.  * the Free Software Foundation; either version 2 of the License, or
  8.  * (at your option) any later version.
  9.  *
  10.  * This program is distributed in the hope that it will be useful,
  11.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  12.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  13.  * GNU General Public License for more details.
  14.  *
  15.  * You should have received a copy of the GNU General Public License
  16.  * along with this program; if not, write to the Free Software
  17.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  18.  */
  19. #ifndef __ALAPP_H__
  20. #define __ALAPP_H__
  21. #include <vector>
  22. #include <AL/al.h>
  23. #include <AL/alc.h>
  24. /*
  25.  */
  26. class SoundFile {
  27. public:
  28. SoundFile() : channels(0), freq(0) { }
  29. virtual ~SoundFile() { }
  30. static SoundFile *load(const char *name);
  31. virtual int size() = 0;
  32. virtual int read(char *buffer,int size = -1) = 0;
  33. virtual void seek(double time) = 0;
  34. int channels;
  35. int freq;
  36. };
  37. /*
  38.  */
  39. class Sound {
  40. public:
  41. Sound(const char *name,int flag = 0);
  42. ~Sound();
  43. enum {
  44. LOOP = 1 << 0,
  45. STREAM = 1 << 1,
  46. BUFFER_SIZE = 65536,
  47. };
  48. void play();
  49. void pause();
  50. void stop();
  51. void update();
  52. int flag;
  53. SoundFile *file;
  54. ALuint format;
  55. char *buffer;
  56. int current_buffer;
  57. ALuint buffers[2];
  58. ALuint source;
  59. };
  60. /*
  61.  */
  62. class ALApp {
  63. public:
  64. ALApp();
  65. virtual ~ALApp();
  66. void error();
  67. void update();
  68. protected:
  69. ALCdevice *device;
  70. ALCcontext *context;
  71. friend class Sound;
  72. static void addStream(Sound *s);
  73. static void removeStream(Sound *s);
  74. static std::vector<Sound*> streams;
  75. };
  76. #endif /* __ALAPP_H__ */