File size: 2,007 Bytes
72e17aa
 
 
 
 
c3b86c9
72e17aa
3da71e7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
72e17aa
 
 
c3b86c9
3da71e7
 
 
c3b86c9
72e17aa
3da71e7
72e17aa
c3b86c9
72e17aa
 
 
 
 
 
c3b86c9
 
 
 
72e17aa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
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()