| 1 | #pragma once |
| 2 | |
| 3 | #include <basis/seadTypes.h> |
| 4 | |
| 5 | namespace aal { |
| 6 | class IAudioFrameProcess; |
| 7 | } |
| 8 | |
| 9 | namespace al { |
| 10 | class AudioDirector; |
| 11 | class AudioEffectDataBase; |
| 12 | template <typename T> |
| 13 | class AudioInfoListWithParts; |
| 14 | class AudioResourceLoadGroupInfo; |
| 15 | class AudioResourceLoadingInfo; |
| 16 | class AudioResourcePlayerKeeper; |
| 17 | class AudioSystem; |
| 18 | class AudioSystemDebug; |
| 19 | struct AudioSystemInfo; |
| 20 | class AudioSystemInitInfo; |
| 21 | class BgmDataBase; |
| 22 | class BgmMusicalInfo; |
| 23 | struct GameSystemInfo; |
| 24 | class IUseSeadAudioPlayer; |
| 25 | class PadRumbleDirector; |
| 26 | class Resource; |
| 27 | class SeadAudioPlayer; |
| 28 | class SeDataBase; |
| 29 | } // namespace al |
| 30 | |
| 31 | namespace alAudioSystemFunction { |
| 32 | al::AudioSystemInfo* getAudioSystemInfo(const al::GameSystemInfo*); |
| 33 | al::SeDataBase* getSeDataBase(const al::AudioDirector*); |
| 34 | al::BgmDataBase* getBgmDataBase(const al::AudioDirector*); |
| 35 | al::Resource* tryGetAudioStationedResource(const char*, const char*); |
| 36 | al::Resource* tryGetAudioDebugStationedResource(const char*, const char*); |
| 37 | bool addAudiioFrameProccess(al::AudioDirector*, aal::IAudioFrameProcess*); |
| 38 | void removeAudiioFrameProccess(al::AudioDirector*, aal::IAudioFrameProcess*); |
| 39 | void tryLoadAddonSoundArchive(const char*, al::SeadAudioPlayer*); |
| 40 | void loadAudioResource(const char*, al::AudioInfoListWithParts<al::AudioResourceLoadGroupInfo>*, |
| 41 | al::SeadAudioPlayer*, al::SeadAudioPlayer*); |
| 42 | void destroyAudioResource(const char*, al::AudioInfoListWithParts<al::AudioResourceLoadGroupInfo>*, |
| 43 | al::SeadAudioPlayer*, al::SeadAudioPlayer*); |
| 44 | al::SeadAudioPlayer* tryFindAudioPlayerRegistedSoundMemoryPoolHandler(const char*, |
| 45 | al::SeadAudioPlayer*, |
| 46 | al::SeadAudioPlayer*); |
| 47 | bool tryDisableSoundMemoryPoolHandler(const char*, al::SeadAudioPlayer*); |
| 48 | bool tryDisableSoundMemoryPoolHandlerByFilePath(const char*, al::SeadAudioPlayer*); |
| 49 | void setPadRumbleDirectorForSe(al::AudioDirector*, al::PadRumbleDirector*); |
| 50 | al::SeadAudioPlayer* getSeadAudioPlayerForSe(const al::AudioSystem*); |
| 51 | al::SeadAudioPlayer* getSeadAudioPlayerForBgm(const al::AudioSystem*); |
| 52 | al::BgmMusicalInfo* tryCreateBgmMusicalInfoList(const char*, al::BgmDataBase*); |
| 53 | void stopAllSound(const al::AudioDirector*, s32, bool); |
| 54 | void pauseAudioDirector(al::AudioDirector*, bool, u32); |
| 55 | void pauseAudioDirectorForDebug(al::AudioDirector*, bool, u32); |
| 56 | void pauseBgmDirector(al::AudioDirector*, bool, u32); |
| 57 | void pauseAllSeForDemo(const al::AudioDirector*, bool, u32); |
| 58 | void pauseAllSe(const al::AudioDirector*, bool, u32); |
| 59 | void startBgmDucking(const al::AudioDirector*); |
| 60 | void endBgmDucking(const al::AudioDirector*); |
| 61 | void clearBgmDataForStepOverScene(const al::AudioDirector*); |
| 62 | void softReset(const al::AudioDirector*, const al::AudioDirector*); |
| 63 | void notifyIsModeHandheld(const al::AudioDirector*, bool); |
| 64 | s32 getSeSoundHeapUsedSize(const al::AudioDirector*); |
| 65 | s32 getBgmSoundHeapUsedSize(const al::AudioDirector*); |
| 66 | u64 getHeapFreeSize(const al::AudioDirector*); |
| 67 | u64 getHeapSize(const al::AudioDirector*); |
| 68 | void enableAudioMaximizer(const al::GameSystemInfo*); |
| 69 | void disableAudioMaximizer(const al::GameSystemInfo*); |
| 70 | bool loadSoundItem(al::IUseSeadAudioPlayer*, u32, u32); |
| 71 | bool isLoadedSoundItem(al::IUseSeadAudioPlayer*, u32); |
| 72 | s32 saveHeapState(al::IUseSeadAudioPlayer*); |
| 73 | void loadHeapState(al::IUseSeadAudioPlayer*, s32); |
| 74 | s32 getCurrentHeapStateLevel(al::IUseSeadAudioPlayer*); |
| 75 | u64 getSoundResourceHeapFreeSize(al::IUseSeadAudioPlayer*); |
| 76 | void resetDataDependedStage(const al::AudioDirector*, const char*, s32); |
| 77 | } // namespace alAudioSystemFunction |
| 78 | |
| 79 | namespace al { |
| 80 | class AudioSystem { |
| 81 | public: |
| 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 | |
| 100 | private: |
| 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 | |
| 115 | static_assert(sizeof(AudioSystem) == 0xe0); |
| 116 | } // namespace al |
| 117 | |