refractoring and more tests

This commit is contained in:
2024-12-19 14:01:32 +01:00
parent daa2d92257
commit 5d2f0f4fdf
10 changed files with 185 additions and 122 deletions

View File

@@ -11,6 +11,9 @@ from examples import custom_style_2
import os
from copy import copy
import time
import logging as log
from .translator import llm_translator
from .text_to_speech import text_to_speech, resample
from .backend_controller.broadcaster_config import broadcaster_config
@@ -20,60 +23,71 @@ from .backend_controller.broadcaster_copy_files import copy_to_broadcaster
from .encode import encode_lc3
ANNOUNCEMENT_DIR = os.path.join(os.path.dirname(__file__), 'announcements')
N_MAX_BIS = 4
SAMPLING_RATE = int(8e3)
SAMPLING_RATE = int(16e3)
FRAME_DUR_MS = 10
BPS = int(16e3)
FILENAMES = {
"de": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_de",
"en": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_en",
"fr": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_fr",
"es": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_es",
"it": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_it",
BPS = int(32e3) # TODO test 16khz 16kbps
CONFIG = {
"de": {
"file": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_de",
"tts": 'de_DE-kerstin-low',
},
"en": {
"file": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_en",
"tts": 'en_US-lessac-medium'
},
"fr": {
"file": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_fr",
"tts": 'fr_FR-siwis-medium'
},
"es": {
"file": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_es",
"tts": 'es_ES-sharvard-medium'
},
"it": {
"file": f"{ANNOUNCEMENT_DIR}/announcement_{SAMPLING_RATE//1000}_{FRAME_DUR_MS}_{BPS//1000}_it",
"tts": 'it_IT-paola-medium'
}
}
os.makedirs(ANNOUNCEMENT_DIR, exist_ok=True)
def synthesize_resample_encode(text, tts_model, output_file):
text_to_speech.synthesize(text, tts_model, output_file)
audio_dur = text_to_speech.synthesize(text, tts_model, output_file)
resample.resample(output_file, output_file, target_rate=SAMPLING_RATE)
encode_lc3.encode_lc3(output_file, bps=BPS, frame_dur_ms=FRAME_DUR_MS)
return audio_dur
def translate_from_german_and_encode(text_de):
file = FILENAMES['de']
synthesize_resample_encode(text_de, 'de_DE-kerstin-low', f'{file}.wav')
config = copy(CONFIG)
base_lang = "de"
text_en = llm_translator.translator_de_en(text_de)
file = FILENAMES['en']
synthesize_resample_encode(text_en, 'en_US-lessac-medium', f'{file}.wav')
text_fr = llm_translator.translator_de_fr(text_de)
file = FILENAMES['fr']
synthesize_resample_encode(text_fr, 'fr_FR-siwis-medium', f'{file}.wav')
text_es = llm_translator.translator_de_es(text_de)
file = FILENAMES['es']
synthesize_resample_encode(text_es, 'es_ES-sharvard-medium', f'{file}.wav')
text_it = llm_translator.translator_de_it(text_de)
file = FILENAMES['it']
synthesize_resample_encode(text_it, 'it_IT-paola-medium', f'{file}.wav')
file = config[base_lang]["file"]
audio_dur_s [base_lang] = synthesize_resample_encode(text_de, config['de']["tts"], f'{file}.wav')
del config[base_lang]
audio_dur_s = {}
for key, val in config.items():
text = llm_translator.translate_de_to_x(key, text_de)
file = val['file']
audio_dur_s[key] = synthesize_resample_encode(text, val['tts'], f'{file}.wav')
return audio_dur_s
def announcement_from_german_text(text_de):
translate_from_german_and_encode(text_de)
audio_durs = translate_from_german_and_encode(text_de)
# Transfer the files to broadcaster memory
start = time.time()
for val in FILENAMES.values():
copy_to_broadcaster(f'{val}.lc3')
for val in CONFIG.values():
copy_to_broadcaster(f'{val["file"]}.lc3')
log.info("Transfering files to broadcaster took %s s", round(time.time() - start, 3))
# Instruct the broadcaster to stream the files
for i, val in enumerate(list(FILENAMES.values())[:N_MAX_BIS]):
time.sleep(1)
broadcaster_play_file(i, f'{os.path.basename(val)}.lc3')
for i, d in enumerate(list(CONFIG.items())):
key, val = d
broadcaster_play_file(i, f'{os.path.basename(val["file"])}.lc3')
time.sleep(audio_durs[key] + 1)
log.info("Starting all broadcasts %s s", round(time.time() - start, 3))
@@ -92,15 +106,3 @@ def announcement_from_german_text(text_de):
# answers = prompt(questions, style=custom_style_2)
# pprint(answers)
if __name__ == '__main__':
import time
from translator import test_content
import logging as log
log.basicConfig(level=log.INFO)
start= time.time()
#broadcaster_config()
announcement_from_german_text(test_content.TESTSENTENCE_DE_RAINBOW)
print("Generating and starting the announcement took", time.time() - start)