Plasma Engine  2.0
Loading...
Searching...
No Matches
AmplitudeAudioSingleton.h
1#pragma once
2
3#include <AmplitudeAudioPlugin/AmplitudeAudioPluginDLL.h>
4
5#include <AudioSystemPlugin/Core/AudioMiddleware.h>
6
7#include <Core/ResourceManager/ResourceHandle.h>
8
9#include <Foundation/Configuration/Plugin.h>
10#include <Foundation/Configuration/Singleton.h>
11#include <Foundation/Types/UniquePtr.h>
12
13#include <SparkyStudios/Audio/Amplitude/Amplitude.h>
14
16class plOpenDdlWriter;
19
21struct PL_AMPLITUDEAUDIOPLUGIN_DLL plAmplitudeConfiguration
22{
23 plString m_sInitSoundBank;
24 plString m_sEngineConfigFileName;
25
26 void Save(plOpenDdlWriter& ddl) const;
27 void Load(const plOpenDdlReaderElement& ddl);
28
29 bool operator==(const plAmplitudeConfiguration& rhs) const;
30 bool operator!=(const plAmplitudeConfiguration& rhs) const { return !operator==(rhs); }
31};
32
35struct PL_AMPLITUDEAUDIOPLUGIN_DLL plAmplitudeAssetProfiles
36{
37 plResult Save(plOpenDdlWriter& writer) const;
38 plResult Load(const plOpenDdlReaderElement& reader);
39
41};
42
47class PL_AMPLITUDEAUDIOPLUGIN_DLL plAmplitude final : public plAudioMiddleware
48{
49private:
50 PL_DECLARE_SINGLETON_OF_INTERFACE(plAmplitude, plAudioMiddleware);
51
52 // plAudioMiddleware
53
54public:
55 plResult LoadConfiguration(const plOpenDdlReaderElement& reader) override;
56 plResult Startup() override;
57 void Update(plTime delta) override;
58 plResult Shutdown() override;
59 plResult Release() override;
60 plResult StopAllSounds() override;
61 plResult AddEntity(plAudioSystemEntityData* pEntityData, const char* szEntityName) override;
62 plResult ResetEntity(plAudioSystemEntityData* pEntityData) override;
63 plResult UpdateEntity(plAudioSystemEntityData* pEntityData) override;
64 plResult RemoveEntity(plAudioSystemEntityData* pEntityData) override;
65 plResult SetEntityTransform(plAudioSystemEntityData* pEntityData, const plAudioSystemTransform& Transform) override;
66 plResult LoadTrigger(plAudioSystemEntityData* pEntityData, const plAudioSystemTriggerData* pTriggerData, plAudioSystemEventData* pEventData) override;
67 plResult ActivateTrigger(plAudioSystemEntityData* pEntityData, const plAudioSystemTriggerData* pTriggerData, plAudioSystemEventData* pEventData) override;
68 plResult UnloadTrigger(plAudioSystemEntityData* pEntityData, const plAudioSystemTriggerData* pTriggerData) override;
69 plResult StopEvent(plAudioSystemEntityData* pEntityData, const plAudioSystemEventData* pEventData) override;
70 plResult StopAllEvents(plAudioSystemEntityData* pEntityData) override;
71 plResult SetRtpc(plAudioSystemEntityData* pEntityData, const plAudioSystemRtpcData* pRtpcData, float fValue) override;
72 plResult ResetRtpc(plAudioSystemEntityData* pEntityData, const plAudioSystemRtpcData* pRtpcData) override;
73 plResult SetSwitchState(plAudioSystemEntityData* pEntityData, const plAudioSystemSwitchStateData* pSwitchStateData) override;
74 plResult SetObstructionAndOcclusion(plAudioSystemEntityData* pEntityData, float fObstruction, float fOcclusion) override;
75 plResult SetEnvironmentAmount(plAudioSystemEntityData* pEntityData, const plAudioSystemEnvironmentData* pEnvironmentData, float fAmount) override;
76 plResult AddListener(plAudioSystemListenerData* pListenerData, const char* szListenerName) override;
77 plResult ResetListener(plAudioSystemListenerData* pListenerData) override;
78 plResult RemoveListener(plAudioSystemListenerData* pListenerData) override;
79 plResult SetListenerTransform(plAudioSystemListenerData* pListenerData, const plAudioSystemTransform& Transform) override;
80 plResult LoadBank(plAudioSystemBankData* pBankData) override;
81 plResult UnloadBank(plAudioSystemBankData* pBankData) override;
82 plAudioSystemEntityData* CreateWorldEntity(plAudioSystemDataID uiEntityId) override;
83 plAudioSystemEntityData* CreateEntityData(plAudioSystemDataID uiEntityId) override;
84 plResult DestroyEntityData(plAudioSystemEntityData* pEntityData) override;
85 plAudioSystemListenerData* CreateListenerData(plAudioSystemDataID uiListenerId) override;
86 plResult DestroyListenerData(plAudioSystemListenerData* pListenerData) override;
87 plAudioSystemEventData* CreateEventData(plAudioSystemDataID uiEventId) override;
88 plResult ResetEventData(plAudioSystemEventData* pEventData) override;
89 plResult DestroyEventData(plAudioSystemEventData* pEventData) override;
90 plResult DestroyBank(plAudioSystemBankData* pBankData) override;
91 plResult DestroyTriggerData(plAudioSystemTriggerData* pTriggerData) override;
92 plResult DestroyRtpcData(plAudioSystemRtpcData* pRtpcData) override;
93 plResult DestroySwitchStateData(plAudioSystemSwitchStateData* pSwitchStateData) override;
94 plResult DestroyEnvironmentData(plAudioSystemEnvironmentData* pEnvironmentData) override;
95 plResult SetLanguage(const char* szLanguage) override;
96 [[nodiscard]] const char* GetMiddlewareName() const override;
97 [[nodiscard]] float GetMasterGain() const override;
98 [[nodiscard]] bool GetMute() const override;
99 void OnMasterGainChange(float fGain) override;
100 void OnMuteChange(bool bMute) override;
101 void OnLoseFocus() override;
102 void OnGainFocus() override;
103
104 // plAmplitude
105
106public:
107 static void GameApplicationEventHandler(const plGameApplicationExecutionEvent& e);
108
109 plAmplitude();
110 ~plAmplitude() override;
111
112 [[nodiscard]] SparkyStudios::Audio::Amplitude::Engine* GetEngine() const { return m_pEngine; }
113
117 plAudioSystemBankData* DeserializeBankEntry(plStreamReader* pBankEntry);
118
122 plAudioSystemTriggerData* DeserializeTriggerEntry(plStreamReader* pTriggerEntry) const;
123
127 plAudioSystemRtpcData* DeserializeRtpcEntry(plStreamReader* pRtpcEntry) const;
128
132 plAudioSystemSwitchStateData* DeserializeSwitchStateEntry(plStreamReader* pSwitchStateEntry) const;
133
137 plAudioSystemEnvironmentData* DeserializeEnvironmentEntry(plStreamReader* pEnvironmentEntry) const;
138
139private:
140 void DetectPlatform() const;
141
142 SparkyStudios::Audio::Amplitude::Engine* m_pEngine;
143
144 SparkyStudios::Audio::Amplitude::AmTime m_dCurrentTime;
145 SparkyStudios::Audio::Amplitude::DiskFileSystem m_Loader;
146
147 bool m_bInitialized;
148
149 struct Data
150 {
151 plAmplitudeAssetProfiles m_Configs;
152 plString m_sPlatform;
153 SparkyStudios::Audio::Amplitude::AmObjectID m_uiInitSoundBank{SparkyStudios::Audio::Amplitude::kAmInvalidObjectId};
154 };
155
156 plUniquePtr<Data> m_pData;
157};
The Amplitude Audio Middleware.
Definition AmplitudeAudioSingleton.h:48
The Audio Middleware Interface. This interface should be implemented by the ATL middleware to communi...
Definition AudioMiddleware.h:14
Base class for an audio middleware bank file.
Definition AudioSystemData.h:224
Base class for an audio middleware entity.
Definition AudioSystemData.h:153
Base class for an audio middleware environment.
Definition AudioSystemData.h:198
Base class for an audio middleware event.
Definition AudioSystemData.h:207
Base class for an audio middleware listener.
Definition AudioSystemData.h:162
Base class for an audio middleware RTPC.
Definition AudioSystemData.h:180
Base class for an audio middleware switch state.
Definition AudioSystemData.h:189
Base class for an audio middleware trigger.
Definition AudioSystemData.h:171
Definition DynamicArray.h:81
Definition Map.h:408
Represents a single 'object' in a DDL document, e.g. either a custom type or a primitives list.
Definition OpenDdlReader.h:11
The base class for OpenDDL writers.
Definition OpenDdlWriter.h:13
Interface for binary in (read) streams.
Definition Stream.h:22
A Unique ptr manages an object and destroys that object when it goes out of scope....
Definition UniquePtr.h:10
Loads and stores all available platform-specific configurations for the Amplitude Audio middleware.
Definition AmplitudeAudioSingleton.h:36
The Amplitude configuration to be used on a specific platform.
Definition AmplitudeAudioSingleton.h:22
Stores the transformation data for an audio entity.
Definition AudioSystemData.h:17
Definition GameApplicationBase.h:32
Default enum for returning failure or success, instead of using a bool.
Definition Types.h:54
The time class encapsulates a double value storing the time in seconds.
Definition Time.h:12