You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
o3de/Gems/AudioEngineWwise/Code/Source/Engine/AudioSystemImpl_wwise.h

196 lines
9.2 KiB
C++

/*
* Copyright (c) Contributors to the Open 3D Engine Project.
* For complete copyright and license terms please see the LICENSE at the root of this distribution.
*
* SPDX-License-Identifier: Apache-2.0 OR MIT
*
*/
#pragma once
#include <AudioAllocators.h>
#include <FileIOHandler_wwise.h>
#include <ATLEntities_wwise.h>
#include <IAudioSystemImplementation.h>
namespace Audio
{
///////////////////////////////////////////////////////////////////////////////////////////////////
class CAudioSystemImpl_wwise
: public AudioSystemImplementation
{
public:
AUDIO_IMPL_CLASS_ALLOCATOR(CAudioSystemImpl_wwise)
explicit CAudioSystemImpl_wwise(const char* assetsPlatformName);
~CAudioSystemImpl_wwise() override;
// AudioSystemImplementationNotificationBus
void OnAudioSystemLoseFocus() override;
void OnAudioSystemGetFocus() override;
void OnAudioSystemMuteAll() override;
void OnAudioSystemUnmuteAll() override;
void OnAudioSystemRefresh() override;
// ~AudioSystemImplementationNotificationBus
// AudioSystemImplementationRequestBus
void Update(const float updateIntervalMS) override;
EAudioRequestStatus Initialize() override;
EAudioRequestStatus ShutDown() override;
EAudioRequestStatus Release() override;
EAudioRequestStatus StopAllSounds() override;
EAudioRequestStatus RegisterAudioObject(
IATLAudioObjectData* const audioObjectData,
const char* const objectName) override;
EAudioRequestStatus UnregisterAudioObject(IATLAudioObjectData* const audioObjectData) override;
EAudioRequestStatus ResetAudioObject(IATLAudioObjectData* const audioObjectData) override;
EAudioRequestStatus UpdateAudioObject(IATLAudioObjectData* const audioObjectData) override;
EAudioRequestStatus PrepareTriggerSync(
IATLAudioObjectData* const audioObjectData,
const IATLTriggerImplData* const triggerData) override;
EAudioRequestStatus UnprepareTriggerSync(
IATLAudioObjectData* const audioObjectData,
const IATLTriggerImplData* const triggerData) override;
EAudioRequestStatus PrepareTriggerAsync(
IATLAudioObjectData* const audioObjectData,
const IATLTriggerImplData* const triggerData,
IATLEventData* const eventData) override;
EAudioRequestStatus UnprepareTriggerAsync(
IATLAudioObjectData* const audioObjectData,
const IATLTriggerImplData* const triggerData,
IATLEventData* const eventData) override;
EAudioRequestStatus ActivateTrigger(
IATLAudioObjectData* const audioObjectData,
const IATLTriggerImplData* const triggerData,
IATLEventData* const eventData,
const SATLSourceData* const pSourceData) override;
EAudioRequestStatus StopEvent(
IATLAudioObjectData* const audioObjectData,
const IATLEventData* const eventData) override;
EAudioRequestStatus StopAllEvents(
IATLAudioObjectData* const audioObjectData) override;
EAudioRequestStatus SetPosition(
IATLAudioObjectData* const audioObjectData,
const SATLWorldPosition& worldPosition) override;
EAudioRequestStatus SetMultiplePositions(
IATLAudioObjectData* const audioObjectData,
const MultiPositionParams& multiPositionParams) override;
EAudioRequestStatus SetEnvironment(
IATLAudioObjectData* const audioObjectData,
const IATLEnvironmentImplData* const environmentData,
const float amount) override;
EAudioRequestStatus SetRtpc(
IATLAudioObjectData* const audioObjectData,
const IATLRtpcImplData* const rtpcData,
const float value) override;
EAudioRequestStatus SetSwitchState(
IATLAudioObjectData* const audioObjectData,
const IATLSwitchStateImplData* const switchStateData) override;
EAudioRequestStatus SetObstructionOcclusion(
IATLAudioObjectData* const audioObjectData,
const float obstruction,
const float occlusion) override;
EAudioRequestStatus SetListenerPosition(
IATLListenerData* const listenerData,
const SATLWorldPosition& newPosition) override;
EAudioRequestStatus ResetRtpc(
IATLAudioObjectData* const audioObjectData,
const IATLRtpcImplData* const rtpcData) override;
EAudioRequestStatus RegisterInMemoryFile(SATLAudioFileEntryInfo* const audioFileEntry) override;
EAudioRequestStatus UnregisterInMemoryFile(SATLAudioFileEntryInfo* const audioFileEntry) override;
EAudioRequestStatus ParseAudioFileEntry(const AZ::rapidxml::xml_node<char>* audioFileEntryNode, SATLAudioFileEntryInfo* const fileEntryInfo) override;
void DeleteAudioFileEntryData(IATLAudioFileEntryData* const oldAudioFileEntryData) override;
const char* const GetAudioFileLocation(SATLAudioFileEntryInfo* const fileEntryInfo) override;
IATLTriggerImplData* NewAudioTriggerImplData(const AZ::rapidxml::xml_node<char>* audioTriggerNode) override;
void DeleteAudioTriggerImplData(IATLTriggerImplData* const oldTriggerImplData) override;
IATLRtpcImplData* NewAudioRtpcImplData(const AZ::rapidxml::xml_node<char>* audioRtpcNode) override;
void DeleteAudioRtpcImplData(IATLRtpcImplData* const oldRtpcImplData) override;
IATLSwitchStateImplData* NewAudioSwitchStateImplData(const AZ::rapidxml::xml_node<char>* audioSwitchStateNode) override;
void DeleteAudioSwitchStateImplData(IATLSwitchStateImplData* const oldSwitchStateImplData) override;
IATLEnvironmentImplData* NewAudioEnvironmentImplData(const AZ::rapidxml::xml_node<char>* audioEnvironmentNode) override;
void DeleteAudioEnvironmentImplData(IATLEnvironmentImplData* const oldEnvironmentImplData) override;
SATLAudioObjectData_wwise* NewGlobalAudioObjectData(const TAudioObjectID objectId) override;
SATLAudioObjectData_wwise* NewAudioObjectData(const TAudioObjectID objectId) override;
void DeleteAudioObjectData(IATLAudioObjectData* const oldObjectData) override;
SATLListenerData_wwise* NewDefaultAudioListenerObjectData(const TATLIDType objectId) override;
SATLListenerData_wwise* NewAudioListenerObjectData(const TATLIDType objectId) override;
void DeleteAudioListenerObjectData(IATLListenerData* const oldListenerData) override;
SATLEventData_wwise* NewAudioEventData(const TAudioEventID eventId) override;
void DeleteAudioEventData(IATLEventData* const oldEventData) override;
void ResetAudioEventData(IATLEventData* const eventData) override;
const char* const GetImplSubPath() const override;
void SetLanguage(const char* const language) override;
// Functions below are only used when WWISE_RELEASE is not defined
const char* const GetImplementationNameString() const override;
void GetMemoryInfo(SAudioImplMemoryInfo& memoryInfo) const override;
AZStd::vector<AudioImplMemoryPoolInfo> GetMemoryPoolInfo() override;
bool CreateAudioSource(const SAudioInputConfig& sourceConfig) override;
void DestroyAudioSource(TAudioSourceId sourceId) override;
void SetPanningMode(PanningMode mode) override;
// ~AudioSystemImplementationRequestBus
protected:
void SetBankPaths();
AZStd::string m_soundbankFolder;
AZStd::string m_localizedSoundbankFolder;
AZStd::string m_assetsPlatform;
private:
static const char* const WwiseImplSubPath;
static const char* const WwiseGlobalAudioObjectName;
static const float ObstructionOcclusionMin;
static const float ObstructionOcclusionMax;
struct SEnvPairCompare
{
bool operator()(const AZStd::pair<const AkAuxBusID, float>& pair1, const AZStd::pair<const AkAuxBusID, float>& pair2) const;
};
SATLSwitchStateImplData_wwise* ParseWwiseSwitchOrState(const AZ::rapidxml::xml_node<char>* node, EWwiseSwitchType type);
SATLSwitchStateImplData_wwise* ParseWwiseRtpcSwitch(const AZ::rapidxml::xml_node<char>* node);
void ParseRtpcImpl(const AZ::rapidxml::xml_node<char>* node, AkRtpcID& akRtpcId, float& mult, float& shift);
EAudioRequestStatus PrepUnprepTriggerSync(
const IATLTriggerImplData* const triggerData,
bool prepare);
EAudioRequestStatus PrepUnprepTriggerAsync(
const IATLTriggerImplData* const triggerData,
IATLEventData* const eventData,
bool prepare);
EAudioRequestStatus PostEnvironmentAmounts(IATLAudioObjectData* const audioObjectData);
AkGameObjectID m_globalGameObjectID;
AkGameObjectID m_defaultListenerGameObjectID;
AkBankID m_initBankID;
CFileIOHandler_wwise m_fileIOHandler;
#if !defined(WWISE_RELEASE)
bool m_isCommSystemInitialized;
AZStd::vector<AudioImplMemoryPoolInfo> m_debugMemoryInfo;
AZStd::string m_fullImplString;
AZStd::string m_speakerConfigString;
#endif // !WWISE_RELEASE
};
} // namespace Audio