Example #1
0
    def __init__(self):
        self.__volumeByCategory = {}
        self.__masterVolume = 1.0
        self.__isWindowVisible = BigWorld.isWindowVisible()
        self.__groups = {'arena': ('/vehicles/tanks', '/hits/hits', '/hits/explosions', '/hits/tank_death', '/weapons/large_fire', '/weapons/medium_fire', '/weapons/small_fire', '/weapons/tracer', '/GUI/notifications_FX', '/ingame_voice/notifications_VO', '/objects/wire_barricade', '/objects/tent', '/objects/dog_house', '/objects/structures', '/objects/treefall', '/objects/wood_box_mid', '/objects/telegraph_pole', '/objects/buildings', '/objects/fuel_tank', '/objects/fence', '/objects/fuel_barrel', '/objects/fire', '/objects/hay_stack', '/objects/metall_pole_huge')}
        self.__categories = {'voice': ('ingame_voice',),
         'vehicles': ('vehicles',),
         'effects': ('hits', 'weapons', 'environment', 'battle_gui'),
         'gui': ('gui',),
         'music': ('music',),
         'ambient': ('ambient',),
         'masterVivox': (),
         'micVivox': (),
         'masterFadeVivox': ()}
        defMasterVolume = 0.5
        defCategoryVolumes = {'music': 0.5,
         'masterVivox': 0.7,
         'micVivox': 0.4}
        userPrefs = Settings.g_instance.userPrefs
        soundModeName = SoundModes.DEFAULT_MODE_NAME
        nationalMapping = None
        self.__soundModes = None
        if not userPrefs.has_key(Settings.KEY_SOUND_PREFERENCES):
            userPrefs.write(Settings.KEY_SOUND_PREFERENCES, '')
            self.__masterVolume = defMasterVolume
            for categoryName in self.__categories.keys():
                self.__volumeByCategory[categoryName] = defCategoryVolumes.get(categoryName, 1.0)

            self.savePreferences()
        else:
            ds = userPrefs[Settings.KEY_SOUND_PREFERENCES]
            self.__masterVolume = ds.readFloat('masterVolume', defMasterVolume)
            for categoryName in self.__categories.keys():
                volume = ds.readFloat('volume_' + categoryName, defCategoryVolumes.get(categoryName, 1.0))
                self.__volumeByCategory[categoryName] = volume

            soundModeSec = ds['soundMode']
            if soundModeSec is not None:
                soundModeName = soundModeSec.asString
                if soundModeName == '':
                    soundModeName = SoundModes.DEFAULT_MODE_NAME
                    if ds['soundMode'].has_key('nationalPreset'):
                        nationalMapping = ds.readString('soundMode/nationalPreset', '')
                    else:
                        nationsSec = soundModeSec['nations']
                        if nationsSec is not None:
                            nationalMapping = {}
                            for nation, sec in nationsSec.items():
                                nationalMapping[nation] = sec.asString

        self.__soundModes = SoundModes(SoundModes.DEFAULT_MODE_NAME)
        if isinstance(nationalMapping, str):
            self.__soundModes.setNationalMappingByPreset(nationalMapping)
        elif isinstance(nationalMapping, dict):
            self.__soundModes.setNationalMapping(nationalMapping)
        else:
            self.__soundModes.setNationalMappingByMode(soundModeName)
        self.applyPreferences()
        self.__muteCallbackID = BigWorld.callback(0.25, self.__muteByWindowVisibility)
        return
Example #2
0
 def __muteByWindowVisibility(self):
     isWindowVisible = BigWorld.isWindowVisible()
     if self.__isWindowVisible != isWindowVisible:
         self.__isWindowVisible = isWindowVisible
         self.applyPreferences()
     self.__muteCallbackID = BigWorld.callback(
         0.25, self.__muteByWindowVisibility)
