FineKernelToolKit: FK/Audio.h ソースファイル

FineKernelToolKit 4.3.0

読み取り中…
検索中…
一致する文字列を見つけられません
Audio.h
[詳解]
1#if !defined(__FK_AUDIO_HEADER__)
2#define __FK_AUDIO_HEADER__
3
4#if !defined(OV_EXCLUDE_STATIC_CALLBACKS)
5#define OV_EXCLUDE_STATIC_CALLBACKS
6#endif
7
8#include <string>
9#include <vector>
10
11#include <FK/IDAdmin.hh>
12#include <FK/Vector.h>
13
14struct OggVorbis_File;
15
16namespace FK {
17 class fk_Model;
18
20
42
43 class fk_AudioBase {
44
45 class Member {
46 public:
47 double refDist;
48 fk_Vector sourcePos;
49 double gain;
50 bool startStatus, endStatus;
51 double loopStartTime, loopEndTime;
52 int format;
53 int rate;
54 bool loopMode;
55 unsigned int queueSize;
56 int source_id;
57 unsigned int source;
58 bool surround;
59 fk_Model *ref_model;
60
61 Member(void);
62 };
63
64 public:
65#if !defined(FK_DOXYGEN_USER_PROCESS)
66 static const unsigned int BUFSIZE = 4096;
67 static const unsigned int DEFAULT_QUEUE_SIZE = 64;
68#endif
69
71 fk_AudioBase(void);
72
74 virtual ~fk_AudioBase();
75
76
79
81
93 virtual bool open(const std::string &name) = 0;
94
96
107 virtual bool ready(void) = 0;
108
110
119 virtual bool play(void) = 0;
120
122
132 virtual double tell(void) = 0;
133
135
142 virtual void seek(double time) = 0;
143
145
153 virtual void stop(void) = 0;
154
156
161 virtual void end(void) = 0;
162
164
173 void pause(void);
174
176
179
181
189 void setGain(double gain);
190
192
198 double getGain(void);
199
201
204
206
213 void setQueueSize(int size);
214
216
222 int getQueueSize(void);
224
227
229
245 void setLoopMode(bool mode);
246
248
257 bool getLoopMode(void);
258
260
271 void setLoopArea(double start, double end);
272
274
281 double getLoopStartTime(void);
282
284
291 double getLoopEndTime(void);
292
294
297
299
309 void setPosition(const fk_Vector &pos);
310
312
319 fk_Vector getPosition(void);
320
322
334 void setModel(fk_Model *model);
335
337
348 void setModel(fk_Model &model);
349
351
358 fk_Model * getModel(void);
359
361
371 void setReferenceDist(double dist);
372
374
382 double getReferenceDist(void);
383
385
398 void setSurroundMode(bool mode);
399
401
409 bool getSurroundMode(void);
410
412
415
417
425 static bool init(void);
426
428
437 static bool getInit(void);
438
440
460 static void sleep(double time);
461
463
466
468
485 static void setListenerModel(fk_Model *model);
486
488
505 static void setListenerModel(fk_Model &model);
506
508
516 static fk_Model * getListenerModel(void);
517
519
520 protected:
521
522#if !defined(FK_DOXYGEN_USER_PROCESS)
523
524 static inline bool initStatus = false;
525 static inline std::unique_ptr<fk_IDAdmin> admin = std::make_unique<fk_IDAdmin>(0);
526 static inline int sourceNum = 0;
527 static inline fk_Model* listenerCamera = nullptr;
528
529 std::unique_ptr<Member> _m_AudioBase;
530
531 void CreateID(void);
532 void EraseID(void);
533 void MakeOVInfo(OggVorbis_File *);
534
535 static void UpdateListener(void);
536 static bool ALInit(void);
537 static bool ALExit(void);
538
539#endif // !FK_DOXYGEN_USER_PROCESS
540 };
541
543
566
567 class fk_AudioStream : public fk_AudioBase {
568
569 class Member {
570 public:
571 bool ovOpenStatus;
572 int current;
573 std::vector<char> buffer;
574 double nowTime;
575 std::unique_ptr<OggVorbis_File> vf;
576
577 Member(void);
578 };
579
580
581 public:
582
584 fk_AudioStream(void);
586 virtual ~fk_AudioStream();
587
589
603 bool open(const std::string &filename);
604
606
617 bool ready(void);
618
620
630 bool play(void);
631
633
643 double tell(void);
644
646
653 void seek(double time);
654
656
664 void stop(void);
665
667
672 void end(void);
673
674 private:
675 std::unique_ptr<Member> _m;
676
677 void StartQueue(bool);
678 bool PlayStream(void);
679 void UnQueue(bool);
680 };
681
683
709 class fk_AudioOggBuffer : public fk_AudioBase {
710
711 class Member {
712 public:
713 unsigned int current, length;
714 std::vector<char> buffer;
715 std::vector<int> chunkSize;
716 std::vector<double> chunkTime;
717
718 Member(void);
719 };
720
721 public:
722
724 fk_AudioOggBuffer(void);
726 virtual ~fk_AudioOggBuffer();
727
729
743 bool open(const std::string &filename);
744
746
757 bool ready(void);
758
760
770 bool play(void);
771
773
783 double tell(void);
784
786
793 void seek(double time);
794
796
804 void stop(void);
805
807
812 void end(void);
813
814 protected:
815
816#if !defined(FK_DOXYGEN_USER_PROCESS)
817 std::unique_ptr<Member> _m;
818 void ReadBuffer(OggVorbis_File *);
819 void StartQueue(bool);
820 bool PlayBuffer(void);
821 void UnQueue(bool);
822
823#endif // !FK_DOXYGEN_USER_PROCESS
824
825 };
826
828
853
854 class fk_AudioWavBuffer : public fk_AudioOggBuffer {
855 public:
856
858 fk_AudioWavBuffer(void);
860 virtual ~fk_AudioWavBuffer();
861
863
877 bool open(const std::string &filename);
878
879 private:
880 int ReadHeaderWav(std::ifstream &, int *, int *, unsigned int *, int *);
881 bool ReadBuffer(std::ifstream &, int, int, unsigned int, int);
882
883 };
884}
885
886#endif // !__FK_AUDIO_HEADER__
887
888/****************************************************************************
889 *
890 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
891 *
892 * Redistribution and use in source and binary forms,
893 * with or without modification, are permitted provided that the
894 * following conditions are met:
895 *
896 * - Redistributions of source code must retain the above
897 * copyright notice, this list of conditions and the
898 * following disclaimer.
899 *
900 * - Redistributions in binary form must reproduce the above
901 * copyright notice, this list of conditions and the
902 * following disclaimer in the documentation and/or
903 * other materials provided with the distribution.
904 *
905 * - Neither the name of the copyright holders nor the names
906 * of its contributors may be used to endorse or promote
907 * products derived from this software without specific
908 * prior written permission.
909 *
910 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
911 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
912 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
913 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
914 * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
915 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
916 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
917 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
918 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
919 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
920 * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
921 * POSSIBILITY OF SUCH DAMAGE.
922 *
923 ****************************************************************************/
924/****************************************************************************
925 *
926 * Copyright (c) 1999-2024, Fine Kernel Project, All rights reserved.
927 *
928 * 本ソフトウェアおよびソースコードのライセンスは、基本的に
929 * 「修正 BSD ライセンス」に従います。以下にその詳細を記します。
930 *
931 * ソースコード形式かバイナリ形式か、変更するかしないかを問わず、
932 * 以下の条件を満たす場合に限り、再頒布および使用が許可されます。
933 *
934 * - ソースコードを再頒布する場合、上記の著作権表示、本条件一覧、
935 * および下記免責条項を含めること。
936 *
937 * - バイナリ形式で再頒布する場合、頒布物に付属のドキュメント等の
938 * 資料に、上記の著作権表示、本条件一覧、および下記免責条項を
939 * 含めること。
940 *
941 * - 書面による特別の許可なしに、本ソフトウェアから派生した製品の
942 * 宣伝または販売促進に、本ソフトウェアの著作権者の名前または
943 * コントリビューターの名前を使用してはならない。
944 *
945 * 本ソフトウェアは、著作権者およびコントリビューターによって「現
946 * 状のまま」提供されており、明示黙示を問わず、商業的な使用可能性、
947 * および特定の目的に対する適合性に関す暗黙の保証も含め、またそれ
948 * に限定されない、いかなる保証もないものとします。著作権者もコン
949 * トリビューターも、事由のいかんを問わず、損害発生の原因いかんを
950 * 問わず、かつ責任の根拠が契約であるか厳格責任であるか(過失その
951 * 他の)不法行為であるかを問わず、仮にそのような損害が発生する可
952 * 能性を知らされていたとしても、本ソフトウェアの使用によって発生
953 * した(代替品または代用サービスの調達、使用の喪失、データの喪失、
954 * 利益の喪失、業務の中断も含め、またそれに限定されない)直接損害、
955 * 間接損害、偶発的な損害、特別損害、懲罰的損害、または結果損害に
956 * ついて、一切責任を負わないものとします。
957 *
958 ****************************************************************************/
Vector.h
FK::fk_AudioBase::getLoopMode
bool getLoopMode(void)
ループモード取得関数
FK::fk_AudioBase::getInit
static bool getInit(void)
オーディオシステム初期化状態取得関数
FK::fk_AudioBase::getModel
fk_Model * getModel(void)
サラウンド音源同期モデル取得関数
FK::fk_AudioBase::setQueueSize
void setQueueSize(int size)
キューバッファサイズ設定関数
FK::fk_AudioBase::getQueueSize
int getQueueSize(void)
キューバッファサイズ取得関数
FK::fk_AudioBase::seek
virtual void seek(double time)=0
再生位置頭出し関数
FK::fk_AudioBase::open
virtual bool open(const std::string &name)=0
オーディオデータ読み込み関数
FK::fk_AudioBase::setReferenceDist
void setReferenceDist(double dist)
サラウンド音源有効距離設定関数
FK::fk_AudioBase::getLoopStartTime
double getLoopStartTime(void)
ループ開始点取得関数
FK::fk_AudioBase::setModel
void setModel(fk_Model &model)
サラウンド音源同期モデル設定関数2
FK::fk_AudioBase::fk_AudioBase
fk_AudioBase(void)
コンストラクタ
FK::fk_AudioBase::stop
virtual void stop(void)=0
停止関数
FK::fk_AudioBase::setLoopArea
void setLoopArea(double start, double end)
ループエリア設定関数
FK::fk_AudioBase::setSurroundMode
void setSurroundMode(bool mode)
サラウンド効果状態設定関数
FK::fk_AudioBase::setListenerModel
static void setListenerModel(fk_Model &model)
サラウンドリスナー同期モデル設定関数2
FK::fk_AudioBase::end
virtual void end(void)=0
オーディオデータ解放関数
FK::fk_AudioBase::setListenerModel
static void setListenerModel(fk_Model *model)
サラウンドリスナー同期モデル設定関数1
FK::fk_AudioBase::getPosition
fk_Vector getPosition(void)
サラウンド音源座標取得関数
FK::fk_AudioBase::init
static bool init(void)
オーディオシステム初期化関数
FK::fk_AudioBase::tell
virtual double tell(void)=0
再生位置取得関数
FK::fk_AudioBase::setPosition
void setPosition(const fk_Vector &pos)
サラウンド音源位置設定関数
FK::fk_AudioBase::sleep
static void sleep(double time)
プロセススリープ関数
FK::fk_AudioBase::getListenerModel
static fk_Model * getListenerModel(void)
サラウンドリスナーモデル取得関数
FK::fk_AudioBase::setLoopMode
void setLoopMode(bool mode)
ループモード設定関数
FK::fk_AudioBase::getReferenceDist
double getReferenceDist(void)
サラウンド音源座有効距離取得関数
FK::fk_AudioBase::play
virtual bool play(void)=0
再生関数
FK::fk_AudioBase::getSurroundMode
bool getSurroundMode(void)
サラウンド効果状態取得関数
FK::fk_AudioBase::pause
void pause(void)
ポーズ関数
FK::fk_AudioBase::getLoopEndTime
double getLoopEndTime(void)
ループ終了点取得関数
FK::fk_AudioBase::setModel
void setModel(fk_Model *model)
サラウンド音源同期モデル設定関数1
FK::fk_AudioBase::getGain
double getGain(void)
音量取得関数
FK::fk_AudioBase::ready
virtual bool ready(void)=0
再生開始可能状態取得関数
FK::fk_AudioBase::setGain
void setGain(double gain)
音量設定関数
FK::fk_AudioBase::~fk_AudioBase
virtual ~fk_AudioBase()
デストラクタ
FK::fk_AudioOggBuffer::~fk_AudioOggBuffer
virtual ~fk_AudioOggBuffer()
デストラクタ
FK::fk_AudioOggBuffer::seek
void seek(double time)
再生位置頭出し関数
FK::fk_AudioOggBuffer::ready
bool ready(void)
再生開始可能状態取得関数
FK::fk_AudioOggBuffer::end
void end(void)
オーディオデータ解放関数
FK::fk_AudioOggBuffer::open
bool open(const std::string &filename)
オーディオデータ読み込み関数
FK::fk_AudioOggBuffer::tell
double tell(void)
再生位置取得関数
FK::fk_AudioOggBuffer::fk_AudioOggBuffer
fk_AudioOggBuffer(void)
コンストラクタ
FK::fk_AudioOggBuffer::play
bool play(void)
再生関数
FK::fk_AudioOggBuffer::stop
void stop(void)
停止関数
FK::fk_AudioStream::stop
void stop(void)
停止関数
FK::fk_AudioStream::tell
double tell(void)
再生位置取得関数
FK::fk_AudioStream::~fk_AudioStream
virtual ~fk_AudioStream()
デストラクタ
FK::fk_AudioStream::end
void end(void)
オーディオデータ解放関数
FK::fk_AudioStream::fk_AudioStream
fk_AudioStream(void)
コンストラクタ
FK::fk_AudioStream::play
bool play(void)
再生関数
FK::fk_AudioStream::seek
void seek(double time)
再生位置頭出し関数
FK::fk_AudioStream::ready
bool ready(void)
再生開始可能状態取得関数
FK::fk_AudioStream::open
bool open(const std::string &filename)
オーディオデータ読み込み関数
FK::fk_AudioWavBuffer::fk_AudioWavBuffer
fk_AudioWavBuffer(void)
コンストラクタ
FK::fk_AudioWavBuffer::~fk_AudioWavBuffer
virtual ~fk_AudioWavBuffer()
デストラクタ
FK::fk_AudioWavBuffer::open
bool open(const std::string &filename)
オーディオデータ読み込み関数
FK::fk_Model
モデルを生成、管理するクラス
Definition Model.h:101
FK::fk_Vector
3次元ベクトルを管理するクラス
Definition Vector.h:45
FK
Fine Kernel Toolkit 名前空間
Definition Angle.h:6