FineKernelToolKit  2.9.0
 全て クラス ネームスペース ファイル 関数 変数 型定義 列挙型 列挙型の値 フレンド マクロ定義 ページ
Audio.h
説明を見る。
1 /****************************************************************************
2  *
3  * Copyright (c) 1999-2014, Fine Kernel Project, All rights reserved.
4  *
5  * Redistribution and use in source and binary forms,
6  * with or without modification, are permitted provided that the
7  * following conditions are met:
8  *
9  * - Redistributions of source code must retain the above
10  * copyright notice, this list of conditions and the
11  * following disclaimer.
12  *
13  * - Redistributions in binary form must reproduce the above
14  * copyright notice, this list of conditions and the
15  * following disclaimer in the documentation and/or
16  * other materials provided with the distribution.
17  *
18  * - Neither the name of the copyright holders nor the names
19  * of its contributors may be used to endorse or promote
20  * products derived from this software without specific
21  * prior written permission.
22  *
23  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
24  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
25  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
26  * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
27  * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
28  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
29  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30  * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
31  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
32  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
33  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34  * POSSIBILITY OF SUCH DAMAGE.
35  *
36  ****************************************************************************/
37 /****************************************************************************
38  *
39  * Copyright (c) 1999-2014, Fine Kernel Project, All rights reserved.
40  *
41  * 本ソフトウェアおよびソースコードのライセンスは、基本的に
42  * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
43  *
44  * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
45  * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
46  *
47  * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
48  * および下記免責条項を含めること。
49  *
50  * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
51  * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
52  * 含めること。
53  *
54  * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
55  * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
56  * コントリビューターの名前を使用してはならない。
57  *
58  * 本ソフトウェアは、著作権者およびコントリビューターによって「現
59  * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
60  * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
61  * に限定されない、いかなる保証もないものとします。著作権者もコン
62  * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
63  * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
64  * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
65  * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
66  * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
67  * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
68  * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
69  * ついて、一切責任を負わないものとします。
70  *
71  ****************************************************************************/
72 #ifndef __FK_AUDIO_HEADER__
73 #define __FK_AUDIO_HEADER__
74 
75 #include <vorbis/vorbisfile.h>
76 #include <string>
77 #include <vector>
78 
79 #ifdef _MACOSX_
80 #include <OpenAL/al.h>
81 #include <OpenAL/alc.h>
82 #else
83 #include <AL/al.h>
84 #include <AL/alc.h>
85 #endif
86 
87 #include <FK/IDAdmin.h>
88 #include <FK/Vector.h>
89 
90 
91 const unsigned int FK_OV_BUFSIZE = 4096;
92 const unsigned int FK_OV_DEFAULT_QUEUE_SIZE = 64;
93 
94 class fk_Model;
95 
97 
121  private:
122 
123  protected:
124 
125 #ifndef FK_DOXYGEN_USER_PROCESS
126 
127  double refDist;
128  fk_Vector sourcePos;
129  double gain;
130  static fk_Model *listenerCamera;
131 
132  bool startStatus, endStatus;
133  double loopStartTime, loopEndTime;
134  ALenum format;
135  long rate;
136  bool loopMode;
137  unsigned int queueSize;
138  int source_id;
139  ALuint source;
140 
141  bool surround;
142  fk_Model *ref_model;
143 
144  void InitSource(void);
145 
146  void CreateID(void);
147  void EraseID(void);
148  void MakeOVInfo(OggVorbis_File *);
149 
150  static void UpdateListener(void);
151 
152 #endif // !FK_DOXYGEN_USER_PROCESS
153 
154  public:
155 
157  fk_AudioBase(void);
158 
160  virtual ~fk_AudioBase();
161 
162 
164 
165 
167 
179  virtual bool open(const std::string &name) = 0;
180 
182 
193  virtual bool ready(void) = 0;
194 
196 
205  virtual bool play(void) = 0;
206 
208 
218  virtual double tell(void) = 0;
219 
221 
228  virtual void seek(double time) = 0;
229 
231 
239  virtual void stop(void) = 0;
240 
242 
247  virtual void end(void) = 0;
248 
250 
259  void pause(void);
260 
262 
264 
265 
267 
275  void setGain(double gain);
276 
278 
284  double getGain(void);
285 
287 
289 
290 
292 
299  void setQueueSize(int size);
300 
302 
308  int getQueueSize(void);
310 
312 
313 
315 
331  void setLoopMode(bool mode);
332 
334 
343  bool getLoopMode(void);
344 
346 
357  void setLoopArea(double start, double end);
358 
360 
367  double getLoopStartTime(void);
368 
370 
377  double getLoopEndTime(void);
378 
380 
382 
383 
385 
395  void setPosition(const fk_Vector &pos);
396 
398 
405  fk_Vector getPosition(void);
406 
408 
420  void setModel(fk_Model *model);
421 
423 
434  void setModel(fk_Model &model);
435 
437 
444  fk_Model * getModel(void);
445 
447 
457  void setReferenceDist(double dist);
458 
460 
468  double getReferenceDist(void);
469 
471 
484  void setSurroundMode(bool mode);
485 
487 
495  bool getSurroundMode(void);
496 
498 
500 
501 
503 
511  static bool init(void);
512 
514 
523  static bool getInit(void);
524 
526 
546  static void sleep(double time);
547 
549 
551 
552 
554 
571  static void setListenerModel(fk_Model *model);
572 
574 
591  static void setListenerModel(fk_Model &model);
592 
594 
602  static fk_Model * getListenerModel(void);
603 
605 };
606 
608 
632 class fk_AudioStream : public fk_AudioBase {
633 private:
634  OggVorbis_File vf;
635  bool ovOpenStatus;
636  int current;
637  char buffer[FK_OV_BUFSIZE];
638  double nowTime;
639 
640  void StartQueue(bool);
641  bool PlayStream(void);
642  void UnQueue(bool);
643 
644 public:
645 
647  fk_AudioStream(void);
649  virtual ~fk_AudioStream();
650 
652 
666  bool open(const std::string &filename);
667 
669 
680  bool ready(void);
681 
683 
693  bool play(void);
694 
696 
706  double tell(void);
707 
709 
716  void seek(double time);
717 
719 
727  void stop(void);
728 
730 
735  void end(void);
736 };
737 
739 
766  protected:
767 
768 #ifndef FK_DOXYGEN_USER_PROCESS
769 
770  unsigned int current, length;
771  std::vector<char> buffer;
772  std::vector<int> chunkSize;
773  std::vector<double> chunkTime;
774 
775 
776  void ReadBuffer(OggVorbis_File *);
777  void StartQueue(bool);
778  bool PlayBuffer(void);
779  void UnQueue(bool);
780 
781 #endif // !FK_DOXYGEN_USER_PROCESS
782 
783 public:
784 
786  fk_AudioOggBuffer(void);
788  virtual ~fk_AudioOggBuffer();
789 
791 
805  bool open(const std::string &filename);
806 
808 
819  bool ready(void);
820 
822 
832  bool play(void);
833 
835 
845  double tell(void);
846 
848 
855  void seek(double time);
856 
858 
866  void stop(void);
867 
869 
874  void end(void);
875 };
876 
878 
905  private:
906 
907  int ReadHeaderWav(FILE *, int *, int *, int *, int *);
908  bool ReadBuffer(FILE *, int, int, int, int);
909 
910 public:
911 
913  fk_AudioWavBuffer(void);
915  virtual ~fk_AudioWavBuffer();
916 
918 
932  bool open(const std::string &filename);
933 };
934 
935 #endif // !__FK_AUDIO_HEADER__
bool ready(void)
再生開始可能状態取得関数
virtual ~fk_AudioWavBuffer()
デストラクタ
bool open(const std::string &filename)
オーディオデータ読み込み関数
Ogg Vorbis オーディオバッファクラス
Definition: Audio.h:765
static void setListenerModel(fk_Model *model)
サラウンドリスナー同期モデル設定関数1
static bool init(void)
オーディオシステム初期化関数
fk_AudioStream(void)
コンストラクタ
bool play(void)
再生関数
void pause(void)
ポーズ関数
void end(void)
オーディオデータ解放関数
モデルを生成、管理するクラス
Definition: Model.h:139
オーディオ基底クラス
Definition: Audio.h:120
void seek(double time)
再生位置頭出し関数
void setQueueSize(int size)
キューバッファサイズ設定関数
fk_AudioWavBuffer(void)
コンストラクタ
3次元ベクトルを管理するクラス
Definition: Vector.h:110
double tell(void)
再生位置取得関数
virtual bool ready(void)=0
再生開始可能状態取得関数
void stop(void)
停止関数
double tell(void)
再生位置取得関数
static fk_Model * getListenerModel(void)
サラウンドリスナーモデル取得関数
virtual bool play(void)=0
再生関数
virtual void end(void)=0
オーディオデータ解放関数
bool play(void)
再生関数
void end(void)
オーディオデータ解放関数
virtual ~fk_AudioStream()
デストラクタ
static bool getInit(void)
オーディオシステム初期化状態取得関数
bool getSurroundMode(void)
サラウンド効果状態取得関数
Wave オーディオバッファクラス
Definition: Audio.h:904
fk_Model * getModel(void)
サラウンド音源同期モデル取得関数
const unsigned int FK_OV_DEFAULT_QUEUE_SIZE
Definition: Audio.h:92
bool getLoopMode(void)
ループモード取得関数
void setSurroundMode(bool mode)
サラウンド効果状態設定関数
void setGain(double gain)
音量設定関数
double getGain(void)
音量取得関数
double getReferenceDist(void)
サラウンド音源座有効距離取得関数
double getLoopStartTime(void)
ループ開始点取得関数
virtual void stop(void)=0
停止関数
void seek(double time)
再生位置頭出し関数
fk_AudioOggBuffer(void)
コンストラクタ
int getQueueSize(void)
キューバッファサイズ取得関数
virtual double tell(void)=0
再生位置取得関数
virtual ~fk_AudioOggBuffer()
デストラクタ
bool ready(void)
再生開始可能状態取得関数
bool open(const std::string &filename)
オーディオデータ読み込み関数
fk_AudioBase(void)
コンストラクタ
const unsigned int FK_OV_BUFSIZE
Definition: Audio.h:91
void stop(void)
停止関数
void setReferenceDist(double dist)
サラウンド音源有効距離設定関数
virtual ~fk_AudioBase()
デストラクタ
static void sleep(double time)
プロセススリープ関数
void setModel(fk_Model *model)
サラウンド音源同期モデル設定関数1
virtual void seek(double time)=0
再生位置頭出し関数
virtual bool open(const std::string &name)=0
オーディオデータ読み込み関数
void setPosition(const fk_Vector &pos)
サラウンド音源位置設定関数
オーディオストリームクラス
Definition: Audio.h:632
bool open(const std::string &filename)
オーディオデータ読み込み関数
void setLoopArea(double start, double end)
ループエリア設定関数
double getLoopEndTime(void)
ループ終了点取得関数
fk_Vector getPosition(void)
サラウンド音源座標取得関数
void setLoopMode(bool mode)
ループモード設定関数