12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895 |
- #ifndef _IAK_PLUGIN_H_
- #define _IAK_PLUGIN_H_
- #include <AK/SoundEngine/Common/AkCommonDefs.h>
- #include <AK/SoundEngine/Common/IAkRTPCSubscriber.h>
- #include <AK/SoundEngine/Common/IAkPluginMemAlloc.h>
- #include <AK/SoundEngine/Common/AkFPUtilities.h>
- #include <AK/SoundEngine/Common/AkAudioMarker.h>
- #include <AK/Tools/Common/AkLock.h>
- #include <AK/Tools/Common/AkPlatformFuncs.h>
- #include <AK/Tools/Common/AkMonitorError.h>
- #include <AK/Tools/Common/AkRng.h>
- #include <AK/SoundEngine/Common/AkSoundEngineExport.h>
- #include <AK/SoundEngine/Common/IAkProcessorFeatures.h>
- #include <AK/SoundEngine/Common/IAkPlatformContext.h>
- #include <AK/SoundEngine/Common/AkMidiTypes.h>
- #include <AK/SoundEngine/Common/AkMixerTypes.h>
- #include <AK/SoundEngine/Common/AkCallback.h>
- #include <AK/AkWwiseSDKVersion.h>
- #include <math.h>
- #if defined AK_CPU_X86 || defined AK_CPU_X86_64 || defined (AK_CPU_WASM)
- #include <xmmintrin.h>
- #endif
- struct AkPluginInfo
- {
-
- AkPluginInfo()
- : eType(AkPluginTypeNone)
- , uBuildVersion( 0 )
- , bIsInPlace(true)
- , bCanChangeRate(false)
- , bReserved(false)
- , bCanProcessObjects(false)
- , bIsDeviceEffect(false)
- , bCanRunOnObjectConfig(true)
- , bUsesGainAttribute(false)
- {}
- AkPluginType eType;
- AkUInt32 uBuildVersion;
- bool bIsInPlace;
- bool bCanChangeRate;
- bool bReserved;
- bool bCanProcessObjects;
- bool bIsDeviceEffect;
- bool bCanRunOnObjectConfig;
- bool bUsesGainAttribute;
- };
- namespace AK
- {
- class PluginRegistration;
- }
- extern "C" AK_DLLEXPORT AK::PluginRegistration * g_pAKPluginList;
- struct AkAcousticTexture;
- namespace AK
- {
- class IAkStreamMgr;
- class IAkGlobalPluginContext;
-
- class IAkGameObjectPluginInfo
- {
- protected:
-
- virtual ~IAkGameObjectPluginInfo(){}
- public:
-
- virtual AkGameObjectID GetGameObjectID() const = 0;
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AkUInt32 GetNumEmitterListenerPairs() const = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT GetEmitterListenerPair(
- AkUInt32 in_uIndex,
- AkEmitterListenerPair & out_emitterListenerPair
- ) const = 0;
-
-
-
-
-
-
- virtual AkUInt32 GetNumGameObjectPositions() const = 0;
-
-
-
-
-
-
-
-
- virtual AKRESULT GetGameObjectPosition(
- AkUInt32 in_uIndex,
- AkSoundPosition & out_position
- ) const = 0;
-
-
-
-
-
- virtual SoundEngine::MultiPositionType GetGameObjectMultiPositionType() const = 0;
-
-
-
- virtual AkReal32 GetGameObjectScaling() const = 0;
-
-
-
-
-
-
-
- virtual bool GetListeners(
- AkGameObjectID* out_aListenerIDs,
- AkUInt32& io_uSize
- ) const = 0;
-
-
-
-
-
-
- virtual AKRESULT GetListenerData(
- AkGameObjectID in_uListener,
- AkListener & out_listener
- ) const = 0;
-
-
-
-
-
-
-
-
-
- virtual AKRESULT GetDistanceProbe(
- AkGameObjectID in_uListener,
- AkWorldTransform& out_position
- ) const = 0;
- };
-
- class IAkVoicePluginInfo
- {
- protected:
-
- virtual ~IAkVoicePluginInfo(){}
- public:
-
- virtual AkPlayingID GetPlayingID() const = 0;
-
-
- virtual AkPriority GetPriority() const = 0;
-
-
- virtual AkPriority ComputePriorityWithDistance(
- AkReal32 in_fDistance
- ) const = 0;
- };
-
- class IAkPluginContextBase
- {
- protected:
-
- virtual ~IAkPluginContextBase(){}
- public:
-
-
- virtual IAkGlobalPluginContext* GlobalContext() const = 0;
-
-
- virtual IAkGameObjectPluginInfo * GetGameObjectInfo() = 0;
-
-
-
-
-
- virtual AKRESULT GetOutputID(
- AkUInt32 & out_uOutputID,
- AkPluginID & out_uDevicePlugin
- ) const = 0;
-
-
-
-
- virtual void GetPluginMedia(
- AkUInt32 in_dataIndex,
- AkUInt8* &out_rpData,
- AkUInt32 &out_rDataSize
- ) = 0;
-
-
-
-
- virtual void GetPluginCustomGameData(
- void* &out_rpData,
- AkUInt32 &out_rDataSize
- ) = 0;
-
-
-
-
-
-
-
-
-
- virtual AKRESULT PostMonitorData(
- void * in_pData,
- AkUInt32 in_uDataSize
- ) = 0;
-
-
-
- virtual bool CanPostMonitorData() = 0;
-
-
-
-
-
-
- virtual AKRESULT PostMonitorMessage(
- const char* in_pszError,
- AK::Monitor::ErrorLevel in_eErrorLevel
- ) = 0;
-
-
-
- virtual AkReal32 GetDownstreamGain() = 0;
-
-
-
-
-
- virtual AKRESULT GetParentChannelConfig(
- AkChannelConfig& out_channelConfig
- ) const = 0;
-
- virtual IAkProcessorFeatures * GetProcessorFeatures() = 0;
-
-
-
-
-
-
-
-
-
-
- virtual AkUniqueID GetAudioNodeID() const = 0;
-
-
-
-
-
- virtual AKRESULT GetSinkChannelConfig(
- AkChannelConfig& out_sinkConfig,
- Ak3DAudioSinkCapabilities& out_3dAudioCaps
- ) const = 0;
- };
-
-
-
- class IAkEffectPluginContext : public IAkPluginContextBase
- {
- protected:
-
- virtual ~IAkEffectPluginContext(){}
- public:
-
-
-
- virtual bool IsSendModeEffect() const = 0;
-
-
- virtual IAkVoicePluginInfo * GetVoiceInfo() = 0;
-
-
- virtual IAkMixerPluginContext* GetMixerCtx() = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT CreateOutputObjects(
- AkChannelConfig in_channelConfig,
- AkAudioObjects& io_objects
-
-
- ) = 0;
-
-
-
- virtual void GetOutputObjects(
- AkAudioObjects& io_objects
-
-
- ) = 0;
-
- };
-
-
-
- class IAkSourcePluginContext : public IAkPluginContextBase
- {
- protected:
-
- virtual ~IAkSourcePluginContext(){}
- public:
-
-
- virtual AkUInt16 GetNumLoops() const = 0;
-
-
- virtual IAkVoicePluginInfo * GetVoiceInfo() = 0;
-
-
-
- virtual AkMIDIEvent GetMidiEvent() const = 0;
-
-
- virtual void* GetCookie() const = 0;
- };
-
- class IAkMixerPluginContext : public IAkPluginContextBase
- {
- protected:
-
- virtual ~IAkMixerPluginContext(){}
- public:
-
-
-
-
-
- virtual AkUInt32 GetBusType() = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT GetSpeakerAngles(
- AkReal32 * io_pfSpeakerAngles,
- AkUInt32 & io_uNumAngles,
- AkReal32 & out_fHeightAngle
- ) = 0;
-
-
-
-
-
-
-
- virtual AKRESULT ComputeSpeakerVolumesDirect(
- AkChannelConfig in_inputConfig,
- AkChannelConfig in_outputConfig,
- AkReal32 in_fCenterPerc,
- AK::SpeakerVolumes::MatrixPtr out_mxVolumes
- ) = 0;
-
-
-
-
-
- virtual AKRESULT ComputeSpeakerVolumesPanner(
- AkSpeakerPanningType in_ePannerType,
- const AkVector & in_position,
- AkReal32 in_fCenterPct,
- AkChannelConfig in_inputConfig,
- AkChannelConfig in_outputConfig,
- AK::SpeakerVolumes::MatrixPtr out_mxVolumes
- ) = 0;
-
-
-
-
-
- virtual AKRESULT ComputePlanarVBAPGains(
- AkReal32 in_fAngle,
- AkChannelConfig in_outputConfig,
- AkReal32 in_fCenterPerc,
- AK::SpeakerVolumes::VectorPtr out_vVolumes
- ) = 0;
-
-
- virtual AKRESULT InitSphericalVBAP(
- AK::IAkPluginMemAlloc* in_pAllocator,
- const AkSphericalCoord* in_SphericalPositions,
- const AkUInt32 in_NbPoints,
- void *& out_pPannerData
- ) = 0;
-
-
-
- virtual AKRESULT ComputeSphericalVBAPGains(
- void* in_pPannerData,
- AkReal32 in_fAzimuth,
- AkReal32 in_fElevation,
- AkUInt32 in_uNumChannels,
- AK::SpeakerVolumes::VectorPtr out_vVolumes
- ) = 0;
-
-
- virtual AKRESULT TermSphericalVBAP(
- AK::IAkPluginMemAlloc* in_pAllocator,
- void* in_pPannerData
- ) = 0;
-
-
-
-
-
-
-
- virtual AKRESULT Compute3DPositioning(
- AkReal32 in_fAngle,
- AkReal32 in_fElevation,
- AkReal32 in_fSpread,
- AkReal32 in_fFocus,
- AkChannelConfig in_inputConfig,
- AkChannelMask in_uInputChanSel,
- AkChannelConfig in_outputConfig,
- AkReal32 in_fCenterPerc,
- AK::SpeakerVolumes::MatrixPtr out_mxVolumes
- ) = 0;
-
-
-
-
-
-
- virtual AKRESULT Compute3DPositioning(
- const AkWorldTransform & in_emitter,
- const AkWorldTransform & in_listener,
- AkReal32 in_fCenterPerc,
- AkReal32 in_fSpread,
- AkReal32 in_fFocus,
- AkChannelConfig in_inputConfig,
- AkChannelMask in_uInputChanSel,
- AkChannelConfig in_outputConfig,
- AK::SpeakerVolumes::MatrixPtr out_mxVolumes
- ) = 0;
-
-
-
-
-
-
-
-
- virtual AKRESULT ComputePositioning(
- const AkPositioningData& in_posData,
- AkChannelConfig in_inputConfig,
- AkChannelConfig in_outputConfig,
- AK::SpeakerVolumes::MatrixPtr out_mxVolumes
- ) = 0;
-
-
-
-
-
-
-
- virtual void EnableMetering( AkMeteringFlags in_eFlags ) = 0;
-
- };
-
-
-
-
-
- class IAkPluginParam : public IAkRTPCSubscriber
- {
- protected:
-
- virtual ~IAkPluginParam(){}
- public:
-
-
-
-
-
- virtual IAkPluginParam * Clone(
- IAkPluginMemAlloc * in_pAllocator
- ) = 0;
-
-
-
-
-
-
-
- virtual AKRESULT Init(
- IAkPluginMemAlloc * in_pAllocator,
- const void * in_pParamsBlock,
- AkUInt32 in_uBlockSize
- ) = 0;
-
-
-
-
-
- virtual AKRESULT Term(
- IAkPluginMemAlloc * in_pAllocator
- ) = 0;
-
-
-
-
- virtual AKRESULT SetParamsBlock(
- const void *in_pParamsBlock,
- AkUInt32 in_uBlockSize
- ) = 0;
-
-
-
-
-
- virtual AKRESULT SetParam(
- AkPluginParamID in_paramID,
- const void * in_pValue,
- AkUInt32 in_uParamSize
- ) = 0;
-
-
-
-
-
-
-
- static const AkPluginParamID ALL_PLUGIN_DATA_ID = 0x7FFF;
- };
-
-
-
- class IAkPlugin
- {
- protected:
-
- virtual ~IAkPlugin(){}
- public:
-
-
-
-
-
- virtual AKRESULT Term(
- IAkPluginMemAlloc * in_pAllocator
- ) = 0;
-
-
-
-
-
- virtual AKRESULT Reset() = 0;
-
-
-
-
-
-
- virtual AKRESULT GetPluginInfo(
- AkPluginInfo & out_rPluginInfo
- ) = 0;
-
-
-
-
-
-
-
- virtual bool SupportMediaRelocation() const
- {
- return false;
- }
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT RelocateMedia(
- AkUInt8* ,
- AkUInt8*
- )
- {
- return AK_NotImplemented;
- }
- };
-
- class IAkEffectPlugin : public IAkPlugin
- {
- protected:
-
- virtual ~IAkEffectPlugin(){}
- public:
-
-
-
-
- virtual AKRESULT Init(
- IAkPluginMemAlloc * in_pAllocator,
- IAkEffectPluginContext * in_pEffectPluginContext,
- IAkPluginParam * in_pParams,
- AkAudioFormat & io_rFormat
- ) = 0;
- };
-
- class IAkInPlaceEffectPlugin : public IAkEffectPlugin
- {
- public:
-
-
-
-
-
-
-
- virtual void Execute(
- AkAudioBuffer * io_pBuffer
- ) = 0;
-
-
-
- virtual AKRESULT TimeSkip(
- AkUInt32 in_uFrames
- ) = 0;
- };
-
- class IAkOutOfPlaceEffectPlugin : public IAkEffectPlugin
- {
- public:
-
-
-
-
-
-
- virtual void Execute(
- AkAudioBuffer * in_pBuffer,
- AkUInt32 in_uInOffset,
- AkAudioBuffer * out_pBuffer
- ) = 0;
-
-
-
- virtual AKRESULT TimeSkip(
- AkUInt32 &io_uFrames
- ) = 0;
- };
-
-
-
-
-
- class IAkInPlaceObjectPlugin : public IAkEffectPlugin
- {
- public:
-
-
-
-
-
-
- virtual void Execute(
- const AkAudioObjects& io_objects
- ) = 0;
- };
-
-
-
-
-
-
- class IAkOutOfPlaceObjectPlugin : public IAkEffectPlugin
- {
- public:
-
-
-
-
-
-
-
- virtual void Execute(
- const AkAudioObjects& in_objects,
- const AkAudioObjects& out_objects
- ) = 0;
- };
- class IAkAudioDeviceEffectPluginContext : public IAkPluginContextBase
- {
- public:
-
-
-
-
-
-
- virtual AKRESULT ComputePositioning(
- const AkPositioningData& in_posData,
- AkChannelConfig in_inputConfig,
- AkChannelConfig in_outputConfig,
- AK::SpeakerVolumes::MatrixPtr out_mxVolumes
- ) = 0;
- };
-
-
-
- class IAkAudioDeviceEffectPlugin : public IAkPlugin
- {
- protected:
-
- virtual ~IAkAudioDeviceEffectPlugin() {}
- public:
-
-
- virtual AKRESULT Init(
- IAkPluginMemAlloc* in_pAllocator,
- IAkAudioDeviceEffectPluginContext* in_pEffectPluginContext,
- IAkPluginParam* in_pParams,
- const AkAudioFormat& in_rFormat,
- const Ak3DAudioSinkCapabilities& in_3dCapabilities
- ) = 0;
- virtual void Execute(
- AkAudioBuffer* io_pMainMix,
- AkAudioBuffer* io_pPassthroughMix,
- const AkAudioObjects& io_objects,
- AkRamp& io_gain
- ) = 0;
- };
-
-
-
- class IAkSinkPluginContext : public IAkPluginContextBase
- {
- protected:
-
- virtual ~IAkSinkPluginContext(){}
- public:
-
-
-
-
-
- virtual bool IsPrimary() = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT SignalAudioThread() = 0;
-
-
- virtual AkUInt16 GetNumRefillsInVoice() = 0;
-
-
-
-
-
-
- virtual AKRESULT ComputePositioning(
- const AkPositioningData& in_posData,
- AkChannelConfig in_inputConfig,
- AkChannelConfig in_outputConfig,
- AK::SpeakerVolumes::MatrixPtr out_mxVolumes
- ) = 0;
-
-
- virtual AkPanningRule GetPanningRule() const = 0;
- };
- enum AkSinkPluginType
- {
- AkSinkPluginType_Sink,
- AkSinkPluginType_3DAudioSink
- };
-
-
-
-
-
- class IAkSinkPluginBase : public IAkPlugin
- {
- public:
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT Init(
- IAkPluginMemAlloc * in_pAllocator,
- IAkSinkPluginContext * in_pSinkPluginContext,
- IAkPluginParam * in_pParams,
- AkAudioFormat & io_rFormat
- ) = 0;
-
-
-
-
-
-
-
- virtual AKRESULT IsDataNeeded(
- AkUInt32& out_uNumFramesNeeded
- ) = 0;
-
-
-
- virtual void OnFrameEnd() = 0;
-
-
- virtual bool IsStarved() = 0;
-
- virtual void ResetStarved() = 0;
- virtual AkSinkPluginType GetSinkPluginType() const = 0;
- };
-
- class IAkSinkPlugin : public IAkSinkPluginBase
- {
- protected:
-
- virtual ~IAkSinkPlugin() {}
- public:
-
-
-
-
-
-
-
-
- virtual void Consume(
- AkAudioBuffer * in_pInputBuffer,
- AkRamp in_gain
- ) = 0;
- virtual AkSinkPluginType GetSinkPluginType() const override final { return AkSinkPluginType_Sink; }
- };
-
- class IAk3DAudioSinkPlugin : public IAkSinkPluginBase
- {
- protected:
-
- virtual ~IAk3DAudioSinkPlugin() {}
- public:
-
- virtual void Get3DAudioCapabilities(
- Ak3DAudioSinkCapabilities& out_rCapabilities
- ) = 0;
-
-
-
-
-
- virtual void Consume(
- AkAudioBuffer* in_pMainMix,
- AkAudioBuffer* in_pPassthroughMix,
- const AkAudioObjects& in_objects,
- AkRamp in_gain
- ) = 0;
- virtual AkSinkPluginType GetSinkPluginType() const override final { return AkSinkPluginType_3DAudioSink; }
- };
-
- class IAkSourcePlugin : public IAkPlugin
- {
- protected:
-
- virtual ~IAkSourcePlugin(){}
- public:
-
-
-
-
- virtual AKRESULT Init(
- IAkPluginMemAlloc * in_pAllocator,
- IAkSourcePluginContext * in_pSourcePluginContext,
- IAkPluginParam * in_pParams,
- AkAudioFormat & io_rFormat
- ) = 0;
-
-
-
-
- virtual AkReal32 GetDuration() const = 0;
-
-
-
-
-
-
-
- virtual AkReal32 GetEnvelope() const
- {
- return 1.f;
- }
-
-
-
-
-
-
-
-
-
- virtual AKRESULT StopLooping(){ return AK_Success; }
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT Seek(
- AkUInt32
- ) { return AK_Success; }
-
-
-
-
-
-
- virtual AKRESULT TimeSkip(
- AkUInt32 &
- ) { return AK_NotImplemented; }
-
-
-
-
-
- virtual void Execute(
- AkAudioBuffer * io_pBuffer
- ) = 0;
- };
-
- #define AK_FLOAT_TO_SAMPLETYPE( __in__ ) (__in__)
-
- #define AK_FLOAT_TO_SAMPLETYPE_NOCLIP( __in__ ) (__in__)
-
- #define AK_SAMPLETYPE_TO_FLOAT( __in__ ) (__in__)
- #define AK_DBTOLIN( __db__ ) (powf(10.f,(__db__) * 0.05f))
- }
- AK_CALLBACK( AK::IAkPlugin*, AkCreatePluginCallback )( AK::IAkPluginMemAlloc * in_pAllocator );
- AK_CALLBACK( AK::IAkPluginParam*, AkCreateParamCallback )( AK::IAkPluginMemAlloc * in_pAllocator );
- AK_CALLBACK( AKRESULT, AkGetDeviceListCallback)(
- AkUInt32& io_maxNumDevices,
- AkDeviceDescription* out_deviceDescriptions
- );
- struct AkPlatformInitSettings;
- struct AkInitSettings;
- namespace AK
- {
- enum AkPluginServiceType
- {
- PluginServiceType_Mixer = 0,
- PluginServiceType_RNG = 1,
- PluginServiceType_AudioObjectAttenuation = 2,
- PluginServiceType_AudioObjectPriority = 3,
- PluginServiceType_HashTable = 4,
- PluginServiceType_Markers = 5,
- PluginServiceType_MAX,
- };
-
- class IAkPluginService
- {
- protected:
- virtual ~IAkPluginService() {}
- };
-
-
-
- class IAkGlobalPluginContext
- {
- protected:
-
- virtual ~IAkGlobalPluginContext(){}
- public:
-
- virtual IAkStreamMgr * GetStreamMgr() const = 0;
-
-
-
- virtual AkUInt16 GetMaxBufferLength() const = 0;
-
-
- virtual bool IsRenderingOffline() const = 0;
-
-
- virtual AkUInt32 GetSampleRate() const = 0;
-
-
-
-
-
-
- virtual AKRESULT PostMonitorMessage(
- const char* in_pszError,
- AK::Monitor::ErrorLevel in_eErrorLevel
- ) = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT RegisterPlugin(
- AkPluginType in_eType,
- AkUInt32 in_ulCompanyID,
- AkUInt32 in_ulPluginID,
- AkCreatePluginCallback in_pCreateFunc,
- AkCreateParamCallback in_pCreateParamFunc
- ) = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT RegisterCodec(
- AkUInt32 in_ulCompanyID,
- AkUInt32 in_ulPluginID,
- AkCreateFileSourceCallback in_pFileCreateFunc,
- AkCreateBankSourceCallback in_pBankCreateFunc
- ) = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT RegisterGlobalCallback(
- AkPluginType in_eType,
- AkUInt32 in_ulCompanyID,
- AkUInt32 in_ulPluginID,
- AkGlobalCallbackFunc in_pCallback,
- AkUInt32 in_eLocation = AkGlobalCallbackLocation_BeginRender,
- void * in_pCookie = NULL
- ) = 0;
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT UnregisterGlobalCallback(
- AkGlobalCallbackFunc in_pCallback,
- AkUInt32 in_eLocation = AkGlobalCallbackLocation_BeginRender
- ) = 0;
-
- virtual AK::IAkPluginMemAlloc * GetAllocator() = 0;
-
- virtual AKRESULT SetRTPCValue(
- AkRtpcID in_rtpcID,
- AkRtpcValue in_value,
- AkGameObjectID in_gameObjectID = AK_INVALID_GAME_OBJECT,
- AkTimeMs in_uValueChangeDuration = 0,
- AkCurveInterpolation in_eFadeCurve = AkCurveInterpolation_Linear,
- bool in_bBypassInternalValueInterpolation = false
- ) = 0;
-
-
-
-
-
-
- virtual AKRESULT SendPluginCustomGameData(
- AkUniqueID in_busID,
- AkGameObjectID in_busObjectID,
- AkPluginType in_eType,
- AkUInt32 in_uCompanyID,
- AkUInt32 in_uPluginID,
- const void* in_pData,
- AkUInt32 in_uSizeInBytes
- ) = 0;
-
-
- virtual void ComputeAmbisonicsEncoding(
- AkReal32 in_fAzimuth,
- AkReal32 in_fElevation,
- AkChannelConfig in_cfgAmbisonics,
- AK::SpeakerVolumes::VectorPtr out_vVolumes
- ) = 0;
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT ComputeWeightedAmbisonicsDecodingFromSampledSphere(
- const AkVector in_samples[],
- AkUInt32 in_uNumSamples,
- AkChannelConfig in_cfgAmbisonics,
- AK::SpeakerVolumes::MatrixPtr out_mxVolume
- ) = 0;
-
-
- virtual const AkAcousticTexture* GetAcousticTexture(
- AkAcousticTextureID in_AcousticTextureID
- ) = 0;
-
-
- virtual AKRESULT ComputeSphericalCoordinates(
- const AkEmitterListenerPair & in_pair,
- AkReal32 & out_fAzimuth,
- AkReal32 & out_fElevation
- ) const = 0;
-
-
- virtual const AkPlatformInitSettings* GetPlatformInitSettings() const = 0;
-
-
-
- virtual const AkInitSettings* GetInitSettings() const = 0;
-
-
-
-
-
- virtual AKRESULT GetAudioSettings(
- AkAudioSettings & out_audioSettings
- ) const = 0;
-
-
-
-
- virtual AkUInt32 GetIDFromString(const char* in_pszString) const = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AkPlayingID PostEventSync(
- AkUniqueID in_eventID,
- AkGameObjectID in_gameObjectID,
- AkUInt32 in_uFlags = 0,
- AkCallbackFunc in_pfnCallback = NULL,
- void * in_pCookie = NULL,
- AkUInt32 in_cExternals = 0,
- AkExternalSourceInfo *in_pExternalSources = NULL,
- AkPlayingID in_PlayingID = AK_INVALID_PLAYING_ID
- ) = 0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AkPlayingID PostMIDIOnEventSync(
- AkUniqueID in_eventID,
- AkGameObjectID in_gameObjectID,
- AkMIDIPost* in_pPosts,
- AkUInt16 in_uNumPosts,
- bool in_bAbsoluteOffsets = false,
- AkUInt32 in_uFlags = 0,
- AkCallbackFunc in_pfnCallback = NULL,
- void * in_pCookie = NULL,
- AkPlayingID in_playingID = AK_INVALID_PLAYING_ID
- ) = 0;
-
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT StopMIDIOnEventSync(
- AkUniqueID in_eventID = AK_INVALID_UNIQUE_ID,
- AkGameObjectID in_gameObjectID = AK_INVALID_GAME_OBJECT,
- AkPlayingID in_playingID = AK_INVALID_PLAYING_ID
- ) = 0;
-
-
- virtual IAkPlatformContext * GetPlatformContext() const = 0;
-
-
-
- virtual IAkPluginService* GetPluginService(
- AkPluginServiceType in_pluginService
- ) const = 0;
-
-
-
- virtual AkUInt32 GetBufferTick() const = 0;
- };
-
- class IAkPluginServiceMixer : public IAkPluginService
- {
- protected:
- virtual ~IAkPluginServiceMixer() {}
- public:
-
- virtual void MixNinNChannels(
- AkAudioBuffer* in_pInputBuffer,
- AkAudioBuffer* in_pMixBuffer,
- AkReal32 in_fPrevGain,
- AkReal32 in_fNextGain,
- AK::SpeakerVolumes::ConstMatrixPtr in_mxPrevVolumes,
- AK::SpeakerVolumes::ConstMatrixPtr in_mxNextVolumes
- ) = 0;
-
- virtual void Mix1inNChannels(
- AkReal32* AK_RESTRICT in_pInChannel,
- AkAudioBuffer* in_pMixBuffer,
- AkReal32 in_fPrevGain,
- AkReal32 in_fNextGain,
- AK::SpeakerVolumes::ConstVectorPtr in_vPrevVolumes,
- AK::SpeakerVolumes::ConstVectorPtr in_vNextVolumes
- ) = 0;
-
- virtual void MixChannel(
- AkReal32* AK_RESTRICT in_pInBuffer,
- AkReal32* AK_RESTRICT in_pOutBuffer,
- AkReal32 in_fPrevGain,
- AkReal32 in_fNextGain,
- AkUInt16 in_uNumFrames
- ) = 0;
-
-
-
- virtual void ApplyGainAndInterleave(
- AkAudioBuffer* in_pInputBuffer,
- AkAudioBuffer* in_pOutputBuffer,
- AkRamp in_gain,
- bool in_convertToInt16
- ) const = 0;
-
-
-
- virtual void ApplyGain(
- AkAudioBuffer* in_pInputBuffer,
- AkAudioBuffer* in_pOutputBuffer,
- AkRamp in_gain,
- bool in_convertToInt16
- ) const = 0;
-
-
-
- virtual void ProcessBiquadFilter(
- AkAudioBuffer* in_pInputBuffer,
- AkAudioBuffer* io_pOutputBuffer,
- AK::AkBiquadCoefficients* in_pCoefs,
- AK::AkBiquadMemories* io_pMemories,
- AkUInt32 in_uNumSamples
- ) = 0;
-
-
-
-
- virtual void ProcessInterpBiquadFilter(
- AkReal32** in_ppInputData,
- AkReal32** io_ppOutputData,
- AK::AkBiquadCoefficients** in_ppCoefs,
- AK::AkBiquadMemories** io_ppMemories,
- AkUInt32* in_pNumSamplesPerInterpStage,
- AkUInt32 in_uNumInterpStages,
- AkUInt32 in_uNumChannels
- ) = 0;
-
-
-
-
- virtual void ProcessPairedBiquadFilter(
- AkAudioBuffer* in_pInputBuffer,
- AkAudioBuffer* io_pOutputBuffer,
- AK::AkBiquadCoefficients* in_pCoefs1,
- AK::AkBiquadMemories* io_pMemories1,
- AK::AkBiquadCoefficients* in_pCoefs2,
- AK::AkBiquadMemories* io_pMemories2,
- AkUInt32 in_uNumSamples
- ) = 0;
-
-
-
-
-
- virtual void ProcessPairedInterpBiquadFilter(
- AkReal32** in_ppInputData,
- AkReal32** io_ppOutputData,
- AK::AkBiquadCoefficients** in_ppCoefs1,
- AK::AkBiquadMemories** io_ppMemories1,
- AK::AkBiquadCoefficients** in_ppCoefs2,
- AK::AkBiquadMemories** io_ppMemories2,
- AkUInt32* in_pNumSamplesPerInterpStage,
- AkUInt32 in_uNumInterpStages,
- AkUInt32 in_uNumChannels
- ) = 0;
- };
-
-
-
-
-
- class IAkPluginServiceRNG : public IAkPluginService
- {
- protected:
- virtual ~IAkPluginServiceRNG() {}
- public:
-
-
- virtual AkUInt64 RandomSeed() const = 0;
-
- virtual CAkRng CreateRNG() const = 0;
- };
-
- class IAkPluginServiceAudioObjectAttenuation : public IAkPluginService
- {
- protected:
- virtual ~IAkPluginServiceAudioObjectAttenuation() {}
- public:
-
-
-
- virtual AkUniqueID GetAttenuationID(
- const AkAudioObject& in_object
- ) const = 0;
-
-
-
-
- virtual bool ExtractCurves(
- IAkPluginMemAlloc* in_pAllocator,
- const AkAudioObject & in_object,
- AkUInt32 in_curveTypesMask,
- void* out_curves[]
- ) const = 0;
-
- virtual void Delete(
- IAkPluginMemAlloc* in_pAllocator,
- void*& io_attenuationCurve
- ) = 0;
-
-
- virtual AkReal32 Evaluate(
- void*& io_attenuationCurve,
- AkReal32 x
- ) = 0;
-
- virtual void Linearize(void*& io_attenuationCurve) = 0;
-
- virtual const AkRTPCGraphPoint& GetPoint(
- const void* in_attenuationCurve,
- AkUInt32 i
- ) const = 0;
-
- virtual AkUInt32 GetNumPoints(
- const void* in_attenuationCurve
- ) const = 0;
- };
-
-
-
-
-
-
-
- class IAkPluginServiceAudioObjectPriority : public IAkPluginService
- {
- protected:
- virtual ~IAkPluginServiceAudioObjectPriority() {}
- public:
-
- virtual void GetPriorities(
- AkAudioObject** in_ppObjects,
- AkUInt32 in_uNumObjects,
- AkPriority* out_pPriorities
- ) = 0;
-
- virtual void SetPriorities(
- AkAudioObject** io_ppObjects,
- AkUInt32 in_uNumObjects,
- AkPriority* in_pPriorities
- ) = 0;
- };
-
- class IAkPluginServiceMarkers : public IAkPluginService
- {
- protected:
- virtual ~IAkPluginServiceMarkers() {}
- public:
- class IAkMarkerNotificationService
- {
- public:
-
-
-
-
-
-
-
-
-
-
-
- virtual AKRESULT SubmitMarkerNotifications(
- const AkAudioMarker* in_pMarkers,
- const AkUInt32* in_uOffsetsInBuffer,
- AkUInt32 in_uNumMarkers
- ) = 0;
- };
- virtual IAkMarkerNotificationService* CreateMarkerNotificationService(
- IAkSourcePluginContext* in_pSourcePluginContext
- ) = 0;
- virtual void TerminateMarkerNotificationService(
- IAkMarkerNotificationService* io_pMarkerNotificationService
- ) = 0;
- };
- #define AK_GET_PLUGIN_SERVICE_MIXER(plugin_ctx) static_cast<AK::IAkPluginServiceMixer*>(plugin_ctx->GetPluginService(AK::PluginServiceType_Mixer))
- #define AK_GET_PLUGIN_SERVICE_RNG(plugin_ctx) static_cast<AK::IAkPluginServiceRNG*>(plugin_ctx->GetPluginService(AK::PluginServiceType_RNG))
- #define AK_GET_PLUGIN_SERVICE_AUDIO_OBJECT_ATTENUATION(plugin_ctx) static_cast<AK::IAkPluginServiceAudioObjectAttenuation*>(plugin_ctx->GetPluginService(AK::PluginServiceType_AudioObjectAttenuation))
- #define AK_GET_PLUGIN_SERVICE_AUDIO_OBJECT_PRIORITY(plugin_ctx) static_cast<AK::IAkPluginServiceAudioObjectPriority*>(plugin_ctx->GetPluginService(AK::PluginServiceType_AudioObjectPriority))
- #define AK_GET_PLUGIN_SERVICE_MARKERS(plugin_ctx) static_cast<AK::IAkPluginServiceMarkers*>(plugin_ctx->GetPluginService(AK::PluginServiceType_Markers))
-
-
-
- class PluginRegistration
- {
- public:
- PluginRegistration(
- AkUInt32 ,
- AkUInt32
- )
- {
-
- }
- PluginRegistration(
- AkPluginType in_eType,
- AkUInt32 in_ulCompanyID,
- AkUInt32 in_ulPluginID,
- AkCreatePluginCallback in_pCreateFunc,
- AkCreateParamCallback in_pCreateParamFunc,
- AkGlobalCallbackFunc in_pRegisterCallback = NULL,
- void * in_pRegisterCallbackCookie = NULL
- )
- : pNext(g_pAKPluginList)
- , m_eType(in_eType)
- , m_ulCompanyID(in_ulCompanyID)
- , m_ulPluginID(in_ulPluginID)
- , m_pCreateFunc(in_pCreateFunc)
- , m_pCreateParamFunc(in_pCreateParamFunc)
- , m_pFileCreateFunc(NULL)
- , m_pBankCreateFunc(NULL)
- , m_pRegisterCallback(in_pRegisterCallback)
- , m_pRegisterCallbackCookie(in_pRegisterCallbackCookie)
- , m_pGetDeviceListFunc(NULL)
- , m_CodecDescriptor{ nullptr, nullptr, nullptr, nullptr }
- {
- g_pAKPluginList = this;
- }
- PluginRegistration(
- AkPluginType in_eType,
- AkUInt32 in_ulCompanyID,
- AkUInt32 in_ulPluginID,
- AkCreatePluginCallback in_pCreateFunc,
- AkCreateParamCallback in_pCreateParamFunc,
- AkGetDeviceListCallback in_pGetDeviceListFunc,
- AkGlobalCallbackFunc in_pRegisterCallback = NULL,
- void * in_pRegisterCallbackCookie = NULL
- )
- : pNext(g_pAKPluginList)
- , m_eType(in_eType)
- , m_ulCompanyID(in_ulCompanyID)
- , m_ulPluginID(in_ulPluginID)
- , m_pCreateFunc(in_pCreateFunc)
- , m_pCreateParamFunc(in_pCreateParamFunc)
- , m_pFileCreateFunc(NULL)
- , m_pBankCreateFunc(NULL)
- , m_pRegisterCallback(in_pRegisterCallback)
- , m_pRegisterCallbackCookie(in_pRegisterCallbackCookie)
- , m_pGetDeviceListFunc(in_pGetDeviceListFunc)
- , m_CodecDescriptor{ nullptr, nullptr, nullptr, nullptr }
- {
- g_pAKPluginList = this;
- }
- PluginRegistration(
- AkUInt32 in_ulCompanyID,
- AkUInt32 in_ulPluginID,
- AkCreateFileSourceCallback in_pCreateFile,
- AkCreateBankSourceCallback in_pCreateBank)
- : pNext(g_pAKPluginList)
- , m_eType(AkPluginTypeCodec)
- , m_ulCompanyID(in_ulCompanyID)
- , m_ulPluginID(in_ulPluginID)
- , m_pCreateFunc(NULL)
- , m_pCreateParamFunc(NULL)
- , m_pFileCreateFunc(in_pCreateFile)
- , m_pBankCreateFunc(in_pCreateBank)
- , m_pRegisterCallback(NULL)
- , m_pRegisterCallbackCookie(NULL)
- , m_pGetDeviceListFunc(NULL)
- , m_CodecDescriptor{ in_pCreateFile, in_pCreateBank, nullptr, nullptr }
- {
- g_pAKPluginList = this;
- }
- PluginRegistration(
- AkUInt32 in_ulCompanyID,
- AkUInt32 in_ulPluginID,
- const AkCodecDescriptor &in_Descriptor)
- : pNext(g_pAKPluginList)
- , m_eType(AkPluginTypeCodec)
- , m_ulCompanyID(in_ulCompanyID)
- , m_ulPluginID(in_ulPluginID)
- , m_pCreateFunc(NULL)
- , m_pCreateParamFunc(NULL)
- , m_pFileCreateFunc(in_Descriptor.pFileSrcCreateFunc)
- , m_pBankCreateFunc(in_Descriptor.pBankSrcCreateFunc)
- , m_pRegisterCallback(NULL)
- , m_pRegisterCallbackCookie(NULL)
- , m_pGetDeviceListFunc(NULL)
- , m_CodecDescriptor(in_Descriptor)
- {
- g_pAKPluginList = this;
- }
- PluginRegistration *pNext;
- AkPluginType m_eType;
- AkUInt32 m_ulCompanyID;
- AkUInt32 m_ulPluginID;
- AkCreatePluginCallback m_pCreateFunc;
- AkCreateParamCallback m_pCreateParamFunc;
- AkCreateFileSourceCallback m_pFileCreateFunc;
- AkCreateBankSourceCallback m_pBankCreateFunc;
- AkGlobalCallbackFunc m_pRegisterCallback;
- void * m_pRegisterCallbackCookie;
-
-
- AkGetDeviceListCallback m_pGetDeviceListFunc;
- AkCodecDescriptor m_CodecDescriptor;
- };
- }
- #define AK_IMPLEMENT_PLUGIN_FACTORY(_pluginName_, _plugintype_, _companyid_, _pluginid_) \
- AK::IAkPlugin* Create##_pluginName_(AK::IAkPluginMemAlloc * in_pAllocator); \
- AK::IAkPluginParam * Create##_pluginName_##Params(AK::IAkPluginMemAlloc * in_pAllocator); \
- AK_ATTR_USED AK::PluginRegistration _pluginName_##Registration(_plugintype_, _companyid_, _pluginid_, Create##_pluginName_, Create##_pluginName_##Params);
- #define AK_STATIC_LINK_PLUGIN(_pluginName_) \
- extern AK::PluginRegistration _pluginName_##Registration; \
- void *_pluginName_##_linkonceonly = (void*)&_pluginName_##Registration;
- #define DEFINE_PLUGIN_REGISTER_HOOK AK_DLLEXPORT AK::PluginRegistration * g_pAKPluginList = NULL;
- #define AK_GET_SINK_TYPE_FROM_DEVICE_KEY(_key) ((AkUInt32)(_key & 0xffffffff))
- #define AK_GET_DEVICE_ID_FROM_DEVICE_KEY(_key) ((AkUInt32)(_key >> 32))
- #endif
|