WwiseProjectDatabase.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212
  1. /*******************************************************************************
  2. The content of this file includes portions of the proprietary AUDIOKINETIC Wwise
  3. Technology released in source code form as part of the game integration package.
  4. The content of this file may not be used without valid licenses to the
  5. AUDIOKINETIC Wwise Technology.
  6. Note that the use of the game engine is subject to the Unreal(R) Engine End User
  7. License Agreement at https://www.unrealengine.com/en-US/eula/unreal
  8. License Usage
  9. Licensees holding valid licenses to the AUDIOKINETIC Wwise Technology may use
  10. this file in accordance with the end user license agreement provided with the
  11. software or, alternatively, in accordance with the terms contained
  12. in a written agreement between you and Audiokinetic Inc.
  13. Copyright (c) 2023 Audiokinetic Inc.
  14. *******************************************************************************/
  15. #pragma once
  16. #include "Wwise/WwiseDataStructure.h"
  17. #include "Wwise/WwiseResourceLoader.h"
  18. #include "Wwise/WwiseProjectDatabaseModule.h"
  19. #include "Misc/CommandLine.h"
  20. class FWwiseResourceLoader;
  21. class FWwiseProjectDatabase;
  22. using FSharedWwiseDataStructure = TSharedRef<FWwiseDataStructure, ESPMode::ThreadSafe>;
  23. class WWISEPROJECTDATABASE_API FWwiseDataStructureScopeLock : public FRWScopeLock
  24. {
  25. public:
  26. FWwiseDataStructureScopeLock(const FWwiseProjectDatabase& InProjectDatabase);
  27. const FWwiseDataStructure& operator*() const
  28. {
  29. return DataStructure;
  30. }
  31. const FWwiseDataStructure* operator->() const
  32. {
  33. return &DataStructure;
  34. }
  35. const WwiseAcousticTextureGlobalIdsMap& GetAcousticTextures() const;
  36. FWwiseRefAcousticTexture GetAcousticTexture(const FWwiseObjectInfo& InInfo) const;
  37. const WwiseAudioDeviceGlobalIdsMap& GetAudioDevices() const;
  38. FWwiseRefAudioDevice GetAudioDevice(const FWwiseObjectInfo& InInfo) const;
  39. const WwiseAuxBusGlobalIdsMap& GetAuxBusses() const;
  40. FWwiseRefAuxBus GetAuxBus(const FWwiseObjectInfo& InInfo) const;
  41. const WwiseBusGlobalIdsMap& GetBusses() const;
  42. FWwiseRefBus GetBus(const FWwiseObjectInfo& InInfo) const;
  43. const WwiseCustomPluginGlobalIdsMap& GetCustomPlugins() const;
  44. FWwiseRefCustomPlugin GetCustomPlugin(const FWwiseObjectInfo& InInfo) const;
  45. const WwiseDialogueArgumentGlobalIdsMap& GetDialogueArguments() const;
  46. FWwiseRefDialogueArgument GetDialogueArgument(const FWwiseObjectInfo& InInfo) const;
  47. const WwiseDialogueEventGlobalIdsMap& GetDialogueEvents() const;
  48. FWwiseRefDialogueEvent GetDialogueEvent(const FWwiseObjectInfo& InInfo) const;
  49. const WwiseEventGlobalIdsMap& GetEvents() const;
  50. TSet<FWwiseRefEvent> GetEvent(const FWwiseEventInfo& InInfo) const;
  51. const WwiseExternalSourceGlobalIdsMap& GetExternalSources() const;
  52. FWwiseRefExternalSource GetExternalSource(const FWwiseObjectInfo& InInfo) const;
  53. const WwiseGameParameterGlobalIdsMap& GetGameParameters() const;
  54. FWwiseRefGameParameter GetGameParameter(const FWwiseObjectInfo& InInfo) const;
  55. const WwiseMediaGlobalIdsMap& GetMediaFiles() const;
  56. FWwiseRefMedia GetMediaFile(const FWwiseObjectInfo& InInfo) const;
  57. const WwisePluginLibGlobalIdsMap& GetPluginLibs() const;
  58. FWwiseRefPluginLib GetPluginLib(const FWwiseObjectInfo& InInfo) const;
  59. const WwisePluginShareSetGlobalIdsMap& GetPluginShareSets() const;
  60. FWwiseRefPluginShareSet GetPluginShareSet(const FWwiseObjectInfo& InInfo) const;
  61. const WwiseSoundBankGlobalIdsMap& GetSoundBanks() const;
  62. FWwiseRefSoundBank GetSoundBank(const FWwiseObjectInfo& InInfo) const;
  63. const WwiseStateGlobalIdsMap& GetStates() const;
  64. FWwiseRefState GetState(const FWwiseGroupValueInfo& InInfo) const;
  65. const WwiseStateGroupGlobalIdsMap& GetStateGroups() const;
  66. FWwiseRefStateGroup GetStateGroup(const FWwiseObjectInfo& InInfo) const;
  67. const WwiseSwitchGlobalIdsMap& GetSwitches() const;
  68. FWwiseRefSwitch GetSwitch(const FWwiseGroupValueInfo& InInfo) const;
  69. const WwiseSwitchGroupGlobalIdsMap& GetSwitchGroups() const;
  70. FWwiseRefSwitchGroup GetSwitchGroup(const FWwiseObjectInfo& InInfo) const;
  71. const WwiseTriggerGlobalIdsMap& GetTriggers() const;
  72. FWwiseRefTrigger GetTrigger(const FWwiseObjectInfo& InInfo) const;
  73. const TSet<FWwiseSharedLanguageId>& GetLanguages() const;
  74. const TSet<FWwiseSharedPlatformId>& GetPlatforms() const;
  75. FWwiseRefPlatform GetPlatform(const FWwiseSharedPlatformId& InPlatformId) const;
  76. const FWwisePlatformDataStructure* GetCurrentPlatformData() const;
  77. const FWwiseSharedLanguageId& GetCurrentLanguage() const { return CurrentLanguage; }
  78. const FWwiseSharedPlatformId& GetCurrentPlatform() const { return CurrentPlatform; }
  79. bool DisableDefaultPlatforms() const { return bDisableDefaultPlatforms; }
  80. private:
  81. const FWwiseDataStructure& DataStructure;
  82. FWwiseSharedLanguageId CurrentLanguage;
  83. FWwiseSharedPlatformId CurrentPlatform;
  84. bool bDisableDefaultPlatforms;
  85. UE_NONCOPYABLE(FWwiseDataStructureScopeLock);
  86. };
  87. class WWISEPROJECTDATABASE_API FWwiseDataStructureWriteScopeLock : public FRWScopeLock
  88. {
  89. public:
  90. FWwiseDataStructureWriteScopeLock(FWwiseProjectDatabase& InProjectDatabase);
  91. FWwiseDataStructure& operator*()
  92. {
  93. return DataStructure;
  94. }
  95. FWwiseDataStructure* operator->()
  96. {
  97. return &DataStructure;
  98. }
  99. private:
  100. FWwiseDataStructure& DataStructure;
  101. UE_NONCOPYABLE(FWwiseDataStructureWriteScopeLock);
  102. };
  103. class WWISEPROJECTDATABASE_API FWwiseProjectDatabase
  104. {
  105. friend class FWwiseDataStructureScopeLock;
  106. friend class FWwiseDataStructureWriteScopeLock;
  107. public:
  108. static const FGuid BasePlatformGuid;
  109. inline static FWwiseProjectDatabase* Get()
  110. {
  111. if (auto* Module = IWwiseProjectDatabaseModule::GetModule())
  112. {
  113. if(Module->CanHaveDefaultInstance())
  114. {
  115. return Module->GetProjectDatabase();
  116. }
  117. }
  118. return nullptr;
  119. }
  120. static FWwiseProjectDatabase* Instantiate()
  121. {
  122. if (auto* Module = IWwiseProjectDatabaseModule::GetModule())
  123. {
  124. return Module->InstantiateProjectDatabase();
  125. }
  126. return nullptr;
  127. }
  128. FWwiseProjectDatabase() {}
  129. virtual ~FWwiseProjectDatabase() {}
  130. virtual void UpdateDataStructure(
  131. const FDirectoryPath* InUpdateGeneratedSoundBanksPath = nullptr,
  132. const FGuid* InBasePlatformGuid = &BasePlatformGuid) {}
  133. virtual void PrepareProjectDatabaseForPlatform(FWwiseResourceLoader*&& InResourceLoader) {}
  134. virtual FWwiseResourceLoader* GetResourceLoader() { return nullptr; }
  135. virtual const FWwiseResourceLoader* GetResourceLoader() const { return nullptr; }
  136. FWwiseSharedLanguageId GetCurrentLanguage() const;
  137. FWwiseSharedPlatformId GetCurrentPlatform() const;
  138. virtual bool IsProjectDatabaseParsed() const {return bIsDatabaseParsed;};
  139. protected:
  140. virtual FSharedWwiseDataStructure& GetLockedDataStructure() { check(false); UE_ASSUME(false); }
  141. virtual const FSharedWwiseDataStructure& GetLockedDataStructure() const { check(false); UE_ASSUME(false); }
  142. template <typename RequiredRef>
  143. bool GetRef(RequiredRef& OutRef, const FWwiseObjectInfo& InInfo)
  144. {
  145. const auto* ResourceLoader = GetResourceLoader();
  146. check(ResourceLoader);
  147. const auto& PlatformRef = ResourceLoader->GetCurrentPlatform();
  148. const auto& DataStructure = *GetLockedDataStructure();
  149. const auto* Platform = DataStructure.Platforms.Find(PlatformRef);
  150. if (UNLIKELY(!Platform))
  151. {
  152. UE_LOG(LogWwiseProjectDatabase, Error, TEXT("GetRef: Platform not found"));
  153. return false;
  154. }
  155. return Platform->GetRef(OutRef, InInfo);
  156. }
  157. bool DisableDefaultPlatforms() const;
  158. bool bIsDatabaseParsed = false;
  159. };