AudioSystemImpl_wwise.h 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <AudioAllocators.h>
  10. #include <FileIOHandler_wwise.h>
  11. #include <ATLEntities_wwise.h>
  12. #include <IAudioSystemImplementation.h>
  13. namespace Audio
  14. {
  15. ///////////////////////////////////////////////////////////////////////////////////////////////////
  16. class CAudioSystemImpl_wwise
  17. : public AudioSystemImplementation
  18. {
  19. public:
  20. AUDIO_IMPL_CLASS_ALLOCATOR(CAudioSystemImpl_wwise)
  21. explicit CAudioSystemImpl_wwise(const char* assetsPlatformName);
  22. ~CAudioSystemImpl_wwise() override;
  23. // AudioSystemImplementationNotificationBus
  24. void OnAudioSystemLoseFocus() override;
  25. void OnAudioSystemGetFocus() override;
  26. void OnAudioSystemMuteAll() override;
  27. void OnAudioSystemUnmuteAll() override;
  28. void OnAudioSystemRefresh() override;
  29. // ~AudioSystemImplementationNotificationBus
  30. // AudioSystemImplementationRequestBus
  31. void Update(const float updateIntervalMS) override;
  32. EAudioRequestStatus Initialize() override;
  33. EAudioRequestStatus ShutDown() override;
  34. EAudioRequestStatus Release() override;
  35. EAudioRequestStatus StopAllSounds() override;
  36. EAudioRequestStatus RegisterAudioObject(
  37. IATLAudioObjectData* const audioObjectData,
  38. const char* const objectName) override;
  39. EAudioRequestStatus UnregisterAudioObject(IATLAudioObjectData* const audioObjectData) override;
  40. EAudioRequestStatus ResetAudioObject(IATLAudioObjectData* const audioObjectData) override;
  41. EAudioRequestStatus UpdateAudioObject(IATLAudioObjectData* const audioObjectData) override;
  42. EAudioRequestStatus PrepareTriggerSync(
  43. IATLAudioObjectData* const audioObjectData,
  44. const IATLTriggerImplData* const triggerData) override;
  45. EAudioRequestStatus UnprepareTriggerSync(
  46. IATLAudioObjectData* const audioObjectData,
  47. const IATLTriggerImplData* const triggerData) override;
  48. EAudioRequestStatus PrepareTriggerAsync(
  49. IATLAudioObjectData* const audioObjectData,
  50. const IATLTriggerImplData* const triggerData,
  51. IATLEventData* const eventData) override;
  52. EAudioRequestStatus UnprepareTriggerAsync(
  53. IATLAudioObjectData* const audioObjectData,
  54. const IATLTriggerImplData* const triggerData,
  55. IATLEventData* const eventData) override;
  56. EAudioRequestStatus ActivateTrigger(
  57. IATLAudioObjectData* const audioObjectData,
  58. const IATLTriggerImplData* const triggerData,
  59. IATLEventData* const eventData,
  60. const SATLSourceData* const pSourceData) override;
  61. EAudioRequestStatus StopEvent(
  62. IATLAudioObjectData* const audioObjectData,
  63. const IATLEventData* const eventData) override;
  64. EAudioRequestStatus StopAllEvents(
  65. IATLAudioObjectData* const audioObjectData) override;
  66. EAudioRequestStatus SetPosition(
  67. IATLAudioObjectData* const audioObjectData,
  68. const SATLWorldPosition& worldPosition) override;
  69. EAudioRequestStatus SetMultiplePositions(
  70. IATLAudioObjectData* const audioObjectData,
  71. const MultiPositionParams& multiPositionParams) override;
  72. EAudioRequestStatus SetEnvironment(
  73. IATLAudioObjectData* const audioObjectData,
  74. const IATLEnvironmentImplData* const environmentData,
  75. const float amount) override;
  76. EAudioRequestStatus SetRtpc(
  77. IATLAudioObjectData* const audioObjectData,
  78. const IATLRtpcImplData* const rtpcData,
  79. const float value) override;
  80. EAudioRequestStatus SetSwitchState(
  81. IATLAudioObjectData* const audioObjectData,
  82. const IATLSwitchStateImplData* const switchStateData) override;
  83. EAudioRequestStatus SetObstructionOcclusion(
  84. IATLAudioObjectData* const audioObjectData,
  85. const float obstruction,
  86. const float occlusion) override;
  87. EAudioRequestStatus SetListenerPosition(
  88. IATLListenerData* const listenerData,
  89. const SATLWorldPosition& newPosition) override;
  90. EAudioRequestStatus ResetRtpc(
  91. IATLAudioObjectData* const audioObjectData,
  92. const IATLRtpcImplData* const rtpcData) override;
  93. EAudioRequestStatus RegisterInMemoryFile(SATLAudioFileEntryInfo* const audioFileEntry) override;
  94. EAudioRequestStatus UnregisterInMemoryFile(SATLAudioFileEntryInfo* const audioFileEntry) override;
  95. EAudioRequestStatus ParseAudioFileEntry(const AZ::rapidxml::xml_node<char>* audioFileEntryNode, SATLAudioFileEntryInfo* const fileEntryInfo) override;
  96. void DeleteAudioFileEntryData(IATLAudioFileEntryData* const oldAudioFileEntryData) override;
  97. const char* const GetAudioFileLocation(SATLAudioFileEntryInfo* const fileEntryInfo) override;
  98. IATLTriggerImplData* NewAudioTriggerImplData(const AZ::rapidxml::xml_node<char>* audioTriggerNode) override;
  99. void DeleteAudioTriggerImplData(IATLTriggerImplData* const oldTriggerImplData) override;
  100. IATLRtpcImplData* NewAudioRtpcImplData(const AZ::rapidxml::xml_node<char>* audioRtpcNode) override;
  101. void DeleteAudioRtpcImplData(IATLRtpcImplData* const oldRtpcImplData) override;
  102. IATLSwitchStateImplData* NewAudioSwitchStateImplData(const AZ::rapidxml::xml_node<char>* audioSwitchStateNode) override;
  103. void DeleteAudioSwitchStateImplData(IATLSwitchStateImplData* const oldSwitchStateImplData) override;
  104. IATLEnvironmentImplData* NewAudioEnvironmentImplData(const AZ::rapidxml::xml_node<char>* audioEnvironmentNode) override;
  105. void DeleteAudioEnvironmentImplData(IATLEnvironmentImplData* const oldEnvironmentImplData) override;
  106. SATLAudioObjectData_wwise* NewGlobalAudioObjectData(const TAudioObjectID objectId) override;
  107. SATLAudioObjectData_wwise* NewAudioObjectData(const TAudioObjectID objectId) override;
  108. void DeleteAudioObjectData(IATLAudioObjectData* const oldObjectData) override;
  109. SATLListenerData_wwise* NewDefaultAudioListenerObjectData(const TATLIDType objectId) override;
  110. SATLListenerData_wwise* NewAudioListenerObjectData(const TATLIDType objectId) override;
  111. void DeleteAudioListenerObjectData(IATLListenerData* const oldListenerData) override;
  112. SATLEventData_wwise* NewAudioEventData(const TAudioEventID eventId) override;
  113. void DeleteAudioEventData(IATLEventData* const oldEventData) override;
  114. void ResetAudioEventData(IATLEventData* const eventData) override;
  115. const char* const GetImplSubPath() const override;
  116. void SetLanguage(const char* const language) override;
  117. // Functions below are only used when WWISE_RELEASE is not defined
  118. const char* const GetImplementationNameString() const override;
  119. void GetMemoryInfo(SAudioImplMemoryInfo& memoryInfo) const override;
  120. AZStd::vector<AudioImplMemoryPoolInfo> GetMemoryPoolInfo() override;
  121. bool CreateAudioSource(const SAudioInputConfig& sourceConfig) override;
  122. void DestroyAudioSource(TAudioSourceId sourceId) override;
  123. void SetPanningMode(PanningMode mode) override;
  124. // ~AudioSystemImplementationRequestBus
  125. protected:
  126. void SetBankPaths();
  127. AZStd::string m_soundbankFolder;
  128. AZStd::string m_localizedSoundbankFolder;
  129. AZStd::string m_assetsPlatform;
  130. private:
  131. static const char* const WwiseImplSubPath;
  132. static const char* const WwiseGlobalAudioObjectName;
  133. static const float ObstructionOcclusionMin;
  134. static const float ObstructionOcclusionMax;
  135. struct SEnvPairCompare
  136. {
  137. bool operator()(const AZStd::pair<const AkAuxBusID, float>& pair1, const AZStd::pair<const AkAuxBusID, float>& pair2) const;
  138. };
  139. SATLSwitchStateImplData_wwise* ParseWwiseSwitchOrState(const AZ::rapidxml::xml_node<char>* node, EWwiseSwitchType type);
  140. SATLSwitchStateImplData_wwise* ParseWwiseRtpcSwitch(const AZ::rapidxml::xml_node<char>* node);
  141. void ParseRtpcImpl(const AZ::rapidxml::xml_node<char>* node, AkRtpcID& akRtpcId, float& mult, float& shift);
  142. EAudioRequestStatus PrepUnprepTriggerSync(
  143. const IATLTriggerImplData* const triggerData,
  144. bool prepare);
  145. EAudioRequestStatus PrepUnprepTriggerAsync(
  146. const IATLTriggerImplData* const triggerData,
  147. IATLEventData* const eventData,
  148. bool prepare);
  149. EAudioRequestStatus PostEnvironmentAmounts(IATLAudioObjectData* const audioObjectData);
  150. AkGameObjectID m_globalGameObjectID;
  151. AkGameObjectID m_defaultListenerGameObjectID;
  152. AkBankID m_initBankID;
  153. CFileIOHandler_wwise m_fileIOHandler;
  154. #if !defined(WWISE_RELEASE)
  155. bool m_isCommSystemInitialized;
  156. AZStd::vector<AudioImplMemoryPoolInfo> m_debugMemoryInfo;
  157. AZStd::string m_fullImplString;
  158. AZStd::string m_speakerConfigString;
  159. #endif // !WWISE_RELEASE
  160. };
  161. } // namespace Audio