File size: 1,605 Bytes
4e01295
 
c764bfb
 
 
4e01295
6fa7850
 
4e01295
 
bed109a
 
 
 
 
9a433d2
 
 
 
 
 
 
 
 
bed109a
c764bfb
d1d085b
 
1c30e88
e780472
6fa7850
d1d085b
 
c764bfb
9a433d2
c764bfb
c5fd4f3
 
5b13b80
c5fd4f3
 
 
 
 
7337c95
9a433d2
e780472
868b522
c764bfb
 
 
 
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
import gradio as gr
from pdfminer.high_level import extract_text
from balacoon_tts import TTS
from huggingface_hub import hf_hub_download, list_repo_files

def read_pdf(file):
    with open(file.name, "rb") as f:
        text = extract_text(f)
    return text

def set_model(model_name_str):
    model_path = hf_hub_download(repo_id="balacoon/tts", filename=model_name_str)
    global tts
    tts = TTS(model_path)
    speakers = tts.get_speakers()
    speaker_dropdown.choices = speakers
    speaker_dropdown.update(default=speakers[0] if speakers else None)

def synthesize_audio(file, model_name_str, speaker_str):
    text_str = read_pdf(file)
    if len(text_str) > 1024:
        text_str = text_str[:1024]
    samples = tts.synthesize(text_str, speaker_str)
    return (tts.get_sampling_rate(), samples)

def main():
    repo_files = list_repo_files(repo_id="balacoon/tts")
    model_files = [x for x in repo_files if x.endswith("_cpu.addon")]
    model_name_dropdown = gr.inputs.Dropdown(label="Model", choices=model_files)
    speaker_dropdown = gr.inputs.Dropdown(label="Speaker", choices=[])

    file_input = gr.inputs.File(label="Select a PDF File", type="file")
    text = gr.outputs.Textbox()

    audio = gr.outputs.Audio(label="Generated Audio")

    iface = gr.Interface(
        fn=synthesize_audio,
        inputs=[file_input, model_name_dropdown, speaker_dropdown],
        outputs=audio,
        title="PDF TO SPEECH CONVERTER",
        layout="rows",
        debug=True
    )

    model_name_dropdown.set_action(set_model)

    iface.launch()


if __name__ == "__main__":
    main()