From dc5a22bc0a636549cc5ee500b9bb916865c357c3 Mon Sep 17 00:00:00 2001 From: Dmytro Bogovych Date: Tue, 5 Sep 2023 16:48:30 +0300 Subject: [PATCH] - prefix & suffix reference audio with silence --- src/agent_config.py | 15 ++++++++++++--- src/agent_gsm.py | 24 ++++++++++++++++++------ 2 files changed, 30 insertions(+), 9 deletions(-) diff --git a/src/agent_config.py b/src/agent_config.py index 177324b..506e676 100644 --- a/src/agent_config.py +++ b/src/agent_config.py @@ -50,6 +50,10 @@ class AgentConfig: # Task limit per single run TaskLimit: int = 10000000 + + # How to modify reference audio before play + SilenceSuffix: int = 0 + SilencePrefix: int = 0 # Task name (used for answering only) TaskName: str = None @@ -88,9 +92,14 @@ class AgentConfig: if config['speech_detector']: self.UseSilenceEraser = False - if 'bluetooth_mac' in config['audio']: - self.BT_MAC = config['audio']['bluetooth_mac'] - + if 'audio' in config: + audio = config['audio'] + if 'bluetooth_mac' in audio: + self.BT_MAC = audio['bluetooth_mac'] + if 'silence_suffix' in audio: + self.SilenceSuffix = audio['silence_suffix'] + if 'silence_prefix' in audio: + self.SilencePrefix = audio['silence_prefix'] # Logging settings if 'log' in config: diff --git a/src/agent_gsm.py b/src/agent_gsm.py index 2103b69..cf2b56b 100644 --- a/src/agent_gsm.py +++ b/src/agent_gsm.py @@ -239,17 +239,22 @@ def make_call(target: str): if CONFIG.PreparedReferenceAudio.exists(): os.remove(CONFIG.PreparedReferenceAudio) utils.prepare_reference_file(fname=str(CONFIG.ReferenceAudio), - silence_prefix_length=10.0, silence_suffix_length=5.0, + silence_prefix_length=CONFIG.SilencePrefix, + silence_suffix_length=CONFIG.SilenceSuffix, output_fname=str(CONFIG.PreparedReferenceAudio)) # Find duration of prepared reference file - reference_length = round(utils.get_wav_length(CONFIG.PreparedReferenceAudio), 3) - utils.log(f' Done. Length of prepared reference audio file: {reference_length}s') + ref_time_length = round(utils.get_wav_length(CONFIG.PreparedReferenceAudio), 3) + utils.log(f' Done. Length of prepared reference audio file: {ref_time_length}s') # Compose a command # utils.close_log_file() try: - bt_call_controller.run(play_file=CONFIG.PreparedReferenceAudio, record_file=CONFIG.RecordFile, timelimit_seconds=reference_length, target=target) + bt_call_controller.run(play_file=CONFIG.PreparedReferenceAudio, + record_file=CONFIG.RecordFile, + timelimit_seconds=ref_time_length, + target=target) + run_analyze(CONFIG.RecordFile, CONFIG.ReferenceAudio, target) except Exception as e: utils.log_error(f'BT I/O failed finally. Error: {str(e)}') @@ -258,8 +263,14 @@ def make_call(target: str): def perform_answerer(): global CALL_LIMIT + # Prepare answering file - this must be prepended with few seconds of silence which can be eatean by call setup procedure + utils.prepare_reference_file(fname=str(CONFIG.ReferenceAudio), + silence_prefix_length=CONFIG.SilencePrefix, + silence_suffix_length=CONFIG.SilenceSuffix, + output_fname=str(CONFIG.PreparedReferenceAudio)) + # Get reference audio duration in seconds - ref_time_length = round(utils.get_wav_length(CONFIG.ReferenceAudio), 3) + ref_time_length = round(utils.get_wav_length(CONFIG.PreparedReferenceAudio), 3) # Setup analyzer script # Run answering script @@ -270,7 +281,7 @@ def perform_answerer(): os.remove(CONFIG.RecordFile) try: - bt_call_controller.run(play_file=CONFIG.ReferenceAudio, + bt_call_controller.run(play_file=CONFIG.PreparedReferenceAudio, record_file=CONFIG.RecordFile, timelimit_seconds=int(ref_time_length), target=None) @@ -284,6 +295,7 @@ def perform_answerer(): # Increase counter of attempts attempt_idx += 1 + def run_caller_task(t): global CURRENT_TASK