1#pragma once
2
3#include <basis/seadTypes.h>
4
5namespace aal {
6class IAudioFrameProcess;
7}
8
9namespace al {
10class AudioDirector;
11class AudioEffectDataBase;
12template <typename T>
13class AudioInfoListWithParts;
14class AudioResourceLoadGroupInfo;
15class AudioResourceLoadingInfo;
16class AudioResourcePlayerKeeper;
17class AudioSystem;
18class AudioSystemDebug;
19struct AudioSystemInfo;
20class AudioSystemInitInfo;
21class BgmDataBase;
22class BgmMusicalInfo;
23struct GameSystemInfo;
24class IUseSeadAudioPlayer;
25class PadRumbleDirector;
26class Resource;
27class SeadAudioPlayer;
28class SeDataBase;
29} // namespace al
30
31namespace alAudioSystemFunction {
32al::AudioSystemInfo* getAudioSystemInfo(const al::GameSystemInfo*);
33al::SeDataBase* getSeDataBase(const al::AudioDirector*);
34al::BgmDataBase* getBgmDataBase(const al::AudioDirector*);
35al::Resource* tryGetAudioStationedResource(const char*, const char*);
36al::Resource* tryGetAudioDebugStationedResource(const char*, const char*);
37bool addAudiioFrameProccess(al::AudioDirector*, aal::IAudioFrameProcess*);
38void removeAudiioFrameProccess(al::AudioDirector*, aal::IAudioFrameProcess*);
39void tryLoadAddonSoundArchive(const char*, al::SeadAudioPlayer*);
40void loadAudioResource(const char*, al::AudioInfoListWithParts<al::AudioResourceLoadGroupInfo>*,
41 al::SeadAudioPlayer*, al::SeadAudioPlayer*);
42void destroyAudioResource(const char*, al::AudioInfoListWithParts<al::AudioResourceLoadGroupInfo>*,
43 al::SeadAudioPlayer*, al::SeadAudioPlayer*);
44al::SeadAudioPlayer* tryFindAudioPlayerRegistedSoundMemoryPoolHandler(const char*,
45 al::SeadAudioPlayer*,
46 al::SeadAudioPlayer*);
47bool tryDisableSoundMemoryPoolHandler(const char*, al::SeadAudioPlayer*);
48bool tryDisableSoundMemoryPoolHandlerByFilePath(const char*, al::SeadAudioPlayer*);
49void setPadRumbleDirectorForSe(al::AudioDirector*, al::PadRumbleDirector*);
50al::SeadAudioPlayer* getSeadAudioPlayerForSe(const al::AudioSystem*);
51al::SeadAudioPlayer* getSeadAudioPlayerForBgm(const al::AudioSystem*);
52al::BgmMusicalInfo* tryCreateBgmMusicalInfoList(const char*, al::BgmDataBase*);
53void stopAllSound(const al::AudioDirector*, s32, bool);
54void pauseAudioDirector(al::AudioDirector*, bool, u32);
55void pauseAudioDirectorForDebug(al::AudioDirector*, bool, u32);
56void pauseBgmDirector(al::AudioDirector*, bool, u32);
57void pauseAllSeForDemo(const al::AudioDirector*, bool, u32);
58void pauseAllSe(const al::AudioDirector*, bool, u32);
59void startBgmDucking(const al::AudioDirector*);
60void endBgmDucking(const al::AudioDirector*);
61void clearBgmDataForStepOverScene(const al::AudioDirector*);
62void softReset(const al::AudioDirector*, const al::AudioDirector*);
63void notifyIsModeHandheld(const al::AudioDirector*, bool);
64s32 getSeSoundHeapUsedSize(const al::AudioDirector*);
65s32 getBgmSoundHeapUsedSize(const al::AudioDirector*);
66u64 getHeapFreeSize(const al::AudioDirector*);
67u64 getHeapSize(const al::AudioDirector*);
68void enableAudioMaximizer(const al::GameSystemInfo*);
69void disableAudioMaximizer(const al::GameSystemInfo*);
70bool loadSoundItem(al::IUseSeadAudioPlayer*, u32, u32);
71bool isLoadedSoundItem(al::IUseSeadAudioPlayer*, u32);
72s32 saveHeapState(al::IUseSeadAudioPlayer*);
73void loadHeapState(al::IUseSeadAudioPlayer*, s32);
74s32 getCurrentHeapStateLevel(al::IUseSeadAudioPlayer*);
75u64 getSoundResourceHeapFreeSize(al::IUseSeadAudioPlayer*);
76void resetDataDependedStage(const al::AudioDirector*, const char*, s32);
77} // namespace alAudioSystemFunction
78
79namespace al {
80class AudioSystem {
81public:
82 AudioSystem();
83
84 void init(const AudioSystemInitInfo&);
85 void initDataBase();
86 void initResourcePlayer(const AudioSystemInitInfo&);
87 void applyDeviceVolume();
88 void updateHWOutputSetting();
89 void changeFinalMixInputBgmChVolume();
90 void initDebugModule(const AudioSystemInitInfo&);
91 void initSystemInfo();
92 void update();
93 void finalize();
94 void addAudiioFrameProccess(aal::IAudioFrameProcess*);
95 void removeAudiioFrameProccess(aal::IAudioFrameProcess*);
96 void pauseSystemImmediately(bool, const char*, bool);
97
98 AudioSystemInfo* getAudioSystemInfo() const { return mAudioSystemInfo; }
99
100private:
101 AudioResourcePlayerKeeper* mAudioResourcePlayerKeeper;
102 AudioResourceLoadingInfo* mAudioResourceLoadingInfo;
103 SeDataBase* mSeDataBase;
104 BgmDataBase* mBgmDataBase;
105 BgmMusicalInfo* mBgmMusicalInfo;
106 AudioSystemInfo* mAudioSystemInfo;
107 AudioSystemDebug* mAudioSystemDebug;
108 f32 mMasterVolume;
109 f32 mTvOutputVolume;
110 f32 mConsoleVolume;
111 AudioEffectDataBase* mAudioEffectDataBase;
112 char filler[0x90];
113};
114
115static_assert(sizeof(AudioSystem) == 0xe0);
116} // namespace al
117