import os import asyncio import edge_tts # Zoznam všetkých unikátnych slov podľa aktualizovaného kánonu PSP words = [ # B "by", "aby", "byľ", "bystrý", "Bystrica", "Bytča", "byť", "nábytok", "bývať", "byt", "bydlisko", "príbytok", "dobytok", "kobyla", "obyčaj", "býk", "bylina", "bydlo", "dobyť", "odbyt", "byvol", "bytosť", "bývalý", "úbytok", "prebytok", "zbytočný", # Votrelci B "bič", "bicykel", "bitka", "biela", # M "my", "mykať sa", "mýliť sa", "myslieť", "myšlienka", "myseľ", "umývať sa", "mydlo", "myš", "šmýkať sa", "hmyz", "žmýkať", "priemysel", "Myjava", "mýto", "mys", "zamykať", "pomykov", "hmýriť sa", "šmyk", "priesmyk", "omyl", "zmysel", "pomyje", # Votrelci M "miska", "minúta", "milý", "minca", # P "pýcha", "pýšiť sa", "pyšný", "prepych", "pykať", "pýr", "pysk", "pytliak", "kopyto", "pýtať sa", "opýtať sa", "pyžamo", # Votrelci P "pivo", "píšťalka", "pilot", "pieseň", # R "ryba", "rýchly", "rys", "ryť", "rýpať", "hrýzť", "kryť", "skryť", "koryto", "korytnačka", "strýko", "ryža", "bryndza", "rýdzi", "rýľ", "ryčať", "ryha", "kryha", "poryv", "trýzniť", # Votrelci R "rieka", "ringloty", "rizoto", "ríbezľa", # S "syn", "syr", "sýty", "nasýtiť sa", "sypať", "sypký", "syseľ", "syčať", "sýkorka", "sychravý", "osýpky", "vysychať", "sykať", # Votrelci S "sito", "sirup", "sivý", "silný", # V "vysoký", "zvyk", "vy", "vykať", "výr", "výskať", "vyť", "vy-", "vyžla", "vydra", "vyhňa", "výsosť", "zvyšok", "výťah", # Votrelci V "vidly", "víla", "víťaz", "vietor", # Z "jazyk", "jazykový", "jazyčnica", "nazývať sa", "ozývať sa", "prezývať", "vyzývať", "pozývať", # Votrelci Z "zima", "zips", "zisk", "zrkadlo" ] # Odstránenie duplicít so zachovaním poradia unique_words = [] seen = set() for w in words: lower_w = w.strip().lower() if lower_w not in seen: seen.add(lower_w) unique_words.append(w.strip()) output_dir = os.path.join("src", "Ypsilonkovo", "wwwroot", "audio", "words") os.makedirs(output_dir, exist_ok=True) VOICE = "sk-SK-ViktoriaNeural" async def generate_word(word): hex_name = word.lower().encode("utf-8").hex() file_path = os.path.join(output_dir, f"{hex_name}.mp3") # Špeciálna optimalizácia pre krátke slová ako "by" # Ak pošleme text s bodkou, intonácia prirodzene spadne a znie ako krátke "by" a nie "bý" spoken_text = word rate = "-5%" # Jemne pomalšie a pokojnejšie pre deti if word.lower() == "by": spoken_text = "by." rate = "+8%" # Krátke, úsečné a jasné 'by' namiesto dlhého 'bý' elif word.lower() == "byť": spoken_text = "byť." rate = "+5%" elif word.lower() == "vy-": spoken_text = "predpona vy." else: spoken_text = f"{word}." communicate = edge_tts.Communicate(spoken_text, VOICE, rate=rate) await communicate.save(file_path) print(f"Generated: {hex_name}.mp3") async def generate_welcome(): welcome_path = os.path.join(output_dir, "welcome_female.mp3") text = "Ahoj! Som víla Ypsilka, tvoja sprievodkyňa kráľovstvom Ypsilonkovo. Poďme sa spolu hravo naučiť vybrané slová!" communicate = edge_tts.Communicate(text, VOICE, rate="-4%") await communicate.save(welcome_path) print("Generated: welcome_female.mp3 with Ypsilka") async def main(): print(f"Generating {len(unique_words)} words with {VOICE}...") for w in unique_words: await generate_word(w) await asyncio.sleep(0.05) # Jemný rozostup await generate_welcome() print("All audio files generated successfully!") if __name__ == "__main__": asyncio.run(main())