Page 1 of 1

Reloj de voz

Posted: Wed Apr 07, 2021 12:15 am
by Fernando Perez
Hola a todos.
Estoy probando el nuevo sistema incorporado en Annex32 1.43.2 para convertir texto a voz mediante el uso de la API de:
[External Link Removed for Guests].
He usado un módulo DAC (Convertidor digital a analógico) PCM5102a, adquirido en Aliexpress por 3 €:
image.png
y un ESP32 conectado según explica Cicciocb en su fichero de ayuda:
image.png
con la salvedad de que he alimentado el DAC a 5 voltios en lugar de 3,3 y unido el terminal SCK a masa en lugar de dejarlo al aire, para evitar inestabilidades observadas en una radio por Internet que también estoy montando.

El registro en voicerss.org es gratuito para una utilización de su API de conversión de hasta 350 veces al día con un máximo de 100 Kb por frase, creo que más que suficiente para un uso normal.

Mi código actual es este:

Code: [Local Link Removed for Guests]

DIM hora$(11) = "una","dos","tres","cuatro","cinco","seis","siete","ocho","nueve","diez","once","doce"
wlog "Reloj hora a voz en funcionamiento"
timer0 1000, diHora
wait

'======
dihora:
'====== 
s = val(right$(time$, 2)) : if s <> 0 then return ' Si los segundos no son cero, regresa
m = val(mid$(time$, 4, 2)): if (m MOD 5) <> 0 then return ' Si los minutos no son multiplo de cinco, regresa
h = val(left$(time$, 2)) ' h contiene hora actual
p = (h*100) + m ' Periodo del día

' HORA -------------------
if h > 12 then h = h - 12
if h = 0 then h = 12
if m>30 then h = h + 1
if h = 13 then h = 1
if h=1 then frase$ = "Es la" else frase$ = "Son las"
frase$ = frase$ + hora$(h-1) + space$(1) ' El primer elemento de una matriz tiene indice cero

' MINUTOS ----------------
if m>=35 then frase$ = frase$ + "menos"
if (m>0) AND (m<35) then frase$ = frase$ + "y"

select case m
  case 0 : m$="en punto"
  case 5, 55 : m$="cinco"
  case 10, 50 : m$="diez"
  case 15, 45 : m$="cuarto"
  case 20, 40 : m$="veinte"
  case 25, 35 : m$="veinticinco"
  case 30 : m$="media"
end select

frase$ = frase$ + space$(1) + m$
wlog frase$
' PERIODO ----------------
if (p>1155) AND (p<1435) then p$="del" else p$="de la"
frase$ = frase$ + space$(1) + p$
 
select case p
  case 0 to 30 : p$ = "medianoche"
  case 35 to 555 : p$ = "madrugada"
  case 600 to 1155 : p$ = "mañana"
  case 1200 to 1430 : p$ = "mediodía"
  case 1435 to 1955 : p$ = "tarde"
  case 2000 to 2355 : p$ = "noche"
end select

frase$ = frase$ + space$(1) + p$

api$ = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"  ' Tu API KEY de tu cuenta en voicerss.org
PLAY.SETUP 1, 16
PLAY.voiceRSS frase$, "es-es&v=Luna", api$

return

'PLAY.voiceRSS frase$, "es-mxs&v=Juana", api$
'PLAY.voiceRSS frase$, "es-es&v=Luna", api$
'PLAY.voiceRSS frase$, "es-mx&v=Silvia", api$
'PLAY.voiceRSS frase$, "es-es&v=Sofia", api$
'PLAY.voiceRSS frase$, "es-mx&v=Teresa", api$
'PLAY.voiceRSS frase$, "es-es&v=Camila", api$
'PLAY.voiceRSS frase$, "es-mx&v=Jose", api$
'PLAY.voiceRSS frase$, "es-es&v=Diego", api$
En el programa he comentado las distintas voces que ofrece actualmente voiceRSS en español. Basta con sustituir mi favorita, Luna, por la que prefieras.
Si necesitas alguna aclaración, dímelo.

Re: Reloj de voz

Posted: Thu Apr 22, 2021 12:01 am
by ETIPatagonia
Excelente trabajo Fer!