local _ local addonName, platerInternal = ... local Plater = _G.Plater local StopSound = StopSound local PlaySoundFile = PlaySoundFile local GetTime = GetTime local validChannels = { ["Master"] = "Master", ["Music"] = "Music", ["SFX"] = "SFX", ["Ambience"] = "Ambience", ["Dialog"] = "Dialog", } local defaultAudioChannel = "Master" platerInternal.LatestTimeForAudioPlayedByID = {} function platerInternal.Audio.GetAudioCueForSpell(spellId) return Plater.db.profile.cast_audiocues[spellId] end ---player an audio cue for a cast bar ---@param spellId number ---@param audioFilePath string? function platerInternal.Audio.PlaySoundForCastStart(spellId, audioFilePath) local audioCue = audioFilePath or platerInternal.Audio.GetAudioCueForSpell(spellId) if (audioCue) then if (((platerInternal.LatestTimeForAudioPlayedByID[spellId] or 0) + Plater.db.profile.cast_audiocue_cooldown) > GetTime()) then return -- do not play, was played already within the last x seconds, defined on Plater.db.profile.cast_audiocue_cooldown end if (platerInternal.LatestHandleForAudioPlayed) then StopSound(platerInternal.LatestHandleForAudioPlayed, 500) end local channel = validChannels[Plater.db.cast_audiocues_channel] or defaultAudioChannel local bWillPlay, soundHandle = PlaySoundFile(audioCue, channel) if (bWillPlay) then platerInternal.LatestHandleForAudioPlayed = soundHandle platerInternal.LatestTimeForAudioPlayedByID[spellId] = GetTime() end end end --priority for user audio >> play defined in the cast colors tab >> player defined in the script function Plater.PlayAudioForScript(canUseScriptAudio, audioFilePath, envTable) --exposed --user set an audio to play into the Cast Colors tab in the options panel local spellId = envTable._SpellID --audio set in the cast colors tab, if there are an audio set there for this spell, play it local audioByUser = platerInternal.Audio.GetAudioCueForSpell(envTable._SpellID) if (audioByUser) then platerInternal.Audio.PlaySoundForCastStart(spellId) return end --audio set in the script if (canUseScriptAudio and audioFilePath and type(audioFilePath) == "string") then platerInternal.Audio.PlaySoundForCastStart(spellId, audioFilePath) end end