Example #3
0
    def play(self,
             eventName,
             vehicleIdToBind=None,
             checkFn=None,
             eventPos=None):
        replayCtrl = BattleReplay.g_replayCtrl
        if replayCtrl.isPlaying and replayCtrl.isTimeWarpInProgress:
            return
        elif not self.__isEnabled or BigWorld.isWindowVisible() is False:
            return
        else:
            event = self.__events.get(eventName, None)
            if event is None:
                LOG_WARNING("Couldn't find %s event" % eventName)
                return
            queues = self.__soundQueues
            enabledCategories = self.__enabledSoundCategories
            time = BigWorld.time()
            for category, soundDesc in event.iteritems():
                if category in enabledCategories and soundDesc['sound'] != '':
                    rules = soundDesc['playRules']
                    idToBind = vehicleIdToBind
                    if idToBind is None and soundDesc['shouldBindToPlayer']:
                        if BigWorld.player().vehicle is not None:
                            idToBind = BigWorld.player().vehicle.id
                    soundPath = soundDesc['sound']
                    minTimeBetweenEvents = soundDesc['minTimeBetweenEvents']
                    queueItem = IngameSoundNotifications.QueueItem(
                        soundPath, time + soundDesc['timeout'],
                        minTimeBetweenEvents, idToBind, checkFn, eventPos)
                    if rules == 0:
                        try:
                            if eventPos is not None:
                                SoundGroups.g_instance.playCameraOriented(
                                    soundDesc['sound'], eventPos)
                            else:
                                SoundGroups.g_instance.playSound2D(
                                    soundDesc['sound'])
                        except:
                            pass

                        continue
                    else:
                        lastEnqueuedTime = self.__lastEnqueuedTime.get(
                            soundPath)
                        if lastEnqueuedTime is not None and time - lastEnqueuedTime < minTimeBetweenEvents:
                            continue
                        self.__lastEnqueuedTime[soundPath] = time
                        if rules == 1:
                            self.__clearQueue(category)
                            queues[category].append(queueItem)
                        elif rules == 2:
                            queues[category].insert(0, queueItem)
                        elif rules == 3:
                            queues[category].append(queueItem)
                    if self.__activeEvents[category] is None:
                        self.__playFirstFromQueue(category)

            return
 def __checkPause(self):
     shouldPause = False
     if not self.__isEnabled or BigWorld.isWindowVisible() is False:
         shouldPause = True
     replayCtrl = BattleReplay.g_replayCtrl
     if replayCtrl.isPlaying:
         if replayCtrl.isTimeWarpInProgress or replayCtrl.isPaused:
             shouldPause = True
     if shouldPause:
         self.clear()
     return shouldPause
Example #5
0
 def applyPreferences(self):
     if not BigWorld.isWindowVisible():
         return
     self.setMasterVolume(self.__masterVolume)
     for categoryName in self.__volumeByCategory.iterkeys():
         newVolume = self.__volumeByCategory[categoryName]
         if self.__muffledByReplay and categoryName in ('vehicles',
                                                        'effects',
                                                        'ambient'):
             newVolume = 0.0
         self.setVolume(categoryName, newVolume, updatePrefs=False)
    def play(self, eventName, vehicleIdToBind = None):
        replayCtrl = BattleReplay.g_replayCtrl
        if replayCtrl.isPlaying and replayCtrl.isTimeWarpInProgress:
            return
        elif not self.__isEnabled or BigWorld.isWindowVisible() == False:
            return
        else:
            event = self.__events.get(eventName, None)
            if event is None:
                LOG_WARNING("Couldn't find %s event" % eventName)
                return
            queues = self.__soundQueues
            enabledCategories = self.__enabledSoundCategories
            time = BigWorld.time()
            for category, soundDesc in event.iteritems():
                if category in enabledCategories and soundDesc['sound'] != '':
                    rules = soundDesc['playRules']
                    idToBind = vehicleIdToBind
                    if idToBind is None and soundDesc['shouldBindToPlayer']:
                        if BigWorld.player().vehicle is not None:
                            idToBind = BigWorld.player().vehicle.id
                    soundPath = soundDesc['sound']
                    minTimeBetweenEvents = soundDesc['minTimeBetweenEvents']
                    queueItem = (soundPath,
                     time + soundDesc['timeout'],
                     minTimeBetweenEvents,
                     idToBind)
                    if rules == 0:
                        try:
                            BigWorld.playSound(soundDesc['sound'])
                        except:
                            pass

                        continue
                    else:
                        lastEnqueuedTime = self.__lastEnqueuedTime.get(soundPath)
                        if lastEnqueuedTime is not None and time - lastEnqueuedTime < minTimeBetweenEvents:
                            continue
                        self.__lastEnqueuedTime[soundPath] = time
                        if rules == 1:
                            self.__clearQueue(category)
                            queues[category].append(queueItem)
                        elif rules == 2:
                            queues[category].insert(0, queueItem)
                        elif rules == 3:
                            queues[category].append(queueItem)
                    if self.__activeEvents[category] is None:
                        self.__playFirstFromQueue(category)

            return
