Spaces:
Sleeping
Sleeping
Updated for multiple voices
Browse filesDefault = male, other voices 1F:US_Emma, 2F:US_Jenny, 3F:HK_Jan, 1M:US_Guy, 2M:AU_William, 1C: Childvoice
app.py
CHANGED
@@ -13,15 +13,36 @@ async def get_voices():
|
|
13 |
|
14 |
# Text-to-speech function for a single paragraph
|
15 |
async def paragraph_to_speech(text, voice, rate, pitch):
|
16 |
-
voice1 =
|
17 |
-
|
|
|
|
|
|
|
|
|
|
|
18 |
if not text.strip():
|
19 |
return None
|
20 |
-
if text.startswith("
|
21 |
text2 = text[2:] # Remove the first two characters ("FF")
|
22 |
-
voice_short_name =
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
23 |
else:
|
24 |
-
|
|
|
25 |
text2=text
|
26 |
rate_str = f"{rate:+d}%"
|
27 |
pitch_str = f"{pitch:+d}Hz"
|
@@ -76,7 +97,7 @@ async def create_demo():
|
|
76 |
voices = await get_voices()
|
77 |
|
78 |
description = """
|
79 |
-
|
80 |
Enter your text, select a voice, and adjust the speech rate and pitch.
|
81 |
The application will process your text paragraph by paragraph (separated by two blank lines).
|
82 |
"""
|
|
|
13 |
|
14 |
# Text-to-speech function for a single paragraph
|
15 |
async def paragraph_to_speech(text, voice, rate, pitch):
|
16 |
+
voice1 ="en-US-AndrewNeural - en-US (Male)" #good for reading
|
17 |
+
voice1F ="en-US-EmmaNeural - en-US" (Female)
|
18 |
+
voice2 = "en-US-GuyNeural (Male)"
|
19 |
+
voice2F = "en-US-JennyNeural (Female)"
|
20 |
+
voice3 = "en-AU-WilliamNeural - en-AU (Male)"
|
21 |
+
voice3F = "en-HK-YanNeural - en-HK (Female)"
|
22 |
+
voice4 = "en-GB-MaisieNeural - en-GB (Female)" #Child
|
23 |
if not text.strip():
|
24 |
return None
|
25 |
+
if text.startswith("1F"):
|
26 |
text2 = text[2:] # Remove the first two characters ("FF")
|
27 |
+
voice_short_name =voice1F.split(" - ")[0]
|
28 |
+
elif text.startswith("2F"):
|
29 |
+
text2 = text[2:] # Remove the first two characters ("FF")
|
30 |
+
voice_short_name =voice2F.split(" - ")[0]
|
31 |
+
elif text.startswith("3F"):
|
32 |
+
text2 = text[2:] # Remove the first two characters ("FF")
|
33 |
+
voice_short_name =voice3F.split(" - ")[0]
|
34 |
+
elif text.startswith("1M"):
|
35 |
+
text2 = text[2:] # Remove the first two characters ("FF")
|
36 |
+
voice_short_name =voice2.split(" - ")[0]
|
37 |
+
elif text.startswith("2M"):
|
38 |
+
text2 = text[2:] # Remove the first two characters ("FF")
|
39 |
+
voice_short_name =voice3.split(" - ")[0]
|
40 |
+
elif text.startswith("1C"):
|
41 |
+
text2 = text[2:] # Remove the first two characters ("FF")
|
42 |
+
voice_short_name =voice4.split(" - ")[0]
|
43 |
else:
|
44 |
+
# Use selected voice, or fallback to default
|
45 |
+
voice_short_name = (voice or default_voice).split(" - ")[0]
|
46 |
text2=text
|
47 |
rate_str = f"{rate:+d}%"
|
48 |
pitch_str = f"{pitch:+d}Hz"
|
|
|
97 |
voices = await get_voices()
|
98 |
|
99 |
description = """
|
100 |
+
Default = male, other voices 1F:US_Emma, 2F:US_Jenny, 3F:HK_Jan, 1M:US_Guy, 2M:AU_William, 1C: Childvoice
|
101 |
Enter your text, select a voice, and adjust the speech rate and pitch.
|
102 |
The application will process your text paragraph by paragraph (separated by two blank lines).
|
103 |
"""
|