Version
menu_open
link

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_

Was this page helpful?

Need Support?

Questions? Problems? Need more info? Contact us, and we can help!

Visit our Support page

Tell us about your project. We're here to help.

Register your project and we'll help you get started with no strings attached!

Get started with Wwise