from kokoro import KModel, KPipeline import os import random import numpy as np import kokoro import torch voice_choices = { 'πŸ‡ΊπŸ‡Έ 🚺 Heart ❀️': 'af_heart', 'πŸ‡ΊπŸ‡Έ 🚺 Bella πŸ”₯': 'af_bella', 'πŸ‡ΊπŸ‡Έ 🚺 Nicole 🎧': 'af_nicole', 'πŸ‡ΊπŸ‡Έ 🚺 Aoede': 'af_aoede', 'πŸ‡ΊπŸ‡Έ 🚺 Kore': 'af_kore', 'πŸ‡ΊπŸ‡Έ 🚺 Sarah': 'af_sarah', 'πŸ‡ΊπŸ‡Έ 🚺 Nova': 'af_nova', 'πŸ‡ΊπŸ‡Έ 🚺 Sky': 'af_sky', 'πŸ‡ΊπŸ‡Έ 🚺 Alloy': 'af_alloy', 'πŸ‡ΊπŸ‡Έ 🚺 Jessica': 'af_jessica', 'πŸ‡ΊπŸ‡Έ 🚺 River': 'af_river', 'πŸ‡ΊπŸ‡Έ 🚹 Michael': 'am_michael', 'πŸ‡ΊπŸ‡Έ 🚹 Fenrir': 'am_fenrir', 'πŸ‡ΊπŸ‡Έ 🚹 Puck': 'am_puck', 'πŸ‡ΊπŸ‡Έ 🚹 Echo': 'am_echo', 'πŸ‡ΊπŸ‡Έ 🚹 Eric': 'am_eric', 'πŸ‡ΊπŸ‡Έ 🚹 Liam': 'am_liam', 'πŸ‡ΊπŸ‡Έ 🚹 Onyx': 'am_onyx', 'πŸ‡ΊπŸ‡Έ 🚹 Santa': 'am_santa', 'πŸ‡ΊπŸ‡Έ 🚹 Adam': 'am_adam', 'πŸ‡¬πŸ‡§ 🚺 Emma': 'bf_emma', 'πŸ‡¬πŸ‡§ 🚺 Isabella': 'bf_isabella', 'πŸ‡¬πŸ‡§ 🚺 Alice': 'bf_alice', 'πŸ‡¬πŸ‡§ 🚺 Lily': 'bf_lily', 'πŸ‡¬πŸ‡§ 🚹 George': 'bm_george', 'πŸ‡¬πŸ‡§ 🚹 Fable': 'bm_fable', 'πŸ‡¬πŸ‡§ 🚹 Lewis': 'bm_lewis', 'πŸ‡¬πŸ‡§ 🚹 Daniel': 'bm_daniel', } model = KModel().to('cpu').eval() pipeline = KPipeline(lang_code='a', model=False) pipelines = {lang_code: KPipeline(lang_code=lang_code, model=False) for lang_code in 'ab'} pipelines['a'].g2p.lexicon.golds['kokoro'] = 'kˈOkΙ™ΙΉO' pipelines['b'].g2p.lexicon.golds['kokoro'] = 'kˈQkΙ™ΙΉQ' def generate_tts(text, voice='af_heart', speed=1): pipeline = pipelines[voice[0]] pack = pipeline.load_voice(voice) first = True for _, ps, _ in pipeline(text, voice, speed): ref_s = pack[len(ps)-1] try: audio = model(ps, ref_s, speed) except: print("lol there was an issue idk") yield 24000, audio.numpy() if first: first = False yield 24000, torch.zeros(1).numpy()