Payback 0.0.1
CK Graduation Project
로딩중...
검색중...
일치하는것 없음
UGlobalAudioSubsystem 클래스 참조

#include <GlobalAudioSubsystem.h>

UGlobalAudioSubsystem에 대한 상속 다이어그램 :
Inheritance graph
UGlobalAudioSubsystem에 대한 협력 다이어그램:
Collaboration graph

클래스

struct  FActiveBGMEntry
 

Public 멤버 함수

virtual void Initialize (FSubsystemCollectionBase &Collection) override
 
virtual void Deinitialize () override
 
bool PlayBGM (UAudioData *SourceAudioData, FGameplayTag BGMTag, bool bStopOtherBGM=true)
 
void StopBGM ()
 
bool IsPlayingBGM (FGameplayTag BGMTag) const
 
void SetBGMVolume (float NewVolume)
 
void SetSFXVolume (float NewVolume)
 
void SetAMBVolume (float NewVolume)
 
bool PlayAudioTagAtLocation (UAudioData *SourceAudioData, FGameplayTag AudioTag, FVector Location)
 
UFMODAudioComponent * StartLoopAudioTag (UAudioData *SourceAudioData, FGameplayTag AudioTag, USceneComponent *AttachToComponent)
 
void StopLoopAudio (UFMODAudioComponent *LoopAudioComponent)
 
FORCEINLINE float GetBGMVolume () const
 
FORCEINLINE float GetSFXVolume () const
 
FORCEINLINE float GetAMBVolume () const
 

Private 멤버 함수

FORCEINLINE UFMODBus * GetBGMBus ()
 
FORCEINLINE UFMODBus * GetSFXBus ()
 
FORCEINLINE UFMODBus * GetAMBBus ()
 
FORCEINLINE UFMODBus * LoadBus (const TSoftObjectPtr< UFMODBus > &SourceBus, TObjectPtr< UFMODBus > &CachedBus)
 
bool IsEventInstancePlaying (const FFMODEventInstance &EventInstance) const
 
void StopEventInstance (const FFMODEventInstance &EventInstance) const
 
void OnPostLoadMap (UWorld *LoadedWorld)
 
void StopBGMByTag (FGameplayTag BGMTag)
 

Private 속성

TObjectPtr< UFMODBus > CachedBGMBus
 
TObjectPtr< UFMODBus > CachedSFXBus
 
TObjectPtr< UFMODBus > CachedAMBBus
 
TMap< FGameplayTag, FActiveBGMEntryActiveBGMs
 
FDelegateHandle PostLoadMapHandle
 
float BGMVolume = 1.0f
 
float SFXVolume = 1.0f
 
float AMBVolume = 1.0f
 

멤버 함수 문서화

◆ Deinitialize()

void UGlobalAudioSubsystem::Deinitialize ( )
overridevirtual
20{
21 FCoreUObjectDelegates::PostLoadMapWithWorld.Remove(PostLoadMapHandle);
22 PostLoadMapHandle.Reset();
23
24 StopBGM();
25
26 Super::Deinitialize();
27}
FDelegateHandle PostLoadMapHandle
Definition GlobalAudioSubsystem.h:157
void StopBGM()
Definition GlobalAudioSubsystem.cpp:95
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ GetAMBBus()

FORCEINLINE UFMODBus * UGlobalAudioSubsystem::GetAMBBus ( )
inlineprivate
111 {
112 if (const UGlobalAudioSettings* Settings = GetDefault<UGlobalAudioSettings>())
113 {
114 return LoadBus(Settings->GetAMBBus(), CachedAMBBus);
115 }
116 else
117 {
118 return nullptr;
119 }
120 }
Definition GlobalAudioSettings.h:14
FORCEINLINE UFMODBus * LoadBus(const TSoftObjectPtr< UFMODBus > &SourceBus, TObjectPtr< UFMODBus > &CachedBus)
Definition GlobalAudioSubsystem.h:122
TObjectPtr< UFMODBus > CachedAMBBus
Definition GlobalAudioSubsystem.h:152
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetAMBVolume()

FORCEINLINE float UGlobalAudioSubsystem::GetAMBVolume ( ) const
inline
73 {
74 return AMBVolume;
75 }
float AMBVolume
Definition GlobalAudioSubsystem.h:161

◆ GetBGMBus()

