Spaces:
Sleeping
Sleeping
Update index.html
Browse files- index.html +20 -21
index.html
CHANGED
|
@@ -132,17 +132,16 @@
|
|
| 132 |
</head>
|
| 133 |
<body>
|
| 134 |
<div class="container">
|
| 135 |
-
<h1>
|
| 136 |
-
<p class="subtitle">Powered by Edge TTS</p>
|
| 137 |
|
| 138 |
-
<textarea id="text" placeholder="
|
| 139 |
|
| 140 |
<div class="controls">
|
| 141 |
<div class="control-group">
|
| 142 |
-
<label>
|
| 143 |
<select id="language">
|
| 144 |
-
<option value="ar">
|
| 145 |
-
<option value="ar-sa">
|
| 146 |
<option value="en" selected>English</option>
|
| 147 |
<option value="en-gb">English (UK)</option>
|
| 148 |
<option value="fr">Français</option>
|
|
@@ -156,26 +155,26 @@
|
|
| 156 |
</div>
|
| 157 |
|
| 158 |
<div class="control-group">
|
| 159 |
-
<label>
|
| 160 |
<select id="gender">
|
| 161 |
-
<option value="female">
|
| 162 |
-
<option value="male">
|
| 163 |
</select>
|
| 164 |
</div>
|
| 165 |
|
| 166 |
<div class="control-group">
|
| 167 |
-
<label>
|
| 168 |
<select id="rate">
|
| 169 |
-
<option value="-50%">
|
| 170 |
-
<option value="-25%">
|
| 171 |
-
<option value="+0%" selected>
|
| 172 |
-
<option value="+25%">
|
| 173 |
-
<option value="+50%">
|
| 174 |
</select>
|
| 175 |
</div>
|
| 176 |
</div>
|
| 177 |
|
| 178 |
-
<button id="btn" onclick="generateSpeech()">
|
| 179 |
|
| 180 |
<div class="status" id="status"></div>
|
| 181 |
<audio id="audio" controls></audio>
|
|
@@ -193,13 +192,13 @@ async function generateSpeech() {
|
|
| 193 |
|
| 194 |
if (!text) {
|
| 195 |
status.className = 'status error';
|
| 196 |
-
status.textContent = '
|
| 197 |
return;
|
| 198 |
}
|
| 199 |
|
| 200 |
btn.disabled = true;
|
| 201 |
status.className = 'status loading';
|
| 202 |
-
status.textContent = '
|
| 203 |
audio.style.display = 'none';
|
| 204 |
|
| 205 |
try {
|
|
@@ -209,7 +208,7 @@ async function generateSpeech() {
|
|
| 209 |
body: JSON.stringify({ text, language, gender, rate })
|
| 210 |
});
|
| 211 |
|
| 212 |
-
if (!response.ok) throw new Error('
|
| 213 |
|
| 214 |
const blob = await response.blob();
|
| 215 |
const url = URL.createObjectURL(blob);
|
|
@@ -218,10 +217,10 @@ async function generateSpeech() {
|
|
| 218 |
audio.play();
|
| 219 |
|
| 220 |
status.className = 'status success';
|
| 221 |
-
status.textContent = '
|
| 222 |
} catch (err) {
|
| 223 |
status.className = 'status error';
|
| 224 |
-
status.textContent = '
|
| 225 |
} finally {
|
| 226 |
btn.disabled = false;
|
| 227 |
}
|
|
|
|
| 132 |
</head>
|
| 133 |
<body>
|
| 134 |
<div class="container">
|
| 135 |
+
<h1> Text to Speech</h1>
|
|
|
|
| 136 |
|
| 137 |
+
<textarea id="text" placeholder="Enter the text"></textarea>
|
| 138 |
|
| 139 |
<div class="controls">
|
| 140 |
<div class="control-group">
|
| 141 |
+
<label>Language</label>
|
| 142 |
<select id="language">
|
| 143 |
+
<option value="ar">Arabic (Egypt)</option>
|
| 144 |
+
<option value="ar-sa">Arabic (Saudi Arabia)</option>
|
| 145 |
<option value="en" selected>English</option>
|
| 146 |
<option value="en-gb">English (UK)</option>
|
| 147 |
<option value="fr">Français</option>
|
|
|
|
| 155 |
</div>
|
| 156 |
|
| 157 |
<div class="control-group">
|
| 158 |
+
<label>Gender</label>
|
| 159 |
<select id="gender">
|
| 160 |
+
<option value="female">Female</option>
|
| 161 |
+
<option value="male">Male</option>
|
| 162 |
</select>
|
| 163 |
</div>
|
| 164 |
|
| 165 |
<div class="control-group">
|
| 166 |
+
<label>speed</label>
|
| 167 |
<select id="rate">
|
| 168 |
+
<option value="-50%">Very slow</option>
|
| 169 |
+
<option value="-25%">Slow</option>
|
| 170 |
+
<option value="+0%" selected>Normal</option>
|
| 171 |
+
<option value="+25%">Fast</option>
|
| 172 |
+
<option value="+50%">Very fast</option>
|
| 173 |
</select>
|
| 174 |
</div>
|
| 175 |
</div>
|
| 176 |
|
| 177 |
+
<button id="btn" onclick="generateSpeech()">Sound generation</button>
|
| 178 |
|
| 179 |
<div class="status" id="status"></div>
|
| 180 |
<audio id="audio" controls></audio>
|
|
|
|
| 192 |
|
| 193 |
if (!text) {
|
| 194 |
status.className = 'status error';
|
| 195 |
+
status.textContent = 'Please enter text';
|
| 196 |
return;
|
| 197 |
}
|
| 198 |
|
| 199 |
btn.disabled = true;
|
| 200 |
status.className = 'status loading';
|
| 201 |
+
status.textContent = 'Sound is being generated...';
|
| 202 |
audio.style.display = 'none';
|
| 203 |
|
| 204 |
try {
|
|
|
|
| 208 |
body: JSON.stringify({ text, language, gender, rate })
|
| 209 |
});
|
| 210 |
|
| 211 |
+
if (!response.ok) throw new Error('Failed to generate sound');
|
| 212 |
|
| 213 |
const blob = await response.blob();
|
| 214 |
const url = URL.createObjectURL(blob);
|
|
|
|
| 217 |
audio.play();
|
| 218 |
|
| 219 |
status.className = 'status success';
|
| 220 |
+
status.textContent = 'Sound was successfully generated!';
|
| 221 |
} catch (err) {
|
| 222 |
status.className = 'status error';
|
| 223 |
+
status.textContent = 'An error occurred: ' + err.message;
|
| 224 |
} finally {
|
| 225 |
btn.disabled = false;
|
| 226 |
}
|