From 15e99a09cb41549c6ae7b1edad6f8faa27d2c1d3 Mon Sep 17 00:00:00 2001 From: Terry Geng Date: Mon, 2 Mar 2020 21:54:13 +0800 Subject: [PATCH] chore: add a debug command 'rtrms' to display current rms of the speech in the console (which can help setting the ducking threshold) --- command.py | 8 +++++++- mumbleBot.py | 16 +++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/command.py b/command.py index a807df7..70b0154 100644 --- a/command.py +++ b/command.py @@ -54,6 +54,9 @@ def register_all_commands(bot): bot.register_command(constants.commands('mode'), cmd_mode) bot.register_command(constants.commands('drop_database'), cmd_drop_database) + # Just for debug use + bot.register_command('rtrms', cmd_real_time_rms) + def send_multi_lines(bot, lines, text): global log @@ -762,10 +765,13 @@ def cmd_mode(bot, user, text, command, parameter): var.playlist.randomize() bot.launch_music(0) - def cmd_drop_database(bot, user, text, command, parameter): global log var.db.drop_table() var.db = Database(var.dbfile) bot.send_msg(constants.strings('database_dropped'), text) + +# Just for debug use +def cmd_real_time_rms(bot, user, text, command, parameter): + bot._display_rms = not bot._display_rms diff --git a/mumbleBot.py b/mumbleBot.py index 4ca7a3d..8ce8fa7 100644 --- a/mumbleBot.py +++ b/mumbleBot.py @@ -183,6 +183,10 @@ class MumbleBot: self.ducking_sound_received) self.mumble.set_receive_sound(True) + # Debug use + self._display_rms = False + self._max_rms = 0 + # Set the CTRL+C shortcut def ctrl_caught(self, signal, frame): @@ -590,6 +594,7 @@ class MumbleBot: if self.on_ducking and self.ducking_release < time.time(): self._clear_pymumble_soundqueue() self.on_ducking = False + self._max_rms = 0 if delta > 0.001: if self.is_ducking and self.on_ducking: @@ -600,7 +605,16 @@ class MumbleBot: self.last_volume_cycle_time = time.time() def ducking_sound_received(self, user, sound): - if audioop.rms(sound.pcm, 2) > self.ducking_threshold: + rms = audioop.rms(sound.pcm, 2) + self._max_rms = max(rms, self._max_rms) + if self._display_rms: + if rms < self.ducking_threshold: + print('%6d/%6d ' % (rms, self._max_rms) + '-'*int(rms/200), end='\r') + else: + print('%6d/%6d ' % (rms, self._max_rms) + '-'*int(self.ducking_threshold/200) \ + + '+'*int((rms - self.ducking_threshold)/200), end='\r') + + if rms > self.ducking_threshold: if self.on_ducking is False: self.log.debug("bot: ducking triggered") self.on_ducking = True