FORCEINLINE UFMODBus * UGlobalAudioSubsystem::GetBGMBus ( )
inlineprivate
87 {
88 if (const UGlobalAudioSettings* Settings = GetDefault<UGlobalAudioSettings>())
89 {
90 return LoadBus(Settings->GetBGMBus(), CachedBGMBus);
91 }
92 else
93 {
94 return nullptr;
95 }
96 }
TObjectPtr< UFMODBus > CachedBGMBus
Definition GlobalAudioSubsystem.h:146
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetBGMVolume()

FORCEINLINE float UGlobalAudioSubsystem::GetBGMVolume ( ) const
inline
61 {
62 return BGMVolume;
63 }
float BGMVolume
Definition GlobalAudioSubsystem.h:159

◆ GetSFXBus()

FORCEINLINE UFMODBus * UGlobalAudioSubsystem::GetSFXBus ( )
inlineprivate
99 {
100 if (const UGlobalAudioSettings* Settings = GetDefault<UGlobalAudioSettings>())
101 {
102 return LoadBus(Settings->GetSFXBus(), CachedSFXBus);
103 }
104 else
105 {
106 return nullptr;
107 }
108 }
TObjectPtr< UFMODBus > CachedSFXBus
Definition GlobalAudioSubsystem.h:149
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ GetSFXVolume()

FORCEINLINE float UGlobalAudioSubsystem::GetSFXVolume ( ) const
inline
67 {
68 return SFXVolume;
69 }
float SFXVolume
Definition GlobalAudioSubsystem.h:160

◆ Initialize()

void UGlobalAudioSubsystem::Initialize ( FSubsystemCollectionBase &  Collection)
overridevirtual
12{
13 Super::Initialize(Collection);
14
15 PostLoadMapHandle = FCoreUObjectDelegates::PostLoadMapWithWorld.AddUObject(this, &UGlobalAudioSubsystem::OnPostLoadMap);
16}
void OnPostLoadMap(UWorld *LoadedWorld)
Definition GlobalAudioSubsystem.cpp:230
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ IsEventInstancePlaying()

bool UGlobalAudioSubsystem::IsEventInstancePlaying ( const FFMODEventInstance &  EventInstance) const
private
201{
202 if (EventInstance.Instance == nullptr || EventInstance.Instance->isValid() == false)
203 {
204 return false;
205 }
206
207 FMOD_STUDIO_PLAYBACK_STATE PlaybackState = FMOD_STUDIO_PLAYBACK_STOPPED;
208
209 if (EventInstance.Instance->getPlaybackState(&PlaybackState) != FMOD_OK)
210 {
211 return false;
212 }
213
214 return PlaybackState != FMOD_STUDIO_PLAYBACK_STOPPED;
215}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ IsPlayingBGM()

bool UGlobalAudioSubsystem::IsPlayingBGM ( FGameplayTag  BGMTag) const
108{
109 if (const FActiveBGMEntry* ActiveEntry = ActiveBGMs.Find(BGMTag))
110 {
111 return IsEventInstancePlaying(ActiveEntry->Instance);
112 }
113 else
114 {
115 return false;
116 }
117}
bool IsEventInstancePlaying(const FFMODEventInstance &EventInstance) const
Definition GlobalAudioSubsystem.cpp:200
TMap< FGameplayTag, FActiveBGMEntry > ActiveBGMs
Definition GlobalAudioSubsystem.h:155
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ LoadBus()

FORCEINLINE UFMODBus * UGlobalAudioSubsystem::LoadBus ( const TSoftObjectPtr< UFMODBus > &  SourceBus,
TObjectPtr< UFMODBus > &  CachedBus 
)
inlineprivate
123 {
124 if (CachedBus)
125 {
126 return CachedBus;
127 }
128
129 if (SourceBus.IsNull())
130 {
131 return nullptr;
132 }
133
134 CachedBus = SourceBus.LoadSynchronous();
135 return CachedBus;
136 }

◆ OnPostLoadMap()

void UGlobalAudioSubsystem::OnPostLoadMap ( UWorld *  LoadedWorld)
private
231{
232 TArray<FGameplayTag> ActiveTags;
233 ActiveBGMs.GetKeys(ActiveTags);
234
235 for (const FGameplayTag& ActiveTag : ActiveTags)
236 {
237 const FActiveBGMEntry* ActiveEntry = ActiveBGMs.Find(ActiveTag);
238
239 if (ActiveEntry == nullptr || ActiveEntry->bLevelChangeContinue)
240 {
241 continue;
242 }
243
244 StopBGMByTag(ActiveTag);
245 }
246}
void StopBGMByTag(FGameplayTag BGMTag)
Definition GlobalAudioSubsystem.cpp:249
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ PlayAudioTagAtLocation()

