Update torchlight_changes_unloze/torchlight3/Torchlight/AudioManager.py
This commit is contained in:
parent
e607ff3e0f
commit
ff3dff14a6
@ -6,6 +6,24 @@ import math
|
||||
import time
|
||||
from .FFmpegAudioPlayer import FFmpegAudioPlayerFactory
|
||||
|
||||
def _progress_delta(old_position, new_position, elapsed = None, jitter = 0.25):
|
||||
try:
|
||||
delta = abs(float(new_position) - float(old_position))
|
||||
except (TypeError, ValueError):
|
||||
return 0.0
|
||||
if not math.isfinite(delta):
|
||||
return 0.0
|
||||
if elapsed is not None:
|
||||
try:
|
||||
elapsed = float(elapsed)
|
||||
except (TypeError, ValueError):
|
||||
return 0.0
|
||||
if not math.isfinite(elapsed) or elapsed < 0.0:
|
||||
return 0.0
|
||||
delta = min(delta, elapsed + jitter)
|
||||
return delta
|
||||
|
||||
|
||||
class AudioPlayerFactory():
|
||||
AUDIOPLAYER_FFMPEG = 1
|
||||
|
||||
@ -33,7 +51,6 @@ class AntiSpam():
|
||||
|
||||
self.LastClips = dict()
|
||||
self.DisabledTime = None
|
||||
self.SaidHint = False
|
||||
|
||||
def CheckAntiSpam(self, player):
|
||||
if self.DisabledTime and self.DisabledTime > self.Torchlight().Master.Loop.time() and \
|
||||
@ -75,7 +92,7 @@ class AntiSpam():
|
||||
|
||||
def OnPlay(self, clip):
|
||||
Now = self.Torchlight().Master.Loop.time()
|
||||
self.LastClips[clip] = dict({"timestamp": Now, "duration": 0.0, "dominant": False, "active": True})
|
||||
self.LastClips[clip] = dict({"timestamp": Now, "duration": 0.0, "dominant": False, "active": True, "last_update_realtime": time.time()})
|
||||
|
||||
HasDominant = False
|
||||
for Key, Clip in self.LastClips.items():
|
||||
@ -100,7 +117,6 @@ class AntiSpam():
|
||||
self.LastClips[clip]["dominant"] = False
|
||||
|
||||
def OnUpdate(self, clip, old_position, new_position):
|
||||
Delta = abs(new_position - old_position)
|
||||
if clip not in self.LastClips:
|
||||
if self.Logger.isEnabledFor(logging.DEBUG):
|
||||
self.Logger.debug(
|
||||
@ -110,6 +126,12 @@ class AntiSpam():
|
||||
)
|
||||
return
|
||||
Clip = self.LastClips[clip]
|
||||
now = time.time()
|
||||
elapsed = None
|
||||
if Clip.get("last_update_realtime") is not None:
|
||||
elapsed = now - Clip["last_update_realtime"]
|
||||
Clip["last_update_realtime"] = now
|
||||
Delta = _progress_delta(old_position, new_position, elapsed = elapsed)
|
||||
|
||||
if Delta <= 0.0 or not Clip["dominant"]:
|
||||
return
|
||||
@ -151,7 +173,7 @@ class Advertiser():
|
||||
|
||||
def OnPlay(self, clip):
|
||||
Now = self.Torchlight().Master.Loop.time()
|
||||
self.LastClips[clip] = dict({"timestamp": Now, "duration": 0.0, "dominant": False, "active": True, "hinted": False})
|
||||
self.LastClips[clip] = dict({"timestamp": Now, "duration": 0.0, "dominant": False, "active": True, "hinted": False, "last_update_realtime": time.time()})
|
||||
|
||||
HasDominant = False
|
||||
for Key, Clip in self.LastClips.items():
|
||||
@ -176,10 +198,15 @@ class Advertiser():
|
||||
self.LastClips[clip]["dominant"] = False
|
||||
|
||||
def OnUpdate(self, clip, old_position, new_position):
|
||||
Delta = abs(new_position - old_position)
|
||||
if clip not in self.LastClips:
|
||||
return
|
||||
Clip = self.LastClips[clip]
|
||||
now = time.time()
|
||||
elapsed = None
|
||||
if Clip.get("last_update_realtime") is not None:
|
||||
elapsed = now - Clip["last_update_realtime"]
|
||||
Clip["last_update_realtime"] = now
|
||||
Delta = _progress_delta(old_position, new_position, elapsed = elapsed)
|
||||
|
||||
if Delta <= 0.0 or not Clip["dominant"]:
|
||||
return
|
||||
@ -270,7 +297,12 @@ class AudioManager():
|
||||
if not self.CheckLimits(player):
|
||||
return None
|
||||
|
||||
try:
|
||||
Clip = AudioClip(self, player, uri, _type)
|
||||
except ValueError as ex:
|
||||
self.Logger.warning("Rejected unsupported audio player type %r: %s", _type, ex)
|
||||
self.Torchlight().SayPrivate(player, "Unsupported audio player type.")
|
||||
return None
|
||||
self.AudioClips.append(Clip)
|
||||
|
||||
if not player.Access or player.Access["level"] < self.Torchlight().Config["AntiSpam"]["ImmunityLevel"]:
|
||||
@ -302,6 +334,7 @@ class AudioClip():
|
||||
self.Type = _type
|
||||
self.URI = uri
|
||||
self.LastPosition = None
|
||||
self.LastUpdateRealtime = None
|
||||
self.StartedAt = None
|
||||
self.StopHinted = False
|
||||
self.Stops = set()
|
||||
@ -332,6 +365,7 @@ class AudioClip():
|
||||
self.Player.Storage["Audio"]["LastUse"] = self.Torchlight().Master.Loop.time()
|
||||
self.Player.Storage["Audio"]["LastUseLength"] = 0.0
|
||||
self.StartedAt = self.Player.Storage["Audio"]["LastUse"]
|
||||
self.LastUpdateRealtime = time.time()
|
||||
self.StopHinted = False
|
||||
|
||||
def OnStop(self):
|
||||
@ -340,9 +374,7 @@ class AudioClip():
|
||||
self.Master.AudioClips.remove(self)
|
||||
|
||||
played = None
|
||||
if self.LastPosition is not None:
|
||||
played = self.LastPosition
|
||||
elif self.AudioPlayer and self.AudioPlayer.StartedPlaying is not None:
|
||||
if self.AudioPlayer and self.AudioPlayer.StartedPlaying is not None:
|
||||
elapsed = time.time() - self.AudioPlayer.StartedPlaying
|
||||
if self.AudioPlayer.Seconds:
|
||||
elapsed = min(elapsed, self.AudioPlayer.Seconds)
|
||||
@ -367,7 +399,13 @@ class AudioClip():
|
||||
del self.AudioPlayer
|
||||
|
||||
def OnUpdate(self, old_position, new_position):
|
||||
Delta = abs(new_position - old_position)
|
||||
now = time.time()
|
||||
elapsed = None
|
||||
if self.LastUpdateRealtime is not None:
|
||||
elapsed = now - self.LastUpdateRealtime
|
||||
self.LastUpdateRealtime = now
|
||||
|
||||
Delta = _progress_delta(old_position, new_position, elapsed = elapsed)
|
||||
self.LastPosition = new_position
|
||||
|
||||
if Delta <= 0.0:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user