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
|
import time
|
||||||
from .FFmpegAudioPlayer import FFmpegAudioPlayerFactory
|
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():
|
class AudioPlayerFactory():
|
||||||
AUDIOPLAYER_FFMPEG = 1
|
AUDIOPLAYER_FFMPEG = 1
|
||||||
|
|
||||||
@ -33,7 +51,6 @@ class AntiSpam():
|
|||||||
|
|
||||||
self.LastClips = dict()
|
self.LastClips = dict()
|
||||||
self.DisabledTime = None
|
self.DisabledTime = None
|
||||||
self.SaidHint = False
|
|
||||||
|
|
||||||
def CheckAntiSpam(self, player):
|
def CheckAntiSpam(self, player):
|
||||||
if self.DisabledTime and self.DisabledTime > self.Torchlight().Master.Loop.time() and \
|
if self.DisabledTime and self.DisabledTime > self.Torchlight().Master.Loop.time() and \
|
||||||
@ -75,7 +92,7 @@ class AntiSpam():
|
|||||||
|
|
||||||
def OnPlay(self, clip):
|
def OnPlay(self, clip):
|
||||||
Now = self.Torchlight().Master.Loop.time()
|
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
|
HasDominant = False
|
||||||
for Key, Clip in self.LastClips.items():
|
for Key, Clip in self.LastClips.items():
|
||||||
@ -100,7 +117,6 @@ class AntiSpam():
|
|||||||
self.LastClips[clip]["dominant"] = False
|
self.LastClips[clip]["dominant"] = False
|
||||||
|
|
||||||
def OnUpdate(self, clip, old_position, new_position):
|
def OnUpdate(self, clip, old_position, new_position):
|
||||||
Delta = abs(new_position - old_position)
|
|
||||||
if clip not in self.LastClips:
|
if clip not in self.LastClips:
|
||||||
if self.Logger.isEnabledFor(logging.DEBUG):
|
if self.Logger.isEnabledFor(logging.DEBUG):
|
||||||
self.Logger.debug(
|
self.Logger.debug(
|
||||||
@ -110,6 +126,12 @@ class AntiSpam():
|
|||||||
)
|
)
|
||||||
return
|
return
|
||||||
Clip = self.LastClips[clip]
|
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"]:
|
if Delta <= 0.0 or not Clip["dominant"]:
|
||||||
return
|
return
|
||||||
@ -151,7 +173,7 @@ class Advertiser():
|
|||||||
|
|
||||||
def OnPlay(self, clip):
|
def OnPlay(self, clip):
|
||||||
Now = self.Torchlight().Master.Loop.time()
|
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
|
HasDominant = False
|
||||||
for Key, Clip in self.LastClips.items():
|
for Key, Clip in self.LastClips.items():
|
||||||
@ -176,10 +198,15 @@ class Advertiser():
|
|||||||
self.LastClips[clip]["dominant"] = False
|
self.LastClips[clip]["dominant"] = False
|
||||||
|
|
||||||
def OnUpdate(self, clip, old_position, new_position):
|
def OnUpdate(self, clip, old_position, new_position):
|
||||||
Delta = abs(new_position - old_position)
|
|
||||||
if clip not in self.LastClips:
|
if clip not in self.LastClips:
|
||||||
return
|
return
|
||||||
Clip = self.LastClips[clip]
|
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"]:
|
if Delta <= 0.0 or not Clip["dominant"]:
|
||||||
return
|
return
|
||||||
@ -270,7 +297,12 @@ class AudioManager():
|
|||||||
if not self.CheckLimits(player):
|
if not self.CheckLimits(player):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
Clip = AudioClip(self, player, uri, _type)
|
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)
|
self.AudioClips.append(Clip)
|
||||||
|
|
||||||
if not player.Access or player.Access["level"] < self.Torchlight().Config["AntiSpam"]["ImmunityLevel"]:
|
if not player.Access or player.Access["level"] < self.Torchlight().Config["AntiSpam"]["ImmunityLevel"]:
|
||||||
@ -302,6 +334,7 @@ class AudioClip():
|
|||||||
self.Type = _type
|
self.Type = _type
|
||||||
self.URI = uri
|
self.URI = uri
|
||||||
self.LastPosition = None
|
self.LastPosition = None
|
||||||
|
self.LastUpdateRealtime = None
|
||||||
self.StartedAt = None
|
self.StartedAt = None
|
||||||
self.StopHinted = False
|
self.StopHinted = False
|
||||||
self.Stops = set()
|
self.Stops = set()
|
||||||
@ -332,6 +365,7 @@ class AudioClip():
|
|||||||
self.Player.Storage["Audio"]["LastUse"] = self.Torchlight().Master.Loop.time()
|
self.Player.Storage["Audio"]["LastUse"] = self.Torchlight().Master.Loop.time()
|
||||||
self.Player.Storage["Audio"]["LastUseLength"] = 0.0
|
self.Player.Storage["Audio"]["LastUseLength"] = 0.0
|
||||||
self.StartedAt = self.Player.Storage["Audio"]["LastUse"]
|
self.StartedAt = self.Player.Storage["Audio"]["LastUse"]
|
||||||
|
self.LastUpdateRealtime = time.time()
|
||||||
self.StopHinted = False
|
self.StopHinted = False
|
||||||
|
|
||||||
def OnStop(self):
|
def OnStop(self):
|
||||||
@ -340,9 +374,7 @@ class AudioClip():
|
|||||||
self.Master.AudioClips.remove(self)
|
self.Master.AudioClips.remove(self)
|
||||||
|
|
||||||
played = None
|
played = None
|
||||||
if self.LastPosition is not None:
|
if self.AudioPlayer and self.AudioPlayer.StartedPlaying is not None:
|
||||||
played = self.LastPosition
|
|
||||||
elif self.AudioPlayer and self.AudioPlayer.StartedPlaying is not None:
|
|
||||||
elapsed = time.time() - self.AudioPlayer.StartedPlaying
|
elapsed = time.time() - self.AudioPlayer.StartedPlaying
|
||||||
if self.AudioPlayer.Seconds:
|
if self.AudioPlayer.Seconds:
|
||||||
elapsed = min(elapsed, self.AudioPlayer.Seconds)
|
elapsed = min(elapsed, self.AudioPlayer.Seconds)
|
||||||
@ -367,7 +399,13 @@ class AudioClip():
|
|||||||
del self.AudioPlayer
|
del self.AudioPlayer
|
||||||
|
|
||||||
def OnUpdate(self, old_position, new_position):
|
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
|
self.LastPosition = new_position
|
||||||
|
|
||||||
if Delta <= 0.0:
|
if Delta <= 0.0:
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user