Example #7
0
    def __init__(self):
        self.__volumeByCategory = {}
        self.__masterVolume = 1.0
        self.__isWindowVisible = BigWorld.isWindowVisible()
        self.__groups = {
            'arena':
            ('/vehicles/tanks', '/hits/hits', '/hits/explosions',
             '/hits/tank_death', '/weapons/large_fire', '/weapons/medium_fire',
             '/weapons/small_fire', '/weapons/tracer', '/GUI/notifications_FX',
             '/ingame_voice/notifications_VO', '/objects/wire_barricade',
             '/objects/tent', '/objects/dog_house', '/objects/structures',
             '/objects/treefall', '/objects/wood_box_mid',
             '/objects/telegraph_pole', '/objects/buildings',
             '/objects/fuel_tank', '/objects/fence', '/objects/fuel_barrel',
             '/objects/fire', '/objects/hay_stack',
             '/objects/metall_pole_huge')
        }
        self.__categories = {
            'voice': ('ingame_voice', ),
            'vehicles': ('vehicles', ),
            'effects': ('hits', 'weapons', 'environment', 'battle_gui'),
            'gui': ('gui', ),
            'music': ('music', ),
            'ambient': ('ambient', ),
            'masterVivox': (),
            'micVivox': (),
            'masterFadeVivox': ()
        }
        defMasterVolume = 0.5
        defCategoryVolumes = {
            'music': 0.5,
            'masterVivox': 0.7,
            'micVivox': 0.4
        }
        userPrefs = Settings.g_instance.userPrefs
        soundModeName = SoundModes.DEFAULT_MODE_NAME
        nationalMapping = None
        self.__soundModes = None
        if not userPrefs.has_key(Settings.KEY_SOUND_PREFERENCES):
            userPrefs.write(Settings.KEY_SOUND_PREFERENCES, '')
            self.__masterVolume = defMasterVolume
            for categoryName in self.__categories.keys():
                self.__volumeByCategory[categoryName] = defCategoryVolumes.get(
                    categoryName, 1.0)

            self.savePreferences()
        else:
            ds = userPrefs[Settings.KEY_SOUND_PREFERENCES]
            self.__masterVolume = ds.readFloat('masterVolume', defMasterVolume)
            for categoryName in self.__categories.keys():
                volume = ds.readFloat(
                    'volume_' + categoryName,
                    defCategoryVolumes.get(categoryName, 1.0))
                self.__volumeByCategory[categoryName] = volume

            soundModeSec = ds['soundMode']
            if soundModeSec is not None:
                soundModeName = soundModeSec.asString
                if soundModeName == '':
                    soundModeName = SoundModes.DEFAULT_MODE_NAME
                    if ds['soundMode'].has_key('nationalPreset'):
                        nationalMapping = ds.readString(
                            'soundMode/nationalPreset', '')
                    else:
                        nationsSec = soundModeSec['nations']
                        if nationsSec is not None:
                            nationalMapping = {}
                            for nation, sec in nationsSec.items():
                                nationalMapping[nation] = sec.asString

        self.__soundModes = SoundModes(SoundModes.DEFAULT_MODE_NAME)
        if isinstance(nationalMapping, str):
            self.__soundModes.setNationalMappingByPreset(nationalMapping)
        elif isinstance(nationalMapping, dict):
            self.__soundModes.setNationalMapping(nationalMapping)
        else:
            self.__soundModes.setNationalMappingByMode(soundModeName)
        self.applyPreferences()
        self.__muteCallbackID = BigWorld.callback(
            0.25, self.__muteByWindowVisibility)
        return
Example #8
0
 def __muteByWindowVisibility(self):
     isWindowVisible = BigWorld.isWindowVisible()
     if self.__isWindowVisible != isWindowVisible:
         self.__isWindowVisible = isWindowVisible
         self.applyPreferences()
     self.__muteCallbackID = BigWorld.callback(0.25, self.__muteByWindowVisibility)
