@@ -24,6 +24,7 @@ import {
2424import { getOllamaModels } from "@/fetchs/data-frontend/data_frontend" ;
2525import { getGameplays } from "@/fetchs/data-frontend/data_frontend" ;
2626import { getVoiceModels } from "@/fetchs/data-frontend/data_frontend" ;
27+ import { getMicrosoftVoices } from "@/fetchs/data-frontend/data_frontend" ;
2728
2829interface 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