bool UGlobalAudioSubsystem::PlayAudioTagAtLocation ( UAudioData SourceAudioData,
FGameplayTag  AudioTag,
FVector  Location 
)
142{
143 if (SourceAudioData == nullptr || AudioTag.IsValid() == false)
144 {
145 return false;
146 }
147
148 FAudioTagData Entry;
149
150 if (SourceAudioData->FindAudioData(AudioTag, Entry) == false)
151 {
152 return false;
153 }
154
155 const FFMODEventInstance NewInstance = UFMODBlueprintStatics::PlayEventAtLocation(this, Entry.AudioData.SoundEvent, FTransform(Location), true);
156 return NewInstance.Instance != nullptr;
157}
bool FindAudioData(FGameplayTag AudioTag, FAudioTagData &OutData) const
Definition AudioData.cpp:6
Definition AudioData.h:28
FSoundPlaybackData AudioData
Definition AudioData.h:33
TObjectPtr< UFMODEvent > SoundEvent
Definition AudioData.h:22
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ PlayBGM()

bool UGlobalAudioSubsystem::PlayBGM ( UAudioData SourceAudioData,
FGameplayTag  BGMTag,
bool  bStopOtherBGM = true 
)
31{
32 if (SourceAudioData == nullptr || BGMTag.IsValid() == false)
33 {
34 return false;
35 }
36
37 FAudioTagData Entry;
38
39 if (SourceAudioData->FindAudioData(BGMTag, Entry) == false)
40 {
41 return false;
42 }
43
44 if (Entry.bIsBgm == false)
45 {
46 return false;
47 }
48
49 const bool bAlreadyPlaying = IsPlayingBGM(BGMTag);
50
51 if (bStopOtherBGM)
52 {
53 TArray<FGameplayTag> ActiveTags;
54 ActiveBGMs.GetKeys(ActiveTags);
55
56 for (const FGameplayTag& ActiveTag : ActiveTags)
57 {
58 if (ActiveTag != BGMTag)
59 {
60 StopBGMByTag(ActiveTag);
61 }
62 }
63 }
64
65 if (bAlreadyPlaying && Entry.bCanQuickRestart == false)
66 {
67 return true;
68 }
69
70 // 같은 곡을 다시 트는 경우는 즉시 끊는다.
71 if (bAlreadyPlaying)
72 {
73 StopBGMByTag(BGMTag);
74 }
75
76 const FFMODEventInstance NewInstance = UFMODBlueprintStatics::PlayEvent2D(this, Entry.AudioData.SoundEvent, false);
77
78 if (NewInstance.Instance == nullptr)
79 {
80 return false;
81 }
82
83 FActiveBGMEntry ActiveEntry;
84 ActiveEntry.Instance = NewInstance;
85 ActiveEntry.bLevelChangeContinue = Entry.bLevelChangeContinue;
86
87 UFMODBlueprintStatics::EventInstancePlay(NewInstance);
88
89 ActiveBGMs.Add(BGMTag, ActiveEntry);
90
91 return true;
92}
bool IsPlayingBGM(FGameplayTag BGMTag) const
Definition GlobalAudioSubsystem.cpp:107
bool bIsBgm
Definition AudioData.h:42
bool bCanQuickRestart
Definition AudioData.h:36
bool bLevelChangeContinue
Definition AudioData.h:45
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SetAMBVolume()

void UGlobalAudioSubsystem::SetAMBVolume ( float  NewVolume)
135{
136 AMBVolume = FMath::Clamp(NewVolume, 0.0f, 1.0f);
137 UFMODBlueprintStatics::BusSetVolume(GetAMBBus(), AMBVolume);
138}
FORCEINLINE UFMODBus * GetAMBBus()
Definition GlobalAudioSubsystem.h:110
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SetBGMVolume()

void UGlobalAudioSubsystem::SetBGMVolume ( float  NewVolume)
121{
122 BGMVolume = FMath::Clamp(NewVolume, 0.0f, 1.0f);
123 UFMODBlueprintStatics::BusSetVolume(GetBGMBus(), BGMVolume);
124}
FORCEINLINE UFMODBus * GetBGMBus()
Definition GlobalAudioSubsystem.h:86
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ SetSFXVolume()

