| import os
|
| import torch
|
| import soundfile as sf
|
|
|
| from TTS.api import TTS
|
|
|
|
|
|
|
|
|
| MODEL_CHECKPOINT_DIR = "./TTS/bg/my_fine_tuned_model/bg-June-02-2026_07+17PM-0000000"
|
|
|
|
|
|
|
|
|
| MODEL_WEIGHTS_FILE = "best_model.pth"
|
|
|
|
|
| TEXT_TO_SYNTHESIZE = "Аз съм българче и расна в дни велики, в славно време, син съм на земя прекрасна, син съм на юнашко племе."
|
|
|
|
|
| DEVICE = "cuda" if torch.cuda.is_available() else "cpu"
|
|
|
|
|
| model_path = os.path.join(MODEL_CHECKPOINT_DIR, MODEL_WEIGHTS_FILE)
|
| config_path = os.path.join(MODEL_CHECKPOINT_DIR, "config.json")
|
|
|
|
|
| if not os.path.exists(model_path):
|
| print(f"Грешка: Файлът с теглата '{model_path}' не е намерен.")
|
| exit()
|
| if not os.path.exists(config_path):
|
| print(f"Грешка: Конфигурационният файл '{config_path}' не е намерен.")
|
| exit()
|
|
|
|
|
|
|
|
|
| try:
|
| print(f"Зареждане на VITS модел с Coqui TTS...")
|
| print(f" Модел: {model_path}")
|
| print(f" Конфигурация: {config_path}")
|
|
|
|
|
| tts = TTS(
|
| model_path=model_path,
|
| config_path=config_path,
|
| progress_bar=True,
|
| gpu=True if DEVICE == "cuda" else False
|
| )
|
| print("Моделът е зареден успешно с Coqui TTS.")
|
|
|
|
|
| speaker_name = None
|
| if tts.speakers:
|
| print(f"Налични говорители: {tts.speakers}")
|
|
|
|
|
|
|
| print(f"Използван говорител: {speaker_name if speaker_name else 'По подразбиране / Едно-говорителски'}")
|
| else:
|
| print("Моделът изглежда е едно-говорителски или speakers.pth не е наличен/валиден.")
|
|
|
| print(f"Синтезиране на реч за текст: '{TEXT_TO_SYNTHESIZE}'")
|
| wav = tts.tts(text=TEXT_TO_SYNTHESIZE)
|
|
|
|
|
| output_audio_path = "Проба-1.wav"
|
| sf.write(output_audio_path, wav, tts.synthesizer.output_sample_rate)
|
| print(f"Речта е синтезирана и записана във: {output_audio_path}")
|
|
|
| except Exception as e:
|
| print(f"Възникна грешка при зареждане или синтез с Coqui TTS: {e}") |