Example #9
0
    def __init__(self):
        self.__volumeByCategory = {}
        self.__masterVolume = 1.0
        self.__replace = {}
        self.__isWindowVisible = BigWorld.isWindowVisible()
        self.__handleInside = None
        self.__handleOutside = None
        self.__ceilLess = None
        self.__activeStinger = None
        self.__activeTrack = None
        self.__activeStingerPriority = None
        self.__muffled = False
        self.__muffledByReplay = False
        PlayerEvents.g_playerEvents.onAvatarReady += self.onAvatarReady
        self.__categories = {'voice': ('ingame_voice',),
         'vehicles': ('outside/vehicles', 'vehicles', 'inside/vehicles'),
         'effects': ('hits', 'outside/hits', 'inside/hits', 'weapons', 'inside/weapons', 'outside/weapons', 'environment', 'inside/environment', 'outside/environment', 'battle_gui'),
         'gui': ('gui',),
         'music': ('music',),
         'ambient': ('outside/ambient', 'hangar_v2', 'ambientUR'),
         'masterVivox': (),
         'micVivox': (),
         'masterFadeVivox': ()}
        defMasterVolume = 0.5
        defCategoryVolumes = {'music': 0.5,
         'masterVivox': 0.7,
         'micVivox': 0.4}
        userPrefs = Settings.g_instance.userPrefs
        soundModeName = SoundModes.DEFAULT_MODE_NAME
        nationalMapping = None
        self.__soundModes = None
        if not userPrefs.has_key(Settings.KEY_SOUND_PREFERENCES):
            userPrefs.write(Settings.KEY_SOUND_PREFERENCES, '')
            self.__masterVolume = defMasterVolume
            for categoryName in self.__categories.keys():
                self.__volumeByCategory[categoryName] = defCategoryVolumes.get(categoryName, 1.0)

            self.savePreferences()
        else:
            ds = userPrefs[Settings.KEY_SOUND_PREFERENCES]
            self.__masterVolume = ds.readFloat('masterVolume', defMasterVolume)
            for categoryName in self.__categories.keys():
                volume = ds.readFloat('volume_' + categoryName, defCategoryVolumes.get(categoryName, 1.0))
                self.__volumeByCategory[categoryName] = volume

            soundModeSec = ds['soundMode']
            if soundModeSec is not None:
                soundModeName = soundModeSec.asString
                if soundModeName == '':
                    soundModeName = SoundModes.DEFAULT_MODE_NAME
                    if ds['soundMode'].has_key('nationalPreset'):
                        nationalMapping = ds.readString('soundMode/nationalPreset', '')
                    else:
                        nationsSec = soundModeSec['nations']
                        if nationsSec is not None:
                            nationalMapping = {}
                            for nation, sec in nationsSec.items():
                                nationalMapping[nation] = sec.asString

        self.__soundModes = SoundModes(SoundModes.DEFAULT_MODE_NAME)
        if isinstance(nationalMapping, str):
            self.__soundModes.setNationalMappingByPreset(nationalMapping)
        elif isinstance(nationalMapping, dict):
            self.__soundModes.setNationalMapping(nationalMapping)
        else:
            self.__soundModes.setNationalMappingByMode(soundModeName)
        self.applyPreferences()
        self.__muteCallbackID = BigWorld.callback(0.25, self.__muteByWindowVisibility)
        self.defaultGroupList = []
        settings = ResMgr.openSection('scripts/arena_defs/_default_.xml/preloadSoundGroups')
        if settings is not None:
            self.defaultGroupList = settings.readStrings('groupName')
        if FMOD.enabled:
            for sg in self.defaultGroupList:
                result = FMOD.WG_loadSoundGroup(sg)
                if not result:
                    LOG_NOTE('Loading failed for default sound group ', sg)

            FMOD.WG_unloadAll()
        g_replayEvents.onMuteSound += self.__onReplayMute
        return
 def __onTick(self):
     isWindowVisible = BigWorld.isWindowVisible()
     if isWindowVisible != self.__isWindowVisible:
         self.__isWindowVisible = isWindowVisible
         self._onClientMainWindowStateChanged(isWindowVisible)
 def mainWindowWatcherInit(self):
     self.__clear()
     self.__isWindowVisible = BigWorld.isWindowVisible()
     self.__tick()