void UGlobalAudioSubsystem::SetSFXVolume ( float  NewVolume)
128{
129 SFXVolume = FMath::Clamp(NewVolume, 0.0f, 1.0f);
130 UFMODBlueprintStatics::BusSetVolume(GetSFXBus(), SFXVolume);
131}
FORCEINLINE UFMODBus * GetSFXBus()
Definition GlobalAudioSubsystem.h:98
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ StartLoopAudioTag()

UFMODAudioComponent * UGlobalAudioSubsystem::StartLoopAudioTag ( UAudioData SourceAudioData,
FGameplayTag  AudioTag,
USceneComponent *  AttachToComponent 
)
161{
162 if (SourceAudioData == nullptr || AudioTag.IsValid() == false || AttachToComponent == nullptr)
163 {
164 return nullptr;
165 }
166
167 FAudioTagData Entry;
168
169 if (SourceAudioData->FindAudioData(AudioTag, Entry) == false)
170 {
171 return nullptr;
172 }
173
174 return UFMODBlueprintStatics::PlayEventAttached
175 (
176 Entry.AudioData.SoundEvent,
177 AttachToComponent,
178 NAME_None,
179 FVector::ZeroVector,
180 EAttachLocation::KeepRelativeOffset,
181 true,
182 true,
183 false
184 );
185}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:

◆ StopBGM()

void UGlobalAudioSubsystem::StopBGM ( )
96{
97 TArray<FGameplayTag> ActiveTags;
98 ActiveBGMs.GetKeys(ActiveTags);
99
100 for (const FGameplayTag& ActiveTag : ActiveTags)
101 {
102 StopBGMByTag(ActiveTag);
103 }
104}
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StopBGMByTag()

void UGlobalAudioSubsystem::StopBGMByTag ( FGameplayTag  BGMTag)
private
250{
251 FActiveBGMEntry ActiveEntry;
252
253 if (ActiveBGMs.RemoveAndCopyValue(BGMTag, ActiveEntry) == false)
254 {
255 return;
256 }
257
258 StopEventInstance(ActiveEntry.Instance);
259}
void StopEventInstance(const FFMODEventInstance &EventInstance) const
Definition GlobalAudioSubsystem.cpp:218
이 함수 내부에서 호출하는 함수들에 대한 그래프입니다.:
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StopEventInstance()

void UGlobalAudioSubsystem::StopEventInstance ( const FFMODEventInstance &  EventInstance) const
private
219{
220 if (EventInstance.Instance == nullptr || EventInstance.Instance->isValid() == false)
221 {
222 return;
223 }
224
225 EventInstance.Instance->stop(FMOD_STUDIO_STOP_IMMEDIATE);
226 EventInstance.Instance->release();
227}
이 함수를 호출하는 함수들에 대한 그래프입니다.:

◆ StopLoopAudio()

void UGlobalAudioSubsystem::StopLoopAudio ( UFMODAudioComponent *  LoopAudioComponent)
189{
190 if (LoopAudioComponent == nullptr)
191 {
192 return;
193 }
194
195 LoopAudioComponent->Stop();
196 LoopAudioComponent->DestroyComponent();
197}

멤버 데이터 문서화

◆ ActiveBGMs

TMap<FGameplayTag, FActiveBGMEntry> UGlobalAudioSubsystem::ActiveBGMs
private

◆ AMBVolume

float UGlobalAudioSubsystem::AMBVolume = 1.0f
private

◆ BGMVolume

float UGlobalAudioSubsystem::BGMVolume = 1.0f
private

◆ CachedAMBBus

TObjectPtr<UFMODBus> UGlobalAudioSubsystem::CachedAMBBus
private

◆ CachedBGMBus

TObjectPtr<UFMODBus> UGlobalAudioSubsystem::CachedBGMBus
private

◆ CachedSFXBus

TObjectPtr<UFMODBus> UGlobalAudioSubsystem::CachedSFXBus
private

◆ PostLoadMapHandle

FDelegateHandle UGlobalAudioSubsystem::PostLoadMapHandle
private

◆ SFXVolume

float UGlobalAudioSubsystem::SFXVolume = 1.0f
private

이 클래스에 대한 문서화 페이지는 다음의 파일들로부터 생성되었습니다.: