File size: 2,878 Bytes
38cbd58
 
 
 
 
 
 
 
 
7970b69
 
38cbd58
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
dd1fe32
 
38cbd58
 
 
 
 
 
14a1ad5
38cbd58
 
 
 
14a1ad5
38cbd58
 
 
 
 
 
 
 
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
61
62
import gradio
import wave
import numpy as np
from io import BytesIO
from huggingface_hub import hf_hub_download
from piper import PiperVoice


def synthesize_speech(text, sentence_silence, length_scale):
    model_path = hf_hub_download(repo_id="RaivisDejus/Piper-lv_LV-Aivars-medium", filename="lv_LV-aivars-medium.onnx")
    config_path = hf_hub_download(repo_id="RaivisDejus/Piper-lv_LV-Aivars-medium", filename="lv_LV-aivars-medium.onnx.json")

    voice = PiperVoice.load(model_path, config_path)

    buffer = BytesIO()
    with wave.open(buffer, 'wb') as wav_file:
        wav_file.setframerate(voice.config.sample_rate)
        wav_file.setsampwidth(2)
        wav_file.setnchannels(1)
        voice.synthesize(text, wav_file, sentence_silence=sentence_silence, length_scale=length_scale)

    buffer.seek(0)
    audio_data = np.frombuffer(buffer.read(), dtype=np.int16)
    return audio_data.tobytes()


# Gradio Interface
with gradio.Blocks(theme=gradio.themes.Base()) as demo:
    gradio.Markdown(
        """
        # Latvian Piper TTS
        
        Test Latvian Piper TTS [model](https://huggingface.co/RaivisDejus/Piper-lv_LV-Aivars-medium) Aivars.
        
        Available parameters:
        - Sentence silence - The `--sentence-silence` piper parameter controls silence duration between sentences.
        - Length scale - The `--length-scale` piper parameter controls length and speach speed of generated audio.
        
        Support development of Latvian speech technologies and contribute to the [Balsu talka](https://balsutalka.lv/).
        
        If you notice strange pronunciation of some words, please report them [here](https://huggingface.co/RaivisDejus/Piper-lv_LV-Aivars-medium/discussions/2)
        """)
    input_text = gradio.Textbox(
        label="Text to generate",
        lines=3,
        value="“Balsu talka” ir projekts latviešu valodas nākotnei. Tā mērķis ir iemūžināt mūsdienās runāto latviešu valodu un nodrošināt latviešu valodas pieejamību tehnoloģiju attīstībai. Šo mērķi varam sasniegt tikai kopīgiem spēkiem, tāpēc aicinām katru ierunāt vismaz piecus teikumus, lai savāktu pēc iespējas vairāk runas paraugu un izveidotu daudzveidīgu, atvērtu un ikvienam pieejamu latviešu runas datu kopu."
    )
    sentence_silence = gradio.Slider(label="Sentence silence", minimum=0.0, maximum=2.0, step=0.05, value=0.1)
    length_scale = gradio.Slider(label="Length scale", minimum=0.5, maximum=2.0, step=0.05, value=1.0)
    submit_button = gradio.Button("Generate")
    output_audio = gradio.Audio(
        label="Generated speech",
        autoplay=False,
        type="numpy",
        show_download_button=True,
        show_share_button=False
    )

    submit_button.click(synthesize_speech, inputs=[input_text, sentence_silence, length_scale], outputs=[output_audio])

demo.launch()