AudioEngineWwiseGemSystemComponent.cpp 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  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. #include "AudioEngineWwiseGemSystemComponent.h"
  9. #include <AzCore/PlatformIncl.h> // This include is needed to include WinSock2.h before including Windows.h
  10. // As AK/SoundEngine/Common/AkTypes.h eventually includes Windows.h
  11. #include <AzCore/Console/ILogger.h>
  12. #include <AzCore/Serialization/SerializeContext.h>
  13. #include <AzCore/Serialization/EditContext.h>
  14. #include <AzCore/Serialization/EditContextConstants.inl>
  15. #include <AzCore/Settings/SettingsRegistryMergeUtils.h>
  16. #include <AzFramework/Platform/PlatformDefaults.h>
  17. #include <AudioAllocators.h>
  18. #include <AudioSystemImplCVars.h>
  19. #include <AudioSystemImpl_wwise.h>
  20. #include <Common_wwise.h>
  21. #include <Config_wwise.h>
  22. #if defined(AUDIO_ENGINE_WWISE_EDITOR)
  23. #include <AudioSystemEditor_wwise.h>
  24. #endif // AUDIO_ENGINE_WWISE_EDITOR
  25. namespace Audio
  26. {
  27. namespace Platform
  28. {
  29. void* InitializeSecondaryMemoryPool(size_t& secondarySize);
  30. }
  31. } // namespace Audio
  32. namespace AudioEngineWwiseGem
  33. {
  34. void AudioEngineWwiseGemSystemComponent::Reflect(AZ::ReflectContext* context)
  35. {
  36. if (AZ::SerializeContext* serialize = azrtti_cast<AZ::SerializeContext*>(context))
  37. {
  38. serialize->Class<AudioEngineWwiseGemSystemComponent, AZ::Component>()
  39. ->Version(0)
  40. ;
  41. if (AZ::EditContext* ec = serialize->GetEditContext())
  42. {
  43. ec->Class<AudioEngineWwiseGemSystemComponent>("Audio Engine Wwise Gem", "Wwise implementation of the Audio Engine interfaces")
  44. ->ClassElement(AZ::Edit::ClassElements::EditorData, "")
  45. ->Attribute(AZ::Edit::Attributes::AutoExpand, true)
  46. ;
  47. }
  48. }
  49. Audio::Wwise::ConfigurationSettings::Reflect(context);
  50. }
  51. void AudioEngineWwiseGemSystemComponent::GetProvidedServices(AZ::ComponentDescriptor::DependencyArrayType& provided)
  52. {
  53. provided.push_back(AZ_CRC("AudioEngineService"));
  54. }
  55. void AudioEngineWwiseGemSystemComponent::GetIncompatibleServices(AZ::ComponentDescriptor::DependencyArrayType& incompatible)
  56. {
  57. incompatible.push_back(AZ_CRC("AudioEngineService"));
  58. }
  59. void AudioEngineWwiseGemSystemComponent::GetRequiredServices(AZ::ComponentDescriptor::DependencyArrayType& required)
  60. {
  61. required.push_back(AZ_CRC("AudioSystemService"));
  62. }
  63. void AudioEngineWwiseGemSystemComponent::GetDependentServices(AZ::ComponentDescriptor::DependencyArrayType& dependent)
  64. {
  65. dependent.push_back(AZ_CRC("AudioSystemService"));
  66. }
  67. void AudioEngineWwiseGemSystemComponent::Init()
  68. {
  69. }
  70. void AudioEngineWwiseGemSystemComponent::Activate()
  71. {
  72. Audio::Gem::EngineRequestBus::Handler::BusConnect();
  73. #if defined(AUDIO_ENGINE_WWISE_EDITOR)
  74. AudioControlsEditor::EditorImplPluginEventBus::Handler::BusConnect();
  75. #endif // AUDIO_ENGINE_WWISE_EDITOR
  76. }
  77. void AudioEngineWwiseGemSystemComponent::Deactivate()
  78. {
  79. Audio::Gem::EngineRequestBus::Handler::BusDisconnect();
  80. #if defined(AUDIO_ENGINE_WWISE_EDITOR)
  81. AudioControlsEditor::EditorImplPluginEventBus::Handler::BusDisconnect();
  82. #endif // AUDIO_ENGINE_WWISE_EDITOR
  83. }
  84. bool AudioEngineWwiseGemSystemComponent::Initialize()
  85. {
  86. bool success = false;
  87. // Check memory-related Wwise Cvars...
  88. [[maybe_unused]] const AZ::u64 memorySubpartitionSizes = Audio::Wwise::Cvars::s_StreamDeviceMemorySize
  89. #if !defined(WWISE_RELEASE)
  90. + Audio::Wwise::Cvars::s_MonitorQueueMemorySize
  91. #endif // !WWISE_RELEASE
  92. + Audio::Wwise::Cvars::s_CommandQueueMemorySize;
  93. AZ_Assert(Audio::Wwise::Cvars::s_PrimaryMemorySize > memorySubpartitionSizes,
  94. "Wwise memory sizes of sub-categories add up to more than the primary memory pool size!")
  95. AZ::SettingsRegistryInterface::FixedValueString assetPlatform = AzFramework::OSPlatformToDefaultAssetPlatform(
  96. AZ_TRAIT_OS_PLATFORM_CODENAME);
  97. if (assetPlatform.empty())
  98. {
  99. if (const auto settingsRegistry = AZ::SettingsRegistry::Get(); settingsRegistry != nullptr)
  100. {
  101. AZ::SettingsRegistryMergeUtils::PlatformGet(*settingsRegistry, assetPlatform,
  102. AZ::SettingsRegistryMergeUtils::BootstrapSettingsRootKey, "assets");
  103. }
  104. }
  105. m_engineWwise = AZStd::make_unique<Audio::CAudioSystemImpl_wwise>(assetPlatform.c_str());
  106. if (m_engineWwise)
  107. {
  108. AZLOG_INFO("%s", "AudioEngineWwise created!");
  109. Audio::SystemRequest::Initialize initRequest;
  110. AZ::Interface<Audio::IAudioSystem>::Get()->PushRequestBlocking(AZStd::move(initRequest));
  111. success = true;
  112. }
  113. else
  114. {
  115. AZLOG_ERROR("%s", "Could not create AudioEngineWwise!");
  116. }
  117. return success;
  118. }
  119. void AudioEngineWwiseGemSystemComponent::Release()
  120. {
  121. m_engineWwise.reset();
  122. }
  123. #if defined(AUDIO_ENGINE_WWISE_EDITOR)
  124. void AudioEngineWwiseGemSystemComponent::InitializeEditorImplPlugin()
  125. {
  126. m_editorImplPlugin.reset(new AudioControls::CAudioSystemEditor_wwise());
  127. }
  128. void AudioEngineWwiseGemSystemComponent::ReleaseEditorImplPlugin()
  129. {
  130. m_editorImplPlugin.reset();
  131. }
  132. AudioControls::IAudioSystemEditor* AudioEngineWwiseGemSystemComponent::GetEditorImplPlugin()
  133. {
  134. return m_editorImplPlugin.get();
  135. }
  136. #endif // AUDIO_ENGINE_WWISE_EDITOR
  137. } // namespace AudioEngineWwiseGem