File size: 4,645 Bytes
3ce6dc6
d3f22a2
3ce6dc6
daf5d92
3ce6dc6
 
a7f56c1
d3f22a2
3ce6dc6
 
b6b02d5
104a977
4a5ed96
b6b02d5
 
1fbe202
7a9f263
b6b02d5
 
d3f22a2
4d53cd1
 
 
 
 
2cb1592
b6b02d5
f77add3
d79b214
f77add3
 
 
 
 
 
8b015e4
 
f77add3
8b015e4
f77add3
 
 
 
 
 
f09651a
b6b02d5
d3f22a2
b6b02d5
d3f22a2
b6b02d5
d3f22a2
19abe1c
b6b02d5
d3f22a2
b6b02d5
d3f22a2
19abe1c
b6b02d5
d3f22a2
b6b02d5
d3f22a2
19abe1c
b6b02d5
4b32868
 
 
 
 
 
d3f22a2
3ff1634
70ee0db
3ff1634
f77add3
2a650fb
70ee0db
 
 
 
 
 
 
 
 
4a5ed96
 
 
 
 
 
 
 
 
6aaa280
 
f77add3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
70ee0db
6dd46b2
3ce6dc6
 
d3f22a2
70ee0db
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
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
<!DOCTYPE html>
<html>
<head>
    <title>Fast TTS</title>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="/static/styles.css"> <!-- Link to your external CSS file -->
    <!-- Add any CSS links or styles here -->
</head>
<body>
    

    <form method="post" action="/" onsubmit="showLoadingMessage()">
        <div>
            <label for="text_input">Text to synthesize:</label>
            <textarea id="text_input" name="text_input" rows="5" cols="50">{{ text_input }}</textarea>

        </div>
        <div>
        <label for="selection">Select speaker:</label>
        <select id="speaker" name="speaker">
                {% for option in data.speaker_options %}
                <option {% if option == data.default_speaker %}selected{% endif %}>{{ option }}</option>
                {% endfor %}
        </select>
   
        </div>
          <!-- Select a model -->
        <div>
        <label for="selected_model">Select a model:</label>
        <select id="selected_model" name="selected_model">
            {% for model_name in onnx_models %}
            <option value="{{ model_name }}">{{ model_name }}</option>
            {% endfor %}
        </select>
        </div>

            <!-- Display speaker options -->
        <div>
        <label for="selected_speaker_id">Select a speaker:</label>
        <select id="selected_speaker_id" name="selected_speaker_id">
            {% for speaker_id, speaker_name in speaker_id_map.items() %}
            <option value="{{ speaker_id }}">{{ speaker_name }}</option>
            {% endfor %}
        </select>
        </div>
        <div id="speaker_selection" style="display: none;">
        <!-- Dropdown for speaker selection -->
        </div>

        <div>
        <label for="speed_slider">Rate scale:</label>
        <input type="range" id="speed_slider" name="speed_slider" min="0.25" max="2" step="0.1" value="1">
        </div>

        <div>
        <label for="noise_scale_slider">Phoneme noise scale:</label>
        <input type="range" id="noise_scale_slider" name="noise_scale_slider" min="0.25" max="1" step="0.1" value="0.667">
        </div>

        <div>
        <label for="noise_scale_w_slider">Phoneme stressing scale:</label>
        <input type="range" id="noise_scale_w_slider" name="noise_scale_w_slider" min="0.25" max="1" step="0.1" value="1">
        </div>
       <!-- Add a div with the "loading-message" ID for the loading message -->
        <div id="loading-message"></div>

        <!-- Include the dynamic content from response_html -->
        {{ response_html|safe }}
        

        <div>
        <button type="submit" id="synthesize_button">Synthesize</button>
        </div>


{% if file_url %}
<h2>Generated Audio</h2>
<audio controls id="audio-player">
    <source src="{{ file_url }}" type="audio/mpeg">
    Your browser does not support the audio element.
</audio>
<a href="{{ file_url }}" download>Download Audio</a>
{% endif %}

<script>
    function showLoadingMessage() {
        // Display the loading message
        document.getElementById("loading-message").innerText = "Generating your audio, please wait...";

        // Optionally, you can disable the form elements to prevent further interactions while waiting
        document.getElementById("synthesize_button").disabled = true;
    }
</script>

</form>
<script>
        const selectedModelDropdown = document.getElementById("selected_model");
        const speakerDropdown = document.getElementById("selected_speaker_id");

        selectedModelDropdown.addEventListener("change", () => {
            const selectedModel = selectedModelDropdown.value;

            // Fetch speaker options for the selected model
            fetch(`/get_speaker_id_map?selected_model=${selectedModel}`)
                .then(response => response.json())
                .then(data => {
                    const speakerIdMap = data.speaker_id_map;
                    speakerDropdown.innerHTML = ""; // Clear existing options

                    for (const [speakerId, speakerName] of Object.entries(speakerIdMap)) {
                        const option = document.createElement("option");
                        option.value = speakerId;
                        option.textContent = speakerName;
                        speakerDropdown.appendChild(option);
                    }
                })
                .catch(error => console.error("Error fetching speaker options:", error));
        });
</script>
<!-- Move the JavaScript code outside the conditional block -->

</body>
</html>