Example #12
0
    def __init__(self):
        self.__enableStatus = SOUND_ENABLE_STATUS_DEFAULT
        self.__volumeByCategory = {}
        self.__masterVolume = 1.0
        self.__lqRenderState = LQ_RENDER_STATE_DEFAULT
        self.__isWindowVisible = BigWorld.isWindowVisible()
        self.__handleInside = None
        self.__handleOutside = None
        self.__activeStinger = None
        self.__activeTrack = None
        self.__activeStingerPriority = None
        self.__muffled = False
        self.__muffledByReplay = False
        self.__states = []
        from gui.app_loader import g_appLoader
        self.__spaceID = g_appLoader.getSpaceID()
        PlayerEvents.g_playerEvents.onAvatarReady += self.onAvatarReady
        self.__categories = {'vehicles': ('outside/vehicles', 'vehicles'),
         'effects': ('hits', 'outside/hits', 'inside/weapons', 'outside/weapons', 'outside/environment', 'battle_gui'),
         'gui': ('gui', 'ingame_voice'),
         'music': ('music',),
         'ambient': ('outside/ambient', 'hangar_v2', 'ambientUR'),
         'masterVivox': (),
         'micVivox': (),
         'masterFadeVivox': ()}
        defMasterVolume = 0.5
        defCategoryVolumes = {'music': 0.5,
         'masterVivox': 0.7,
         'micVivox': 0.4}
        userPrefs = Settings.g_instance.userPrefs
        soundModeName = SoundModes.DEFAULT_MODE_NAME
        nationalMapping = None
        self.__soundModes = None
        if not userPrefs.has_key(Settings.KEY_SOUND_PREFERENCES):
            userPrefs.write(Settings.KEY_SOUND_PREFERENCES, '')
            self.__masterVolume = defMasterVolume
            for categoryName in self.__categories.keys():
                self.__volumeByCategory[categoryName] = defCategoryVolumes.get(categoryName, 1.0)

            self.savePreferences()
        else:
            ds = userPrefs[Settings.KEY_SOUND_PREFERENCES]
            self.__enableStatus = ds.readInt('enable', SOUND_ENABLE_STATUS_DEFAULT)
            self.__lqRenderState = ds.readInt('LQ_render', LQ_RENDER_STATE_DEFAULT)
            self.__masterVolume = ds.readFloat('masterVolume', defMasterVolume)
            for categoryName in self.__categories.keys():
                volume = ds.readFloat('volume_' + categoryName, defCategoryVolumes.get(categoryName, 1.0))
                self.__volumeByCategory[categoryName] = volume

            soundModeSec = ds['soundMode']
            if soundModeSec is not None:
                soundModeName = soundModeSec.asString
                if soundModeName == '':
                    soundModeName = SoundModes.DEFAULT_MODE_NAME
                    if ds['soundMode'].has_key('nationalPreset'):
                        nationalMapping = ds.readString('soundMode/nationalPreset', '')
                    else:
                        nationsSec = soundModeSec['nations']
                        if nationsSec is not None:
                            nationalMapping = {}
                            for nation, sec in nationsSec.items():
                                nationalMapping[nation] = sec.asString

        self.__soundModes = SoundModes(SoundModes.DEFAULT_MODE_NAME)
        if isinstance(nationalMapping, str):
            self.__soundModes.setNationalMappingByPreset(nationalMapping)
        elif isinstance(nationalMapping, dict):
            self.__soundModes.setNationalMapping(nationalMapping)
        else:
            self.__soundModes.setNationalMappingByMode(soundModeName)
        self.applyPreferences()
        self.__muteCallbackID = BigWorld.callback(0.25, self.__muteByWindowVisibility)
        self.defaultGroupList = ''
        settings = ResMgr.openSection('scripts/arena_defs/_default_.xml/preloadSoundBanks')
        if settings is not None:
            self.defaultGroupList = settings.asString
        g_replayEvents.onMuteSound += self.__onReplayMute
        from gui.app_loader import g_appLoader
        g_appLoader.onGUISpaceEntered += self.__onGUISpaceEntered
        return
Example #13
0
 def getMasterVolume(self):
     if BigWorld.isWindowVisible():
         return self.__masterVolume
     return 0.0
