Version Wwise

include/AK/SoundEngine/Common/AkTypes.h

Go to the documentation of this file.
00001 
00002 //
00003 // Copyright (c) 2006 Audiokinetic Inc. / All Rights Reserved
00004 //
00006 
00007 // AkTypes.h
00008 
00011 
00012 #ifndef _AK_DATA_TYPES_H_
00013 #define _AK_DATA_TYPES_H_
00014 
00015 // Platform-specific section.
00016 //----------------------------------------------------------------------------------------------------
00017 #include <AK/AkPlatforms.h>
00018 
00019 
00020 //----------------------------------------------------------------------------------------------------
00021 
00022 #include <AK/SoundEngine/Common/AkSoundEngineExport.h>
00023 
00024 #ifndef NULL
00025     #ifdef __cplusplus
00026         #define NULL    0
00027     #else
00028         #define NULL    ((void *)0)
00029     #endif
00030 #endif
00031 
00032 typedef AkUInt32        AkUniqueID;                 
00033 typedef AkUInt32        AkStateID;                  
00034 typedef AkUInt32        AkStateGroupID;             
00035 typedef AkUInt32        AkPlayingID;                
00036 typedef AkInt32         AkTimeMs;                   
00037 typedef AkReal32        AkPitchValue;               
00038 typedef AkReal32        AkVolumeValue;              
00039 typedef AkUIntPtr       AkGameObjectID;             
00040 typedef AkReal32        AkLPFType;                  
00041 typedef AkInt32         AkMemPoolId;                
00042 typedef AkUInt32        AkPluginID;                 
00043 typedef AkUInt32        AkCodecID;                  
00044 typedef AkUInt32        AkAuxBusID;                 
00045 typedef AkInt16         AkPluginParamID;            
00046 typedef AkInt8          AkPriority;                 
00047 typedef AkUInt16        AkDataCompID;               
00048 typedef AkUInt16        AkDataTypeID;               
00049 typedef AkUInt8         AkDataInterleaveID;         
00050 typedef AkUInt32        AkSwitchGroupID;            
00051 typedef AkUInt32        AkSwitchStateID;            
00052 typedef AkUInt32        AkRtpcID;                   
00053 typedef AkReal32        AkRtpcValue;                
00054 typedef AkUInt32        AkBankID;                   
00055 typedef AkUInt32        AkFileID;                   
00056 typedef AkUInt32        AkDeviceID;                 
00057 typedef AkUInt32        AkTriggerID;                
00058 typedef AkUInt32        AkArgumentValueID;          
00059 typedef AkUInt32        AkChannelMask;              
00060 typedef AkUInt32        AkModulatorID;              
00061 
00062 // Constants.
00063 static const AkPluginID                 AK_INVALID_PLUGINID                 = (AkPluginID)-1;       
00064 static const AkGameObjectID             AK_INVALID_GAME_OBJECT              = (AkGameObjectID)-1;   
00065 static const AkUniqueID                 AK_INVALID_UNIQUE_ID                =  0;                   
00066 static const AkRtpcID                   AK_INVALID_RTPC_ID                  =  AK_INVALID_UNIQUE_ID;
00067 static const AkUInt32                   AK_INVALID_LISTENER_INDEX           = (AkUInt32)-1;         
00068 static const AkPlayingID                AK_INVALID_PLAYING_ID               =  AK_INVALID_UNIQUE_ID;
00069 static const AkUInt32                   AK_DEFAULT_SWITCH_STATE             =  0;                   
00070 static const AkMemPoolId                AK_INVALID_POOL_ID                  = -1;                   
00071 static const AkMemPoolId                AK_DEFAULT_POOL_ID                  = -1;                   
00072 static const AkAuxBusID                 AK_INVALID_AUX_ID                   =  AK_INVALID_UNIQUE_ID;
00073 static const AkFileID                   AK_INVALID_FILE_ID                  = (AkFileID)-1;         
00074 static const AkDeviceID                 AK_INVALID_DEVICE_ID                = (AkDeviceID)-1;       
00075 static const AkBankID                   AK_INVALID_BANK_ID                  =  AK_INVALID_UNIQUE_ID;
00076 static const AkArgumentValueID          AK_FALLBACK_ARGUMENTVALUE_ID        =  0;                   
00077 static const AkChannelMask              AK_INVALID_CHANNELMASK              =  0;                   
00078 static const AkUInt32                   AK_INVALID_OUTPUT_DEVICE_ID         =  AK_INVALID_UNIQUE_ID;
00079 
00080 // Priority.
00081 static const AkPriority                 AK_DEFAULT_PRIORITY                 =  50;                  
00082 static const AkPriority                 AK_MIN_PRIORITY                     =  0;                   
00083 static const AkPriority                 AK_MAX_PRIORITY                     =  100;                 
00084 
00085 // Default bank I/O settings.
00086 static const AkPriority                 AK_DEFAULT_BANK_IO_PRIORITY         = AK_DEFAULT_PRIORITY;  
00087 static const AkReal32                   AK_DEFAULT_BANK_THROUGHPUT          = 1*1024*1024/1000.f;   
00088 
00089 // Bank version
00090 static const AkUInt32                   AK_SOUNDBANK_VERSION =              113;                    
00091 
00092 // Legacy: define fixed maximum number of channels for platforms that don't support 7.1 (and above).
00093 #if defined(AK_71AUDIO)
00094 #define AK_STANDARD_MAX_NUM_CHANNELS            (8)                         ///< Platform supports at least 7.1
00095 #elif defined(AK_LFECENTER) && defined(AK_REARCHANNELS)
00096 #define AK_VOICE_MAX_NUM_CHANNELS               (6)                         ///< Platform supports up to 5.1 configuration.
00097 #define AK_STANDARD_MAX_NUM_CHANNELS            (AK_VOICE_MAX_NUM_CHANNELS) ///< Platform supports 5.1
00098 #elif defined(AK_REARCHANNELS)
00099     #ifdef AK_WII
00100         #define AK_VOICE_MAX_NUM_CHANNELS       (2)                         ///< Platform supports up to stereo configuration.
00101     #else
00102         #define AK_VOICE_MAX_NUM_CHANNELS       (4)                         ///< Platform supports up to 4.0 configuration.
00103     #endif
00104 #else 
00105 #define AK_VOICE_MAX_NUM_CHANNELS               (2)                         ///< Platform supports up to stereo configuration.
00106 #define AK_STANDARD_MAX_NUM_CHANNELS            (AK_VOICE_MAX_NUM_CHANNELS) ///< Platform supports stereo.
00107 #endif
00108 
00110 enum AKRESULT
00111 {
00112     AK_NotImplemented           = 0,    
00113     AK_Success                  = 1,    
00114     AK_Fail                     = 2,    
00115     AK_PartialSuccess           = 3,    
00116     AK_NotCompatible            = 4,    
00117     AK_AlreadyConnected         = 5,    
00118     AK_NameNotSet               = 6,    
00119     AK_InvalidFile              = 7,    
00120     AK_AudioFileHeaderTooLarge  = 8,    
00121     AK_MaxReached               = 9,    
00122     AK_InputsInUsed             = 10,   
00123     AK_OutputsInUsed            = 11,   
00124     AK_InvalidName              = 12,   
00125     AK_NameAlreadyInUse         = 13,   
00126     AK_InvalidID                = 14,   
00127     AK_IDNotFound               = 15,   
00128     AK_InvalidInstanceID        = 16,   
00129     AK_NoMoreData               = 17,   
00130     AK_NoSourceAvailable        = 18,   
00131     AK_StateGroupAlreadyExists  = 19,   
00132     AK_InvalidStateGroup        = 20,   
00133     AK_ChildAlreadyHasAParent   = 21,   
00134     AK_InvalidLanguage          = 22,   
00135     AK_CannotAddItseflAsAChild  = 23,   
00136     //AK_TransitionNotFound     = 24,   ///< The transition is not in the list.
00137     //AK_TransitionNotStartable = 25,   ///< Start allowed in the Running and Done states.
00138     //AK_TransitionNotRemovable = 26,   ///< Must not be in the Computing state.
00139     //AK_UsersListFull          = 27,   ///< No one can be added any more, could be AK_MaxReached.
00140     //AK_UserAlreadyInList      = 28,   ///< This user is already there.
00141     AK_UserNotInList            = 29,   
00142     AK_NoTransitionPoint        = 30,   
00143     AK_InvalidParameter         = 31,   
00144     AK_ParameterAdjusted        = 32,   
00145     AK_IsA3DSound               = 33,   
00146     AK_NotA3DSound              = 34,   
00147     AK_ElementAlreadyInList     = 35,   
00148     AK_PathNotFound             = 36,   
00149     AK_PathNoVertices           = 37,   
00150     AK_PathNotRunning           = 38,   
00151     AK_PathNotPaused            = 39,   
00152     AK_PathNodeAlreadyInList    = 40,   
00153     AK_PathNodeNotInList        = 41,   
00154     AK_VoiceNotFound            = 42,   
00155     AK_DataNeeded               = 43,   
00156     AK_NoDataNeeded             = 44,   
00157     AK_DataReady                = 45,   
00158     AK_NoDataReady              = 46,   
00159     AK_NoMoreSlotAvailable      = 47,   
00160     AK_SlotNotFound             = 48,   
00161     AK_ProcessingOnly           = 49,   
00162     AK_MemoryLeak               = 50,   
00163     AK_CorruptedBlockList       = 51,   
00164     AK_InsufficientMemory       = 52,   
00165     AK_Cancelled                = 53,   
00166     AK_UnknownBankID            = 54,   
00167     AK_IsProcessing             = 55,   
00168     AK_BankReadError            = 56,   
00169     AK_InvalidSwitchType        = 57,   
00170     AK_VoiceDone                = 58,   
00171     AK_UnknownEnvironment       = 59,   
00172     AK_EnvironmentInUse         = 60,   
00173     AK_UnknownObject            = 61,   
00174     AK_NoConversionNeeded       = 62,   
00175     AK_FormatNotReady           = 63,   
00176     AK_WrongBankVersion         = 64,   
00177     AK_DataReadyNoProcess       = 65,   
00178     AK_FileNotFound             = 66,   
00179     AK_DeviceNotReady           = 67,   
00180     AK_CouldNotCreateSecBuffer  = 68,   
00181     AK_BankAlreadyLoaded        = 69,   
00182     AK_RenderedFX               = 71,   
00183     AK_ProcessNeeded            = 72,   
00184     AK_ProcessDone              = 73,   
00185     AK_MemManagerNotInitialized = 74,   
00186     AK_StreamMgrNotInitialized  = 75,   
00187     AK_SSEInstructionsNotSupported = 76,
00188     AK_Busy                     = 77,   
00189     AK_UnsupportedChannelConfig = 78,   
00190     AK_PluginMediaNotAvailable  = 79,   
00191     AK_MustBeVirtualized        = 80,   
00192     AK_CommandTooLarge          = 81,   
00193     AK_RejectedByFilter         = 82,   
00194     AK_InvalidCustomPlatformName= 83,   
00195     AK_DLLCannotLoad            = 84,   
00196 };
00197 
00199 enum AkGroupType
00200 {
00201     // should stay set as Switch = 0 and State = 1
00202     AkGroupType_Switch  = 0, 
00203     AkGroupType_State   = 1  
00204 };
00205 
00212 struct AkExternalSourceInfo
00213 {
00214     AkUInt32 iExternalSrcCookie;    
00215     AkCodecID idCodec;              
00216     AkOSChar * szFile;              
00217     void* pInMemory;                
00218     AkUInt32 uiMemorySize;          
00219     AkFileID idFile;                
00220 
00222     AkExternalSourceInfo()
00223         : iExternalSrcCookie( 0 )
00224         , idCodec( 0 )
00225         , szFile( 0 )
00226         , pInMemory( 0 )
00227         , uiMemorySize( 0 )
00228         , idFile( 0 ) {}
00229 
00231     AkExternalSourceInfo( 
00232         void* in_pInMemory,             
00233         AkUInt32 in_uiMemorySize,       
00234         AkUInt32 in_iExternalSrcCookie, 
00235         AkCodecID in_idCodec            
00236         )
00237         : iExternalSrcCookie( in_iExternalSrcCookie )
00238         , idCodec( in_idCodec )
00239         , szFile( 0 )
00240         , pInMemory( in_pInMemory )
00241         , uiMemorySize( in_uiMemorySize )
00242         , idFile( 0 ) {}
00243 
00245     AkExternalSourceInfo( 
00246         AkOSChar * in_pszFileName,      
00247         AkUInt32 in_iExternalSrcCookie, 
00248         AkCodecID in_idCodec            
00249         )
00250         : iExternalSrcCookie( in_iExternalSrcCookie )
00251         , idCodec( in_idCodec )
00252         , szFile( in_pszFileName )
00253         , pInMemory( 0 )
00254         , uiMemorySize( 0 )
00255         , idFile( 0 ) {}
00256 
00258     AkExternalSourceInfo( 
00259         AkFileID in_idFile,             
00260         AkUInt32 in_iExternalSrcCookie, 
00261         AkCodecID in_idCodec            
00262         )
00263         : iExternalSrcCookie( in_iExternalSrcCookie )
00264         , idCodec( in_idCodec )
00265         , szFile( 0 )
00266         , pInMemory( 0 )
00267         , uiMemorySize( 0 )
00268         , idFile( in_idFile ) {}
00269 };
00270 
00272 enum AkConnectionType
00273 {
00274     ConnectionType_Direct = 0x0,            
00275     ConnectionType_GameDefSend = 0x1,       
00276     ConnectionType_UserDefSend = 0x2,       
00277     ConnectionType_CrossDeviceSend = 0x4    
00278 };
00279 
00281 struct AkVector
00282 {
00283     AkReal32        X;  
00284     AkReal32        Y;  
00285     AkReal32        Z;  
00286 };
00287 
00289 struct AkSoundPosition
00290 {
00291     AkVector        Position;       
00292     AkVector        Orientation;    
00293 };
00294 
00296 struct AkListenerPosition
00297 {
00298     AkVector        OrientationFront;   
00299     AkVector        OrientationTop;     
00300     AkVector        Position;           
00301 };
00302 
00304 struct AkPolarCoord
00305 {
00306     AkReal32        r;              
00307     AkReal32        theta;          
00308 };
00309 
00311 struct AkSphericalCoord : public AkPolarCoord
00312 {
00313     AkReal32        phi;            
00314 };
00315 
00319 class AkEmitterListenerPair : public AkSphericalCoord
00320 {
00321 public:
00323     AkEmitterListenerPair() 
00324         : fEmitterAngle( 0.f )
00325         , fDryMixGain( 1.f )
00326         , fGameDefAuxMixGain( 1.f )
00327         , fUserDefAuxMixGain( 1.f )
00328         , m_uListenerMask( 0 )
00329     {
00330         r = 0;
00331         theta = 0;
00332         phi = 0;
00333     }
00335     ~AkEmitterListenerPair() {}
00336 
00338     inline AkReal32 Distance() const { return r; }
00339 
00341     inline AkReal32 Azimuth() const { return theta; }
00342 
00344     inline AkReal32 Elevation() const { return phi; }
00345 
00348     inline AkReal32 EmitterAngle() const { return fEmitterAngle; }
00349 
00351     inline AkReal32 GetGainForConnectionType(AkConnectionType in_eType) const 
00352     {
00353         AkConnectionType eType = (AkConnectionType)(in_eType & ~ConnectionType_CrossDeviceSend);
00354         if (eType == ConnectionType_Direct)
00355             return fDryMixGain;
00356         else if (eType == ConnectionType_GameDefSend)
00357             return fGameDefAuxMixGain;
00358         else
00359             return fUserDefAuxMixGain;
00360     }
00361 
00363     inline AkUInt32 ListenerMask() const { return m_uListenerMask; }
00364     
00365     // Get listener index of first listener assigned to this emitter-listener pair. 
00367     inline AkUInt8 ListenerIdx() const 
00368     { 
00369         AkUInt8 uListenerIdx = 0;
00370         AkUInt8 uListenerMask = m_uListenerMask;
00371         while ( !( uListenerMask & 0x01 ) )
00372         {
00373             uListenerMask >>= 1;
00374             ++uListenerIdx;
00375         }
00376         return uListenerIdx; 
00377     }
00378 
00379     AkReal32 fEmitterAngle;     
00380     AkReal32 fDryMixGain;       
00381     AkReal32 fGameDefAuxMixGain;
00382     AkReal32 fUserDefAuxMixGain;
00383 protected:
00384     AkUInt8 m_uListenerMask;    
00385 };
00386 
00388 struct AkListener
00389 {
00390     AkListener()
00391         : fScalingFactor( 1.0f )
00392         , bSpatialized( true )
00393     {}
00394     AkListenerPosition  position;       
00395     AkReal32            fScalingFactor; 
00396     bool                bSpatialized;   
00397 };
00398 
00400 enum AkCurveInterpolation
00401 {
00402 //DONT GO BEYOND 15! (see below for details)
00403 //Curves from 0 to LastFadeCurve NEED TO BE A MIRROR IMAGE AROUND LINEAR (eg. Log3 is the inverse of Exp3)
00404     AkCurveInterpolation_Log3           = 0, 
00405     AkCurveInterpolation_Sine           = 1, 
00406     AkCurveInterpolation_Log1           = 2, 
00407     AkCurveInterpolation_InvSCurve      = 3, 
00408     AkCurveInterpolation_Linear         = 4, 
00409     AkCurveInterpolation_SCurve         = 5, 
00410     AkCurveInterpolation_Exp1           = 6, 
00411     AkCurveInterpolation_SineRecip      = 7, 
00412     AkCurveInterpolation_Exp3           = 8, 
00413     AkCurveInterpolation_LastFadeCurve  = 8, 
00414     AkCurveInterpolation_Constant       = 9  
00415 //DONT GO BEYOND 15! The value is stored on 5 bits,
00416 //but we can use only 4 bits for the actual values, keeping
00417 //the 5th bit at 0 to void problems when the value is
00418 //expanded to 32 bits.
00419 };
00420 #define AKCURVEINTERPOLATION_NUM_STORAGE_BIT 5 ///< Internal storage restriction, for internal use only.
00421 
00422 #ifndef AK_MAX_AUX_PER_OBJ
00423     #define AK_MAX_AUX_PER_OBJ          (4) ///< Maximum number of environments in which a single game object may be located at a given time.
00424 
00425     // This define is there to Limit the number of Aux per sound that can be processed.
00426     // This value must be >= AK_MAX_AUX_PER_OBJ and >= AK_NUM_AUX_SEND_PER_OBJ (4)
00427     #define AK_MAX_AUX_SUPPORTED                    (AK_MAX_AUX_PER_OBJ + 4)
00428 #else
00429     // This define is there to Limit the number of Aux per sound that can be processed.
00430     // This value must be >= AK_MAX_AUX_PER_OBJ and >= AK_MAX_AUX_PER_NODE
00431     #define AK_MAX_AUX_SUPPORTED                    AK_MAX_AUX_PER_OBJ
00432 
00433 #endif
00434 
00435 #define AK_NUM_LISTENERS                        (8) ///< Number of listeners that can be used.
00436 #define AK_LISTENERS_MASK_ALL                   (0xFFFFFFFF)    ///< All listeners.
00437 
00439 struct AkAuxSendValue
00440 {
00441     AkAuxBusID auxBusID;    
00442     AkReal32 fControlValue; 
00443 };
00444 
00446 struct AkRamp
00447 {
00448     AkRamp() : fPrev( 1.f ), fNext( 1.f ) {}
00449     AkRamp( AkReal32 in_fPrev, AkReal32 in_fNext ) : fPrev( in_fPrev ), fNext( in_fNext ) {}
00450     AkRamp & operator*=(const AkRamp& in_rRhs) { fPrev *= in_rRhs.fPrev; fNext *= in_rRhs.fNext; return *this; }
00451 
00452     AkReal32 fPrev;
00453     AkReal32 fNext; 
00454 };
00455 inline AkRamp operator*(const AkRamp& in_rLhs, const AkRamp& in_rRhs) 
00456 {
00457     AkRamp result(in_rLhs);
00458     result *= in_rRhs;
00459     return result;
00460 }
00461 
00462 #ifndef AK_MEMPOOLATTRIBUTES
00463 
00472     enum AkMemPoolAttributes
00473     {
00474         AkNoAlloc       = 0,    
00475         AkMalloc        = 1,    
00476         AkAllocMask     = AkNoAlloc | AkMalloc,                     
00477 
00478         AkFixedSizeBlocksMode   = 1<<3,         
00479         AkBlockMgmtMask = AkFixedSizeBlocksMode 
00480     };
00481     #define AK_MEMPOOLATTRIBUTES
00482 
00483 #endif
00484 
00485 namespace AK
00486 {   
00494     AK_EXTERNFUNC( void *, AllocHook )( 
00495         size_t in_size          
00496         );
00497 
00504     AK_EXTERNFUNC( void, FreeHook )( 
00505         void * in_pMemAddress   
00506         );
00507 }
00508 
00509 // ---------------------------------------------------------------
00510 // Languages
00511 // ---------------------------------------------------------------
00512 #define AK_MAX_LANGUAGE_NAME_SIZE   (32)
00513 
00514 // ---------------------------------------------------------------
00515 // File Type ID Definitions
00516 // ---------------------------------------------------------------
00517 
00518 // These correspond to IDs specified in the conversion plug-ins' XML
00519 // files. Audio sources persist them to "remember" their format.
00520 // DO NOT CHANGE THEM without talking to someone in charge of persistence!
00521 
00522 // Vendor ID.
00523 #define AKCOMPANYID_AUDIOKINETIC        (0)     ///< Audiokinetic inc.
00524 #define AKCOMPANYID_AUDIOKINETIC_EXTERNAL (1)   ///< Audiokinetic inc.
00525 #define AKCOMPANYID_MCDSP               (256)   ///< McDSP
00526 #define AKCOMPANYID_WAVEARTS            (257)   ///< WaveArts
00527 #define AKCOMPANYID_PHONETICARTS        (258)   ///< Phonetic Arts
00528 #define AKCOMPANYID_IZOTOPE             (259)   ///< iZotope
00529 #define AKCOMPANYID_GENAUDIO            (260)   ///< GenAudio
00530 #define AKCOMPANYID_CRANKCASEAUDIO      (261)   ///< Crankcase Audio
00531 #define AKCOMPANYID_IOSONO              (262)   ///< IOSONO
00532 #define AKCOMPANYID_AUROTECHNOLOGIES    (263)   ///< Auro Technologies
00533 #define AKCOMPANYID_DOLBY               (264)   ///< Dolby
00534 
00535 // File/encoding types of Audiokinetic.
00536 #define AKCODECID_BANK                  (0)     ///< Bank encoding
00537 #define AKCODECID_PCM                   (1)     ///< PCM encoding
00538 #define AKCODECID_ADPCM                 (2)     ///< ADPCM encoding
00539 #define AKCODECID_XMA                   (3)     ///< XMA encoding
00540 #define AKCODECID_VORBIS                (4)     ///< Vorbis encoding
00541 #define AKCODECID_WIIADPCM              (5)     ///< ADPCM encoding on the Wii
00542 #define AKCODECID_PCMEX                 (7)     ///< Standard PCM WAV file parser for Wwise Authoring
00543 #define AKCODECID_EXTERNAL_SOURCE       (8)     ///< External Source (unknown encoding)
00544 #define AKCODECID_XWMA                  (9)     ///< xWMA encoding
00545 #define AKCODECID_AAC                   (10)    ///< AAC encoding (only available on Apple devices) -- see AkAACFactory.h
00546 #define AKCODECID_FILE_PACKAGE          (11)    ///< File package files generated by the File Packager utility.
00547 #define AKCODECID_ATRAC9                (12)    ///< ATRAC-9 encoding
00548 #define AKCODECID_VAG                   (13)    ///< VAG/HE-VAG encoding
00549 #define AKCODECID_PROFILERCAPTURE       (14)    ///< Profiler capture file (.prof) as written through AK::SoundEngine::StartProfilerCapture
00550 #define AKCODECID_ANALYSISFILE          (15)    ///< Analysis file
00551 #define AKCODECID_MIDI                  (16)    ///< MIDI file
00552 
00553 //The following are internally defined
00554 #define AK_WAVE_FORMAT_VAG              0xFFFB
00555 #define AK_WAVE_FORMAT_AT9              0xFFFC
00556 #define AK_WAVE_FORMAT_VORBIS           0xFFFF
00557 #define AK_WAVE_FORMAT_AAC              0xAAC0
00558 
00559 class IAkSoftwareCodec;
00561 AK_CALLBACK( IAkSoftwareCodec*, AkCreateFileSourceCallback )( void* in_pCtx );
00563 AK_CALLBACK( IAkSoftwareCodec*, AkCreateBankSourceCallback )( void* in_pCtx );
00564 
00565 //-----------------------------------------------------------------------------
00566 // Positioning
00567 //-----------------------------------------------------------------------------
00568 
00569 namespace AK
00570 {
00571     namespace SoundEngine
00572     {
00577         enum MultiPositionType
00578         {
00579             MultiPositionType_SingleSource,     
00580             MultiPositionType_MultiSources,     
00581             MultiPositionType_MultiDirections   
00582         };
00583     }
00584 }
00585 
00587 #define PANNER_NUM_STORAGE_BITS 2
00588 enum AkPannerType
00589 {
00590     Ak2D        = 0,    
00591     Ak3D        = 1     
00592 };
00593 
00594 #define POSSOURCE_NUM_STORAGE_BITS 2
00595 enum AkPositionSourceType
00596 {
00597     AkUserDef           = 0,    
00598     AkGameDef           = 1     
00599 };
00600 
00602 enum AkPanningRule
00603 {
00604     AkPanningRule_Speakers      = 0,    
00605     AkPanningRule_Headphones    = 1     
00606 };
00607 
00609 enum AkBusType
00610 {
00611     AkBusType_Master            = 0x01, 
00612     AkBusType_Primary           = 0x02  
00613 };
00614 
00615 #define AK_MAX_BITS_METERING_FLAGS  (5) // Keep in sync with AkMeteringFlags.
00616 
00618 enum AkMeteringFlags
00619 {
00620     AK_NoMetering               = 0,            
00621     AK_EnableBusMeter_Peak      = 1 << 0,       
00622     AK_EnableBusMeter_TruePeak  = 1 << 1,       
00623     AK_EnableBusMeter_RMS       = 1 << 2,       
00624     // 1 << 3 is reserved.
00625     AK_EnableBusMeter_KPower    = 1 << 4        
00626 };
00627 
00629 // Wwise ID system
00631 enum AkNodeType
00632 {
00633     AkNodeType_Default,
00634     AkNodeType_Bus
00635 };
00636 
00637 struct WwiseObjectIDext
00638 {
00639 public:
00640 
00641     bool operator == ( const WwiseObjectIDext& in_rOther ) const
00642     {
00643         return in_rOther.id == id && in_rOther.bIsBus == bIsBus;
00644     }
00645 
00646     AkNodeType GetType()
00647     {
00648         return bIsBus ? AkNodeType_Bus : AkNodeType_Default;
00649     }
00650 
00651     AkUniqueID  id;
00652     bool        bIsBus;
00653 };
00654 
00655 struct WwiseObjectID : public WwiseObjectIDext
00656 {
00657     WwiseObjectID()
00658     {
00659         id = AK_INVALID_UNIQUE_ID;
00660         bIsBus = false;
00661     }
00662 
00663     WwiseObjectID( AkUniqueID in_ID )
00664     {
00665         id = in_ID;
00666         bIsBus = false;
00667     }
00668 
00669     WwiseObjectID( AkUniqueID in_ID, bool in_bIsBus )
00670     {
00671         id = in_ID;
00672         bIsBus = in_bIsBus;
00673     }
00674 
00675     WwiseObjectID( AkUniqueID in_ID, AkNodeType in_eNodeType )
00676     {
00677         id = in_ID;
00678         bIsBus = in_eNodeType == AkNodeType_Bus;
00679     }
00680 };
00681 
00682 #ifndef __SPU__
00683 
00684 namespace AkFileParser
00685 {
00686 #pragma pack(push, 1)
00687 
00688     struct EnvelopePoint
00689     {
00690         AkUInt32 uPosition;     
00691         AkUInt16 uAttenuation;  
00692     };
00693 #pragma pack(pop)
00694 }
00695 #endif // !__SPU__
00696 
00697 #ifndef AK_OS_STRUCT_ALIGN
00698 #define AK_OS_STRUCT_ALIGN  4               ///< OS Structures need to be aligned at 4 bytes.
00699 #endif
00700 
00701 #ifndef AK_UNALIGNED
00702 #define AK_UNALIGNED                        ///< Refers to the __unaligned compilation flag available on some platforms. Note that so far, on the tested platform this should always be placed before the pointer symbol *.
00703 #endif
00704 
00705 #ifndef AK_ASYNC_OPEN_DEFAULT
00706 #define AK_ASYNC_OPEN_DEFAULT   (false)             ///< Refers to asynchronous file opening in default low-level IO.
00707 #endif
00708 
00709 #ifndef AK_COMM_DEFAULT_DISCOVERY_PORT
00710 #define AK_COMM_DEFAULT_DISCOVERY_PORT 24024    ///< Default discovery port for most platforms using IP sockets for communication.
00711 #endif
00712 
00713 #ifndef AK_CAPTURE_TYPE_FLOAT
00714 typedef AkInt16     AkCaptureType;          
00715 #endif
00716 
00717 #if defined(AK_CPU_X86_64) || defined(AK_CPU_ARM_64)
00718     #define AK_POINTER_64
00719 #endif // #if defined(AK_CPU_X86_64) || defined(AK_CPU_ARM_64)
00720 
00721 #if !defined(AkRegister)
00722     #define AkRegister register
00723 #endif
00724 
00725 #endif  //_AK_DATA_TYPES_H_