ducking improved #68

This commit is contained in:
Terry Geng 2020-02-09 11:21:46 +08:00
parent 11b27ede02
commit ef9ac57d8e
2 changed files with 35 additions and 3 deletions

View File

@ -36,6 +36,7 @@ max_track_duration = 60
# If ducking is enabled, the bot will automatically attenuate its volume when someone is talking.
ducking = False
ducking_volume = 0.05
ducking_threshold = 3000
[webinterface]
enabled = False
@ -81,6 +82,9 @@ user_unban = userunban
url_ban = urlban
url_unban = urlunban
ducking = duck
ducking_threshold = duckthres
#command to reload the ban list
reload = reload

View File

@ -168,7 +168,8 @@ class MumbleBot:
self.on_ducking = False
if var.config.getboolean("bot", "ducking"):
self.is_ducking = True
self.ducking_volume = var.config.getfloat("bot", "ducking_volume")
self.ducking_volume = var.config.getfloat("bot", "ducking_volume", fallback=0.05)
self.ducking_threshold = var.config.getfloat("bot", "ducking_threshold", fallback=3000)
self.mumble.callbacks.set_callback(pymumble.constants.PYMUMBLE_CLBK_SOUNDRECEIVED, self.ducking_sound_received)
self.mumble.set_receive_sound(True)
@ -526,6 +527,30 @@ class MumbleBot:
self.send_msg(var.config.get(
'strings', 'current_volume') % int(self.volume_set * 100), text)
elif command == var.config.get('command', 'ducking'):
if parameter == "" or parameter == "on":
self.is_ducking = True
self.ducking_volume = var.config.getfloat("bot", "ducking_volume", fallback=0.05)
self.ducking_threshold = var.config.getint("bot", "ducking_threshold", fallback=3000)
self.mumble.callbacks.set_callback(pymumble.constants.PYMUMBLE_CLBK_SOUNDRECEIVED,
self.ducking_sound_received)
self.mumble.set_receive_sound(True)
logging.info('bot: ducking is on')
msg = "Ducking on."
self.send_msg(msg, text)
elif parameter == "off":
self.is_ducking = False
self.mumble.set_receive_sound(False)
msg = "Ducking off."
logging.info('bot: ducking is off')
self.send_msg(msg, text)
elif command == var.config.get('command', 'ducking_threshold'):
if parameter is not None and parameter.isdigit():
self.ducking_threshold = int(parameter)
msg = "Ducking threshold set to %d." % self.ducking_threshold
self.send_msg(msg, text)
elif command == var.config.get('command', 'current_music'):
if len(var.playlist.playlist) > 0:
current_music = var.playlist.current_item()
@ -882,8 +907,11 @@ class MumbleBot:
self.last_volume_cycle_time = time.time()
def ducking_sound_received(self, user, sound):
self.on_ducking = True
self.ducking_release = time.time() + 1 # ducking release after 0.5s
if audioop.rms(sound.pcm, 2) > self.ducking_threshold:
print("ducking trigger")
self.on_ducking = True
self.ducking_release = time.time() + 1 # ducking release after 1s
@staticmethod
# Parse the html from the message to get the URL