audiomanager.py (5470B)
1 #Embedded file name: C:\BuildAgent\work\20d73f1b24eed06e\eve\release\V24.01\packages\audio2\audiomanager.py 2 import audio2 3 INIT_BANK = 'Init.bnk' 4 5 class AudioManager(object): 6 7 def __init__(self, baseSoundbankPath, languageDirectory, applicationName, stereoAudioDeviceName = '', spatialAudioDeviceName = '', spatialAudioEnabled = True): 8 self.defaultSoundBanks = [] 9 self.manager = audio2.GetOrCreateManager() 10 self.staticDataRepository = audio2.GetStaticDataRepository() 11 self.banksWaitingToLoad = set() 12 self.enabled = False 13 self.settings = self._CreateAudioSettings(baseSoundbankPath, languageDirectory, applicationName, stereoAudioDeviceName=stereoAudioDeviceName, spatialAudioDeviceName=spatialAudioDeviceName, spatialAudioEnabled=spatialAudioEnabled) 14 self.manager.UpdateSettings(self.settings) 15 16 def AddAndLoadDefaultSoundBank(self, soundBankName): 17 if soundBankName not in self.defaultSoundBanks: 18 self.defaultSoundBanks.append(soundBankName) 19 self.LoadSoundBank(soundBankName) 20 21 def Disable(self): 22 self.banksWaitingToLoad = set(self.GetLoadedSoundBanks()) 23 self.manager.Disable() 24 self.enabled = False 25 26 def DisableSoundPrioritization(self): 27 self.manager.DisableAudioCulling() 28 29 def DisableSpatialAudio(self): 30 return self.manager.DisableSpatialAudio() 31 32 def Enable(self, soundBanksToLoad = []): 33 self.manager.Enable(self.defaultSoundBanks + soundBanksToLoad + list(self.banksWaitingToLoad)) 34 audio2.GetListener() 35 self.enabled = True 36 self.banksWaitingToLoad = set() 37 38 def EnableSoundPrioritization(self): 39 self.manager.EnableAudioCulling() 40 41 def EnableSpatialAudio(self): 42 return self.manager.EnableSpatialAudio() 43 44 def GetAudioEmitter(self, emitterID): 45 return self.manager.GetAudioEmitter(emitterID) 46 47 def GetLoadedSoundBanks(self): 48 return self.manager.GetLoadedSoundBanks() 49 50 def GetSoundPrioritizationEnabled(self): 51 return self.manager.audioCullingEnabled 52 53 def GetSpatialAudioEnabled(self): 54 return self.manager.spatialAudioEnabled 55 56 def GetPrioritizedEmitters(self): 57 return self.manager.GetPrioritizedEmitters() 58 59 def Initialize(self, audioMetadata, defaultSoundBanks = []): 60 self.defaultSoundBanks = defaultSoundBanks 61 self.staticDataRepository.Initialize(audioMetadata) 62 63 def LoadSoundBank(self, bankName): 64 if not self.enabled: 65 self.banksWaitingToLoad.add(bankName) 66 else: 67 self.manager.LoadBank(bankName) 68 69 def LoadSoundBanks(self, banksToLoad): 70 for bank in banksToLoad: 71 self.LoadSoundBank(bank) 72 73 def RegisterAudioDeviceChangeCallback(self, callback): 74 self.manager.RegisterAudioDeviceChangeCallback(callback) 75 76 def ReloadSoundBanks(self): 77 banksBeforeReload = self.manager.GetLoadedSoundBanks() 78 self.Disable() 79 self.Enable(soundBanksToLoad=banksBeforeReload) 80 81 def RemoveAndUnloadDefaultSoundBank(self, soundBankName): 82 if soundBankName in self.defaultSoundBanks: 83 self.defaultSoundBanks.remove(soundBankName) 84 self.UnloadSoundBank(soundBankName) 85 86 def SetGlobalRTPC(self, rtpcName, value): 87 return self.manager.SetGlobalRTPC(rtpcName, value) 88 89 def SetState(self, stateGroup, stateName): 90 return self.manager.SetState(stateGroup, stateName) 91 92 def SpatialAudioIsSupported(self): 93 return self.manager.SpatialAudioIsSupported() 94 95 def StopAllPlayingSounds(self): 96 self.manager.StopAll() 97 98 def SwapSoundBanks(self, banksToLoad): 99 if self.enabled: 100 loadedBanks = set(self.GetLoadedSoundBanks()) 101 else: 102 loadedBanks = self.banksWaitingToLoad 103 excludedBanks = set(self.defaultSoundBanks).union(set(banksToLoad)) 104 banksToUnload = loadedBanks.difference(excludedBanks) 105 banksToLoad = set(banksToLoad).difference(loadedBanks) 106 self.LoadSoundBanks(banksToLoad) 107 self.UnloadSoundBanks(banksToUnload) 108 109 def UnloadSoundBanks(self, soundBanksToUnload): 110 for soundBank in soundBanksToUnload: 111 self.UnloadSoundBank(soundBank) 112 113 def UnloadSoundBank(self, bankName): 114 if bankName not in self.defaultSoundBanks and bankName != INIT_BANK: 115 if not self.enabled: 116 if bankName in self.banksWaitingToLoad: 117 self.banksWaitingToLoad.remove(bankName) 118 self.manager.UnloadBank(bankName) 119 120 def StartProfilerCapture(self): 121 return self.manager.StartProfilerCapture() 122 123 def StopProfilerCapture(self): 124 return self.manager.StopProfilerCapture() 125 126 def IsProfilerCapturing(self): 127 return self.manager.IsProfilerCapturing() 128 129 def _CreateAudioSettings(self, baseSoundbankPath, language, applicationName, stereoAudioDeviceName = '', spatialAudioDeviceName = '', spatialAudioEnabled = True): 130 settings = audio2.AudSettings() 131 settings.applicationName = applicationName 132 settings.baseSoundbankPath = baseSoundbankPath 133 settings.soundbankLanguage = language 134 settings.spatialAudioEnabled = spatialAudioEnabled 135 if stereoAudioDeviceName: 136 settings.stereoAudioDeviceName = stereoAudioDeviceName 137 if spatialAudioDeviceName: 138 settings.spatialAudioDeviceName = spatialAudioDeviceName 139 return settings