Example #14
0
    def __init__(self):
        self.__volumeByCategory = {}
        self.__masterVolume = 1.0
        self.__replace = {}
        self.__isWindowVisible = BigWorld.isWindowVisible()
        self.__handleInside = None
        self.__handleOutside = None
        self.__ceilLess = None
        self.__activeStinger = None
        self.__activeTrack = None
        self.__activeStingerPriority = None
        self.__muffled = False
        self.__muffledByReplay = False
        PlayerEvents.g_playerEvents.onAvatarReady += self.onAvatarReady
        self.__categories = {'voice': ('ingame_voice',),
         'vehicles': ('outside/vehicles', 'vehicles', 'inside/vehicles'),
         'effects': ('hits', 'outside/hits', 'inside/hits', 'weapons', 'inside/weapons', 'outside/weapons', 'environment', 'inside/environment', 'outside/environment', 'battle_gui'),
         'gui': ('gui',),
         'music': ('music',),
         'ambient': ('outside/ambient', 'hangar_v2', 'ambientUR'),
         'masterVivox': (),
         'micVivox': (),
         'masterFadeVivox': ()}
        defMasterVolume = 0.5
        defCategoryVolumes = {'music': 0.5,
         'masterVivox': 0.7,
         'micVivox': 0.4}
        userPrefs = Settings.g_instance.userPrefs
        soundModeName = SoundModes.DEFAULT_MODE_NAME
        nationalMapping = None
        self.__soundModes = None
        if not userPrefs.has_key(Settings.KEY_SOUND_PREFERENCES):
            userPrefs.write(Settings.KEY_SOUND_PREFERENCES, '')
            self.__masterVolume = defMasterVolume
            for categoryName in self.__categories.keys():
                self.__volumeByCategory[categoryName] = defCategoryVolumes.get(categoryName, 1.0)

            self.savePreferences()
        else:
            ds = userPrefs[Settings.KEY_SOUND_PREFERENCES]
            self.__masterVolume = ds.readFloat('masterVolume', defMasterVolume)
            for categoryName in self.__categories.keys():
                volume = ds.readFloat('volume_' + categoryName, defCategoryVolumes.get(categoryName, 1.0))
                self.__volumeByCategory[categoryName] = volume

            soundModeSec = ds['soundMode']
            if soundModeSec is not None:
                soundModeName = soundModeSec.asString
                if soundModeName == '':
                    soundModeName = SoundModes.DEFAULT_MODE_NAME
                    if ds['soundMode'].has_key('nationalPreset'):
                        nationalMapping = ds.readString('soundMode/nationalPreset', '')
                    else:
                        nationsSec = soundModeSec['nations']
                        if nationsSec is not None:
                            nationalMapping = {}
                            for nation, sec in nationsSec.items():
                                nationalMapping[nation] = sec.asString

        self.__soundModes = SoundModes(SoundModes.DEFAULT_MODE_NAME)
        if isinstance(nationalMapping, str):
            self.__soundModes.setNationalMappingByPreset(nationalMapping)
        elif isinstance(nationalMapping, dict):
            self.__soundModes.setNationalMapping(nationalMapping)
        else:
            self.__soundModes.setNationalMappingByMode(soundModeName)
        self.applyPreferences()
        self.__muteCallbackID = BigWorld.callback(0.25, self.__muteByWindowVisibility)
        self.defaultGroupList = []
        settings = ResMgr.openSection('scripts/arena_defs/_default_.xml/preloadSoundGroups')
        if settings is not None:
            self.defaultGroupList = settings.readStrings('groupName')
        if FMOD.enabled:
            for sg in self.defaultGroupList:
                result = FMOD.WG_loadSoundGroup(sg)
                if not result:
                    LOG_NOTE('Loading failed for default sound group ', sg)

            FMOD.WG_unloadAll()
        g_replayEvents.onMuteSound += self.__onReplayMute
