00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef __GZ_AUDIO_SOURCE_H__
00023 #define __GZ_AUDIO_SOURCE_H__
00024
00030 #include "gzNode.h"
00031 #include "gzThread.h"
00032
00033
00034 enum gzAudioSourceFormat
00035 {
00036 GZ_AUDIO_SOURCE_FORMAT_MONO_8 = GZ_AUDIO_FORMAT_MONO8,
00037 GZ_AUDIO_SOURCE_FORMAT_MONO_16 = GZ_AUDIO_FORMAT_MONO16,
00038 GZ_AUDIO_SOURCE_FORMAT_STEREO_8 = GZ_AUDIO_FORMAT_STEREO8,
00039 GZ_AUDIO_SOURCE_FORMAT_STEREO_16 = GZ_AUDIO_FORMAT_STEREO16,
00040 GZ_AUDIO_SOURCE_FORMAT_INVALID,
00041 };
00042
00043 enum gzAudioSourceState
00044 {
00045 GZ_AUDIO_SOURCE_INITIAL=GZ_AUDIO_INITIAL,
00046 GZ_AUDIO_SOURCE_PLAYING=GZ_AUDIO_PLAYING,
00047 GZ_AUDIO_SOURCE_PAUSED=GZ_AUDIO_PAUSED,
00048 GZ_AUDIO_SOURCE_STOPPED=GZ_AUDIO_STOPPED,
00049 GZ_AUDIO_SOURCE_ERROR
00050 };
00051
00052
00053
00054
00055
00056
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066 class gzAudioSource : public gzNode
00067 {
00068 public:
00069 GZ_GRAPH_EXPORT gzAudioSource(const gzString &name=GZ_EMPTY_STRING);
00070
00071 GZ_GRAPH_EXPORT virtual ~gzAudioSource();
00072
00073 GZ_DECLARE_TYPE_INTERFACE_EXPORT(GZ_GRAPH_EXPORT);
00074
00075
00076
00077 GZ_GRAPH_EXPORT virtual gzVoid updateNode();
00078
00079
00080 GZ_GRAPH_EXPORT virtual gzReference* clone() const;
00081
00082
00083
00084 GZ_GRAPH_EXPORT gzBool addData(gzAudioSourceFormat format , gzVoid *data , gzULong samples , gzULong frequency , gzUByte stride=0);
00085
00086 GZ_GRAPH_EXPORT gzBool play(const gzFloat &offset=0.0);
00087 GZ_GRAPH_EXPORT gzBool pause();
00088 GZ_GRAPH_EXPORT gzBool resume();
00089 GZ_GRAPH_EXPORT gzBool stop();
00090
00091 GZ_GRAPH_EXPORT gzBool loop(gzBool on=FALSE);
00092
00093 GZ_GRAPH_EXPORT gzAudioSourceState getAudioSourceState();
00094
00095
00096
00097 GZ_GRAPH_EXPORT static gzBool play(const gzRefList<gzAudioSource> &sources,const gzFloat &offset=0.0);
00098 GZ_GRAPH_EXPORT static gzBool pause(const gzRefList<gzAudioSource> &sources);
00099 GZ_GRAPH_EXPORT static gzBool resume(const gzRefList<gzAudioSource> &sources);
00100 GZ_GRAPH_EXPORT static gzBool stop(const gzRefList<gzAudioSource> &sources);
00101
00102
00103
00104 GZ_GRAPH_EXPORT gzBool setPosition(const gzVec3 &position , gzBool immediate=FALSE);
00105 GZ_GRAPH_EXPORT gzBool setOrientation(gzReal heading,gzReal pitch,gzReal roll,gzBool immediate=FALSE);
00106 GZ_GRAPH_EXPORT gzBool setDirection(const gzVec3 &targetvector, gzReal roll , const gzVec3 &up=gzVec3(0,1,0),gzBool immediate=FALSE);
00107
00108
00109
00110 GZ_GRAPH_EXPORT gzVoid cleanBuffers();
00111
00113 GZ_GRAPH_EXPORT gzInt getPendingBuffers();
00114
00115
00116
00117 GZ_GRAPH_EXPORT virtual gzVoid preTraverseAction( gzTraverseAction *actionclass , gzContext *context);
00118
00119 protected:
00120
00121 GZ_GRAPH_EXPORT gzUInt init();
00122
00123 gzUInt m_sourceID;
00124 gzVec3 m_position;
00125 gzVec3 m_orientation;
00126
00127 gzDynamicArray<gzUByte> m_buffer;
00128
00129 };
00130
00131
00132
00133 class gzAudioStreamPlayer : public gzThreadTicker
00134 {
00135 public:
00136
00137 GZ_GRAPH_EXPORT gzAudioStreamPlayer(gzAudioSource *leftSource,gzAudioSource *rightSource=NULL);
00138 GZ_GRAPH_EXPORT virtual ~gzAudioStreamPlayer();
00139
00140 GZ_PROPERTY_EXPORT(gzAudioSourceFormat,Format,GZ_GRAPH_EXPORT);
00141 GZ_PROPERTY_EXPORT(gzAudioSourceFormat,Frequency,GZ_GRAPH_EXPORT);
00142
00143 GZ_GRAPH_EXPORT gzVoid play();
00144 GZ_GRAPH_EXPORT gzVoid stop();
00145
00146 GZ_GRAPH_EXPORT gzBool setStream(gzSerializeAdapter *adapter);
00147
00148 GZ_GRAPH_EXPORT virtual gzVoid onTick();
00149
00150
00151 private:
00152
00153 gzRefPointer<gzAudioSource> m_leftSource;
00154 gzRefPointer<gzAudioSource> m_rightSource;
00155 gzRefPointer<gzReference> m_extSoundManager;
00156 gzRefPointer<gzSerializeAdapter> m_adapter;
00157 gzDynamicArray<gzUByte> m_buffer;
00158 };
00159
00160 #endif // __GZ_AUDIO_SOURCE_H__
00161