Skip to content

Commit 43752fd

Browse files
authored
Merge pull request github#16 from reels-automation/voces-fix
added microsoft voices
2 parents e417006 + 13d7d8a commit 43752fd

File tree

2 files changed

+93
-1
lines changed

2 files changed

+93
-1
lines changed

src/fetchs/data-frontend/data_frontend.ts

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,4 +37,29 @@ export const getVoiceModels = async () => {
3737
console.error("Error al obtener los models:", err);
3838
return [];
3939
}
40-
}
40+
}
41+
42+
export async function getMicrosoftVoices(): Promise<string[]> {
43+
const response = await fetch(
44+
"https://speech.platform.bing.com/consumer/speech/synthesize/readaloud/voices/list?trustedclienttoken=6A5AA1D4EAFF4E9FB37E23D68491D6F4"
45+
);
46+
47+
if (!response.ok) {
48+
throw new Error("Failed to fetch Microsoft TTS voices");
49+
}
50+
51+
const voices = await response.json();
52+
53+
const languagePrefixes = ["es", "es-", "ca", "en", "en-"];
54+
55+
// Solo devolver el ShortName (string)
56+
const filteredVoices = voices
57+
.filter((voice: any) =>
58+
languagePrefixes.some((prefix) => voice.Locale?.startsWith(prefix))
59+
)
60+
.map((voice: any) => voice.ShortName);
61+
62+
return filteredVoices;
63+
}
64+
65+

src/pages/home/components/create_video_popup.tsx

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import {
2424
import { getOllamaModels } from "@/fetchs/data-frontend/data_frontend";
2525
import { getGameplays } from "@/fetchs/data-frontend/data_frontend";
2626
import { getVoiceModels } from "@/fetchs/data-frontend/data_frontend";
27+
import { getMicrosoftVoices } from "@/fetchs/data-frontend/data_frontend";
2728

2829
interface CreateVideoPopUpProps {
2930
isOpen: boolean;
@@ -49,6 +50,7 @@ const CreateVideoPopUp: React.FC<CreateVideoPopUpProps> = ({ isOpen, closePopup,
4950
const [gptModels, setGptModels] = useState<string[]>([]);
5051
const [gameplays, setGameplays] = useState<Gameplay[]>([])
5152
const [voiceModels, setVoiceModels] = useState<VoiceModel[]>([])
53+
const [ttsVoices, setTtsVoices] = useState<string[]>([]);
5254
const [formData, setFormData] = useState({
5355
tema: "",
5456
usuario: "5e00feba-5118-4289-b465-878a4bb2ed58",
@@ -160,6 +162,32 @@ const CreateVideoPopUp: React.FC<CreateVideoPopUpProps> = ({ isOpen, closePopup,
160162
fetchVoiceModels();
161163
}, []);
162164

165+
useEffect(() => {
166+
const fetchTtsVoices = async () => {
167+
try {
168+
const data = await getMicrosoftVoices();
169+
setTtsVoices(data);
170+
171+
// Opcional: Setear voz por defecto si no hay una definida
172+
if (data.length > 0 && !formData.audio_item[0].tts_voice) {
173+
setFormData((prev) => ({
174+
...prev,
175+
audio_item: [
176+
{
177+
...prev.audio_item[0],
178+
tts_voice: data[0],
179+
},
180+
],
181+
}));
182+
}
183+
} catch (error) {
184+
console.error("Error al cargar las voces TTS de Microsoft", error);
185+
}
186+
};
187+
188+
fetchTtsVoices();
189+
}, []);
190+
163191

164192
function getSubFromToken(): string {
165193
try {
@@ -488,8 +516,47 @@ const CreateVideoPopUp: React.FC<CreateVideoPopUpProps> = ({ isOpen, closePopup,
488516
</Select>
489517
</div>
490518
</div>
519+
<div className="space-y-2">
520+
<Label
521+
htmlFor="tts_voice"
522+
className="text-sm font-medium text-gray-700 flex items-center"
523+
>
524+
Voz TTS
525+
</Label>
526+
<Select
527+
value={formData.audio_item[0].tts_voice}
528+
onValueChange={(value) =>
529+
setFormData((prev) => ({
530+
...prev,
531+
audio_item: [
532+
{
533+
...prev.audio_item[0],
534+
tts_voice: value,
535+
},
536+
],
537+
}))
538+
}
539+
>
540+
<SelectTrigger className="h-12 border-gray-300 focus:border-purple-500 focus:ring-purple-500 cursor-pointer">
541+
<SelectValue placeholder="Selecciona voz TTS" />
542+
</SelectTrigger>
543+
<SelectContent>
544+
{ttsVoices.map((voiceShortName) => (
545+
<SelectItem key={voiceShortName} value={voiceShortName} className="cursor-pointer">
546+
{voiceShortName}
547+
</SelectItem>
548+
))}
549+
550+
</SelectContent>
551+
</Select>
552+
</div>
553+
491554
</div>
492555

556+
557+
558+
559+
493560
{/* Additional Configuration */}
494561
<div className="bg-white rounded-xl p-6 border border-gray-200 shadow-sm">
495562
<h3 className="text-lg font-semibold text-gray-800 mb-4 flex items-center">

0 commit comments

Comments
 (0)