diff --git a/multilang_translator/backend_controller/broadcaster_config.py b/multilang_translator/backend_controller/broadcaster_config.py index 52a3922..9493f4a 100644 --- a/multilang_translator/backend_controller/broadcaster_config.py +++ b/multilang_translator/backend_controller/broadcaster_config.py @@ -90,8 +90,6 @@ def broadcaster_config(): print("\n".join(ret)) -if __name__ == "__main__": - broadcaster_config() diff --git a/multilang_translator/backend_controller/broadcaster_copy_files.py b/multilang_translator/backend_controller/broadcaster_copy_files.py new file mode 100644 index 0000000..83e48c9 --- /dev/null +++ b/multilang_translator/backend_controller/broadcaster_copy_files.py @@ -0,0 +1,7 @@ +import shutil +import os +BROADCASTER_DEFAULT_DIR = '/media/pstruebi/2C93-FED6' + +def copy_to_broadcaster(filepath, broadcaster_dir = BROADCASTER_DEFAULT_DIR): + filename = os.path.basename(filepath) + shutil.copy(filepath, f'{broadcaster_dir}/{filename}') \ No newline at end of file diff --git a/multilang_translator/backend_controller/broadcaster_play_once.py b/multilang_translator/backend_controller/broadcaster_play_once.py index 26d8a2c..874b13b 100644 --- a/multilang_translator/backend_controller/broadcaster_play_once.py +++ b/multilang_translator/backend_controller/broadcaster_play_once.py @@ -9,15 +9,3 @@ def broadcaster_play_file(broadcast_ch, file): ret = write_to_serial_read_respone(serial_port, f"nac file select_play_once {file} {broadcast_ch} 0 0", timeout=0.1) print("\n".join(ret)) - - -if __name__ == "__main__": - broadcast_ch = 0 - file = "left24kHz_48kbps.lc3" - broadcaster_play_file(broadcast_ch, file) - - time.sleep(1) - broadcast_ch = 1 - file = "right-channel_24kHz_left_48kbps_10ms.lc3" - - broadcaster_play_file(broadcast_ch, file) diff --git a/multilang_translator/main.py b/multilang_translator/main.py index 0dfa84a..c5f6b44 100644 --- a/multilang_translator/main.py +++ b/multilang_translator/main.py @@ -13,9 +13,15 @@ from examples import custom_style_2 import os from text_to_speech import text_to_speech, resample from translator import llm_translator +from backend_controller.broadcaster_config import broadcaster_config +from backend_controller.broadcaster_play_once import broadcaster_play_file +from backend_controller.broadcaster_copy_files import copy_to_broadcaster + from encode import encode_lc3 +import shutil ANNOUNCEMENT_DIR = os.path.join(os.path.dirname(__file__), 'announcements') + os.makedirs(ANNOUNCEMENT_DIR, exist_ok=True) def synthesize_resample_encode(text, tts_model, output_file): @@ -25,16 +31,37 @@ def synthesize_resample_encode(text, tts_model, output_file): def announcement_from_german_text(text_de): - synthesize_resample_encode(text_de, 'de_DE-kerstin-low', f'{ANNOUNCEMENT_DIR}/announcement_de.wav') + + files = { + "de": f"{ANNOUNCEMENT_DIR}/announcement_de", + "en": f"{ANNOUNCEMENT_DIR}/announcement_en", + "fr": f"{ANNOUNCEMENT_DIR}/announcement_fr", + "es": f"{ANNOUNCEMENT_DIR}/announcement_es", + } + + synthesize_resample_encode(text_de, 'de_DE-kerstin-low', f'{files['de']}.wav') text_en = llm_translator.translator_de_en(text_de) - synthesize_resample_encode(text_en, 'en_US-lessac-medium', f'{ANNOUNCEMENT_DIR}/announcement_en.wav') + synthesize_resample_encode(text_en, 'en_US-lessac-medium', f'{files['en']}.wav') text_fr = llm_translator.translator_de_fr(text_de) - synthesize_resample_encode(text_fr, 'fr_FR-siwis-medium', f'{ANNOUNCEMENT_DIR}/announcement_fr.wav') + synthesize_resample_encode(text_fr, 'fr_FR-siwis-medium', f'{files['fr']}.wav') - text_fr = llm_translator.translator_de_es(text_de) - synthesize_resample_encode(text_fr, 'es_ES-sharvard-medium', f'{ANNOUNCEMENT_DIR}/announcement_fr.wav') + text_es = llm_translator.translator_de_es(text_de) + synthesize_resample_encode(text_es, 'es_ES-sharvard-medium', f'{files['es']}.wav') + + # Transfer the files to broadcaster memory + start = time.time() + for val in files.values(): + copy_to_broadcaster(f'{ANNOUNCEMENT_DIR}/{val}.lc3') + log.info("Transfering files to broadcaster took %s s", round(time.time() - start, 3)) + + # Instruct the broadcaster to stream the files + for val in files.values(): + time.sleep(1) + broadcaster_play_file(f'{val}.lc3') + log.info("Starting all broadcasts %s s", round(time.time() - start, 3)) + # questions = [ # { @@ -59,5 +86,7 @@ if __name__ == '__main__': log.basicConfig(level=log.INFO) start= time.time() + broadcaster_config() + announcement_from_german_text(test_content.TESTSENTENCE_DE_RAINBOW) - print("Generating the announcement took", time.time() - start) \ No newline at end of file + print("Generating and starting the announcement took", time.time() - start) \ No newline at end of file diff --git a/tests/conftest.py b/tests/conftest.py new file mode 100644 index 0000000..2b7b98a --- /dev/null +++ b/tests/conftest.py @@ -0,0 +1,8 @@ +import logging as log + +# Set the logging level to DEBUG (most verbose) at the root logger +log.basicConfig( + level=log.INFO, + format='%(asctime)s [%(levelname)s] %(message)s', + datefmt='%Y-%m-%d %H:%M:%S' +) diff --git a/tests/test_backend.py b/tests/test_backend.py index e4f56db..94eb639 100644 --- a/tests/test_backend.py +++ b/tests/test_backend.py @@ -1,10 +1,23 @@ +import logging as log +import time +import os + from multilang_translator.backend_controller.broadcaster_config import broadcaster_config from multilang_translator.backend_controller.broadcaster_play_once import broadcaster_play_file +from multilang_translator.backend_controller.broadcaster_copy_files import copy_to_broadcaster +def test_copy_to_broadcaster(): + log.info("Current working directory is: " + os.getcwd()) + start = time.time() + copy_to_broadcaster('./tests/announcement_de.lc3') + log.info(f"Copy to broadcaster took {time.time() - start} seconds") + def test_config_broadcaster(): broadcaster_config() - broadcaster_play_file(0, 'announcement_de.wav') + broadcaster_play_file(0, 'announcement_de.lc3') def test_play_file(): - broadcaster_play_file(0, 'announcement_de.wav') + broadcaster_play_file(0, 'announcement_de.lc3') + + diff --git a/tests/test_translator.py b/tests/test_translator.py new file mode 100644 index 0000000..e5acbc1 --- /dev/null +++ b/tests/test_translator.py @@ -0,0 +1,20 @@ +from multilang_translator.translator.llm_translator import translator_de_en +from multilang_translator.translator.llm_translator import translator_de_fr +import time +import logging as log + +def test_translator(): + + TESTSENTENCE_DE_BROKER = 'Ein Broker (oder Makler) ist eine Person oder ein Unternehmen, das sich zwischen dem Kauf- und Verkaufsberechtigten einer Wirtschaftsgüter (z.B. Aktien, Optionen, Derivate, Währungen, Rohstoffe usw.) stellt und als Vermittler fungiert. Sein Hauptziel ist es, Transaktionen zu erleichtern und Geld für sich selbst zu verdienen.' + + start=time.time() + response = translator_de_en(TESTSENTENCE_DE_BROKER) + + log.info("First query took %s", time.time() - start) + log.info(response) + assert 'A broker (or agent) is a person or company' in response + + start=time.time() + response = translator_de_fr(TESTSENTENCE_DE_BROKER) + log.info("Second query took %s", time.time() - start) + log.info(response) \ No newline at end of file