Example #15
0
    def __init__(self):
        self.__enableStatus = SOUND_ENABLE_STATUS_DEFAULT
        self.__volumeByCategory = {}
        self.__masterVolume = 1.0
        self.__isWindowVisible = BigWorld.isWindowVisible()
        self.__handleInside = None
        self.__handleOutside = None
        self.__activeStinger = None
        self.__activeTrack = None
        self.__activeStingerPriority = None
        self.__muffled = False
        self.__muffledByReplay = False
        self.__states = []
        from gui.app_loader import g_appLoader
        self.__spaceID = g_appLoader.getSpaceID()
        PlayerEvents.g_playerEvents.onAvatarReady += self.onAvatarReady
        self.__categories = {
            'vehicles': ('outside/vehicles', 'vehicles'),
            'effects':
            ('hits', 'outside/hits', 'inside/weapons', 'outside/weapons',
             'outside/environment', 'battle_gui'),
            'gui': ('gui', 'ingame_voice'),
            'music': ('music', ),
            'ambient': ('outside/ambient', 'hangar_v2', 'ambientUR'),
            'masterVivox': (),
            'micVivox': (),
            'masterFadeVivox': ()
        }
        defCategoryVolumes = {
            'music': 0.5,
            'masterVivox': 0.7,
            'micVivox': 0.4
        }
        userPrefs = Settings.g_instance.userPrefs
        soundModeName = SoundModes.DEFAULT_MODE_NAME
        nationalMapping = None
        self.__soundModes = None
        if not userPrefs.has_key(Settings.KEY_SOUND_PREFERENCES):
            userPrefs.write(Settings.KEY_SOUND_PREFERENCES, '')
            self.__masterVolume = MASTER_VOLUME_DEFAULT
            for categoryName in self.__categories.iterkeys():
                self.__volumeByCategory[categoryName] = defCategoryVolumes.get(
                    categoryName, 1.0)

            self.savePreferences()
        else:
            ds = userPrefs[Settings.KEY_SOUND_PREFERENCES]
            self.__enableStatus = ds.readInt('enable',
                                             SOUND_ENABLE_STATUS_DEFAULT)
            self.__masterVolume = ds.readFloat('masterVolume',
                                               MASTER_VOLUME_DEFAULT)
            self.__volumeByCategory['music_hangar'] = ds.readFloat(
                'volume_music_hangar', 1.0)
            self.__volumeByCategory['voice'] = ds.readFloat(
                'volume_voice', 1.0)
            self.__volumeByCategory['ev_ambient'] = ds.readFloat(
                'volume_ev_ambient', 0.8)
            self.__volumeByCategory['ev_effects'] = ds.readFloat(
                'volume_ev_effects', 0.8)
            self.__volumeByCategory['ev_gui'] = ds.readFloat(
                'volume_ev_gui', 0.8)
            self.__volumeByCategory['ev_music'] = ds.readFloat(
                'volume_ev_music', 0.8)
            self.__volumeByCategory['ev_vehicles'] = ds.readFloat(
                'volume_ev_vehicles', 0.8)
            self.__volumeByCategory['ev_voice'] = ds.readFloat(
                'volume_ev_voice', 0.8)
            for categoryName in self.__categories.iterkeys():
                volume = ds.readFloat(
                    'volume_' + categoryName,
                    defCategoryVolumes.get(categoryName, 1.0))
                self.__volumeByCategory[categoryName] = volume

            soundModeSec = ds['soundMode']
            if soundModeSec is not None:
                soundModeName = soundModeSec.asString
                if soundModeName == '':
                    soundModeName = SoundModes.DEFAULT_MODE_NAME
                    if ds['soundMode'].has_key('nationalPreset'):
                        nationalMapping = ds.readString(
                            'soundMode/nationalPreset', '')
                    else:
                        nationsSec = soundModeSec['nations']
                        if nationsSec is not None:
                            nationalMapping = {}
                            for nation, sec in nationsSec.items():
                                nationalMapping[nation] = sec.asString

        self.__soundModes = SoundModes(SoundModes.DEFAULT_MODE_NAME)
        if isinstance(nationalMapping, str):
            self.__soundModes.setNationalMappingByPreset(nationalMapping)
        elif isinstance(nationalMapping, dict):
            self.__soundModes.setNationalMapping(nationalMapping)
        else:
            self.__soundModes.setNationalMappingByMode(soundModeName)
        self.applyPreferences()
        self.__muteCallbackID = BigWorld.callback(
            0.25, self.__muteByWindowVisibility)
        g_replayEvents.onMuteSound += self.__onReplayMute
        g_appLoader.onGUISpaceEntered += self.__onGUISpaceEntered
        return