#pragma once #include "style.h" #include "audio.h" //########################################################################## //####################### AudioLevelOfDetail ######################### //########################################################################## class AudioLevelOfDetail: public Plug { public: // //----------------------------------------------------------------------- // Construction, Destruction, Testing //----------------------------------------------------------------------- // AudioLevelOfDetail(PlugStream *stream); ~AudioLevelOfDetail(); Logical TestInstance() const; // //----------------------------------------------------------------------- // BuildFromPage //----------------------------------------------------------------------- // static void BuildFromPage( PlugStream *stream, NameList *name_list, ClassID class_ID, ObjectID object_ID ); // //----------------------------------------------------------------------- // Accessors //----------------------------------------------------------------------- // virtual AudioVoiceCount GetVoiceCount() {return voiceCount;} AudioRenderType GetAudioRenderType() {return audioRenderType;} AudioFrameCount GetSuspendDelay() {return suspendDelay;} private: // //----------------------------------------------------------------------- // Private data //----------------------------------------------------------------------- // #if 0 // //----------------------------------------------------------------------- // Defines the radial variation of the amplitude of the audio source. // This feature is implemented well in Crystal River Engineering's // API. The radiation profile of an audio source is specified with // an array of sound levels in decibels paired with angles off of // the audio source orientation. For example, you can design a // rocket sound that is louder when heard from directly behind then // from the side. //----------------------------------------------------------------------- // AudioRadiationProfile amplitudeRadiationProfile; #endif #if 0 // //----------------------------------------------------------------------- // Defines the radial variation of the high frequency content of the // audio source. This concept is analogous to // SetAmplitudeRadiationProfile except applied to the high frequency // content of the audio source. Again, this allows the audio source // to vary with respect to the position and orientation of the audio // source and head. //----------------------------------------------------------------------- // AudioRadiationProfile filterRadiationProfile; #endif // //----------------------------------------------------------------------- // Misc //----------------------------------------------------------------------- // AudioVoiceCount voiceCount; AudioRenderType audioRenderType; AudioFrameCount suspendDelay; }; //########################################################################## //########################## AudioResource ############################ //########################################################################## class AudioResource: public Node { public: // //----------------------------------------------------------------------- // Construction, Destruction, Testing //----------------------------------------------------------------------- // AudioResource(PlugStream *stream); ~AudioResource(); Logical TestInstance() const; // //----------------------------------------------------------------------- // BuildFromPage //----------------------------------------------------------------------- // static void BuildFromPage( PlugStream *stream, NameList *name_list, ClassID class_ID, ObjectID object_ID ); // //----------------------------------------------------------------------- // SetDistance //----------------------------------------------------------------------- // void SetDistance(Scalar distance); // //----------------------------------------------------------------------- // Accessors //----------------------------------------------------------------------- // AudioVoiceCount GetVoiceCount(); AudioRenderType GetAudioRenderType(); AudioFrameCount GetSuspendDelay(); protected: // //----------------------------------------------------------------------- // Protected data //----------------------------------------------------------------------- // AudioLevelOfDetail* GetAudioLevelOfDetail(); private: // //----------------------------------------------------------------------- // Private data //----------------------------------------------------------------------- // AudioLevelOfDetail *audioLevelOfDetail; TableOf audioLevelOfDetailSocket; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~ AudioResource inlines ~~~~~~~~~~~~~~~~~~~~~~~~~ inline AudioLevelOfDetail* AudioResource::GetAudioLevelOfDetail() { Check(this); return audioLevelOfDetail; } inline AudioVoiceCount AudioResource::GetVoiceCount() { Check(this); Check(audioLevelOfDetail); return audioLevelOfDetail->GetVoiceCount(); } inline AudioRenderType AudioResource::GetAudioRenderType() { Check(this); Check(audioLevelOfDetail); return audioLevelOfDetail->GetAudioRenderType(); } inline AudioFrameCount AudioResource::GetSuspendDelay() { Check(this); Check(audioLevelOfDetail); return audioLevelOfDetail->GetSuspendDelay(); } //########################################################################## //######################## AudioResourceIndex ######################## //########################################################################## class AudioResourceIndex: public Node { public: AudioResourceIndex(PlugStream *stream); ~AudioResourceIndex(); Logical TestInstance() const; static void BuildFromPage( PlugStream *stream, NameList *name_list, ClassID class_ID, ObjectID object_ID ); void AddAudioResource( AudioResource *audio_resource, Enumeration index ); AudioResource* GetAudioResource(Enumeration index); CollectionSize GetSize(); private: TableOf audioResourceSocket; };