From ef9ac57d8ecf72963b2824391b046d0761600062 Mon Sep 17 00:00:00 2001 From: Terry Geng Date: Sun, 9 Feb 2020 11:21:46 +0800 Subject: [PATCH] ducking improved #68 --- configuration.default.ini | 4 ++++ mumbleBot.py | 34 +++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/configuration.default.ini b/configuration.default.ini index b4d395d..126e5d6 100644 --- a/configuration.default.ini +++ b/configuration.default.ini @@ -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 diff --git a/mumbleBot.py b/mumbleBot.py index b875107..642c589 100644 --- a/mumbleBot.py +++ b/mumbleBot.py @@ -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