El día de hoy comparto con Uds. un script muy útil para convertir un texto a voz utilizando el motor de voz de Google. La ventaja principal de este script es que «evade» el límite de 100 bytes impuesto por Google. En realidad, para ser honestos, respeta este límite pero envía todas las líneas en forma automática con lo cual dicha limitación pasa desapercibida para el usuario. Los más exigentes notarán, no obstante, que la conversión no es de la misma calidad que la que podemos obtener en Google Translate, principalmente debido a este límite y que no es posible pasar el texto entero de un sólo golpe. Como punto positivo, cabe agregar que este script también permite especificar el idioma del texto a convertir.
Hecha la aclaración, veamos cuáles son los pasos a seguir.
Pasos a seguir
1.- Crear un archivo con el nombre t2s.sh.
2.- Copiar el siguiente contenido:
#!/bin/bash
#################################
# Speech Script by Dan Fountain #
# Modified by UsemosLinux #
# TalkToDanF@gmail.com #
#################################
INPUT=$*
STRINGNUM=0
ary=(${INPUT:2})
echo "---------------------------"
echo "Speech Script by Dan Fountain"
echo "TalkToDanF@gmail.com"
echo "---------------------------"
for key in "${!ary[@]}"
do
SHORTTMP[$STRINGNUM]="${SHORTTMP[$STRINGNUM]} ${ary[$key]}"
LENGTH=$(echo ${#SHORTTMP[$STRINGNUM]})
#echo "word:$key, ${ary[$key]}"
#echo "adding to: $STRINGNUM"
if [[ "$LENGTH" -lt "100" ]]; then
#echo starting new line
SHORT[$STRINGNUM]=${SHORTTMP[$STRINGNUM]}
else
STRINGNUM=$(($STRINGNUM+1))
SHORTTMP[$STRINGNUM]="${ary[$key]}"
SHORT[$STRINGNUM]="${ary[$key]}"
fi
done
for key in "${!SHORT[@]}"
do
#echo "line: $key is: ${SHORT[$key]}"
echo "Playing line: $(($key+1)) of $(($STRINGNUM+1))"
mplayer "http://translate.google.com/translate_tts?ie=UTF-8&tl=${1}&q=${SHORT[$key]}"
done
3.- Otorgar permisos de ejecución al script:
sudo chmod +x t2s.sh
4.- Ejecutar el script pasando como parámetros: a) el código del idioma correspondiente al texto, b) el texto que se desea convertir. Por ejemplo:
./t2s.sh es Este es un texto muy interesante para convertir.
Eso es todo, espero que lo disfruten.
37 comentarios, deja el tuyo
Como mola, muchas gracias 😉
Y que linda voz tiene la chica, creo que me enamoré 😛
Disculpa me puedes ayudar para el chino?, no me detecta los caracteres chinos, so el pinyin.
Esto esta bueno como para un script que revise el correo o para una alarma personalizada que al despertar te diga el pronostico y mensajes pendientes xD
Aquí hice un vídeo de prueba 😛 https://www.youtube.com/watch?v=O3IeK7PjA_0
Bien! Gracias!
Se escucha muy bien, solo tube que instalar mpg123 🙂
Tube que instalar mpg123 pero mola mogollón, eso si no acepta algunas palabras dicce a tilde derecho letra etc.
EHEH
La base de datos de virus ha sido actualizada (?)
apt update && ./t2.sh es La base de datos de virus ha sido actualizada
Jajaja Excelente, ya le tengo algunos usos, voz sensual sin duda =), gracias por compartir.
Como usuario de Mac OSX, no me ha sido posible usar el Script ya que no tengo puesto el mpg123, por lo que modificando el Script y usando VLC, podemos dejarlo funcionando correctamente en Mac OS X.
http://pastebin.com/C2Mkp1Qy
el tema es que vlc seguramente queda prendido y no se cierra al terminar de ejecutarse y podrías usar cvlc para evitar que se abra la interfaz gráfica
se le podría poner
cvlc –play-and-exit «https://translate.google.com/translate_tts?tl=${1}&q=${SHORT[$key]}»
para que cierre al terminar la reproduccion
hola chicos me sale este error, a ver si alguien me dice cual es el problema
Playing line: 1 of 1
HTTP request failed: 404 Not Found
[mpg123.c:610] error: Access to http resource http://translate.google.com/translate_tts?tl=hola&q= la failed.
[code]Playing line: 1 of 1
HTTP request failed: 404 Not Found
[mpg123.c:610] error: Access to http resource http://translate.google.com/translate_tts?tl=hola&q= la failed. [/code]
El problema es que estás usando mal el script.
Cuando lo ejecutes, tenés que pasarle como primer parámetro el idioma del texto, como se muestra en el ejemplo del post.
Te doy otro ejemplo:
./t2s.sh en This is a simple example.
Fijate que luego de ts2.sh sigue «en» (que significa «english», o sea inglés). Para español, usá «es» y luego la frase en ese idioma que quieras convertir.
Abrazo! Pablo.
conoces el comando speak no? jeje
espeak -v es-la «hola»
Sí, pero no es lo mismo. Esta voz es mucho mejor. 🙂
estamos de acuerdo!
Saludos!
Para quien tenga problemas con mpg123 -q o no le guste puede cambiar a mplayer
mpg123 -q «http://translate.google.com/translate_tts?tl=${1}&q=${SHORT[$key]}»
mplayer «http://translate.google.com/translate_tts?tl=${1}&q=${SHORT[$key]}»
Mejor «mplayer –really-quiet» para que no llene la salida con texto
Muí buena idea usar a google para mis aplicaciones me queda como anillo al dedo.
http://github.com/alfa30/t2v
Una pregunta mas; alguien podría decirme como grabar el audio de salida???
Yo mismo te respondo, porque acabo de conseguirlo. Usando mpg123, he modificado la línea 38 del script, quedando de esta manera:
mpg123 -q -w audio.wav «http://translate.google.com/translate_tts?tl=${1}&q=${SHORT[$key]}»
He añadido -w audio.wav. Esto crea un archivo wav con el audio de la frase, pero tal cual lo he dejado, no se escucha. Si además, quieres escuchar la frase, tendrías que añadir otra línea. Quedarías ambas así:
mpg123 -q -w audio.wav «http://translate.google.com/translate_tts?tl=${1}&q=${SHORT[$key]}» &
mpg123 -q «http://translate.google.com/translate_tts?tl=${1}&q=${SHORT[$key]}»
Seguramente se podría hacer de otra manera más eficiente y limpia, pero a mi al menos me funciona.
Excelente José GDF, probé tu método con muy buen resultado, saludos.
Para ahorrar tráfico en la segunda ejecución podrías reproducir el .wav que has generado en la primera
Pues sí, usando un reproductor que tengamos instalado. Por ejemplo, con VLC Player sería:
vlc audio.wav
Bueno, quien dice vlc, dice cualquier otro reproductor, incluidos los que funcionan por terminal.
Y para evitar la sobreescritura del archivo a cada uso del script, se debería usar una variable para el nombre. Nombre que pondría el usuario (comando read) antes de empezar… Pero eso ya sería rizar el rizo 😀
Yo lo hice en PHP (para crear audios para una central telefonica Asterisk*)
<?php
$url = 'http://translate.google.com/translate_tts?ie=UTF-8&q={query}%0A&tl=es&prev=input';
if (count($argv) <= 1) {
$name = basename($argv[0]);
die($name .' usage: ' . $name .' <text-to-translate' .PHP_EOL);
}
array_shift($argv);
$query = implode(' ', $argv);
$filename = str_replace(array(' ', ',', '.'), '-', $query);
$filename = str_replace('–', '-', $filename);
$url = str_replace('{query}', rawurlencode($query), $url);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
$path = getcwd() .'/' .$filename;
file_put_contents($path .'.mp3', $result);
@exec("sox {$path}.mp3 -b 16 -r 8000 -t wavpcm {$path}.wav");
@unlink($path .'.mp3');
Que tal ya he logrado grabar el audio de salida con este comando:
arecord ~/zhongwen.mp3 & ./t2s.sh zh ni hao;fg
y al final ctrl+c para detener la grabacion.
Nunca había usado php
Pero al ejecutar :
php5 texto-a-voz.php es Hola
la konsola aloja esto:
sox FAIL formats: no handler for file extension `mp3′
De cualquier se agradece mucho el aporte, lo intentaré mas tarde.
2 aplicaciones para Traductor de idiomas de google + traducción del texto a voz:
http://www.linuxhispano.net/2014/05/29/traductor-de-google-voz/
Creo que es la mejor manera de convertir, la voz no esta tan mal como las demás opciones para Linux >_<
¿Existe alguna manera de hacer que lea un archivo de texto plano?
Seria de mucha utilidad para convertir libros enteros a audio
Pues a mi no me va, no se porqueee, sale esto:
xxxxx:~/Documentos/Linux$ ./t2s.sh es hola
—————————
Speech Script by Dan Fountain
TalkToDanF@gmail.com
—————————
Playing line: 1 of 1
http_open: HTTP/1.0 400 Bad Request
http://translate.google.com: No such file or directory
tengo instalado el mpg123 y he hecho pruebecillas y nada…. gracias de antemano
Qué tal, este script me ha servido muy bien, tanto para escuchar el sonido como para grabar las palabras del traductor.
De hecho, he modificado el script para adapatarlo a una necesidad que tengo: Transformar una lista de palabras en texto (lemario) a voz; me guarde la voz en wav, convierta a ogg y les ponga el nombre según la palabra leída.
Esto lo hice en KDE usando Kdialog para especificar la ruta donde está el archivo con la lista de palabras y el directorio donde quiero que se guarde el audio de voz.
Cuando finaliza la conversión de WAV a OGG, me crea dos carpetas donde se guardan los wav por un lado y los ogg del otro.
En un principio me daba bronca porque no me leía correctamente las palabras con acentos, pero encontré que hay que agregar «es&ie=UTF8» en el código. Por un momento olvidé la codificación de caracteres.
Les dejo el código del script que realicé por si les sirve:
#######################################################################
#!/bin/bash
#################################
# Lemario de texto a voz #
# Adaptado por Ignacio Cruz Martínez #
# el correo es secreto xD #
#################################
#cuadro de diálogo de KDE para especificar ruta y nombre del lemario
soyunarchivo=$(kdialog –inputbox «Escriba la ruta y el nombre del archivo (con extensión si la tiene):»)
#cuadro de diálogo de KDE para especificar la carpeta destino de los archivos de voz
ruta=$(kdialog –inputbox «Escriba la ruta para guardar el audio de voz:»)
#mediante cat se leen todas las líneas del archivo de texto, cada línea consta de una sola palabra
for i in $(cat $soyunarchivo)
do
echo $i
#conversión a voz mediante google translate, no se olviden de la codificación para que lea acentos
mpg123 -q -w «$ruta»$i.wav «http://translate.google.com/translate_tts?tl=es&ie=UTF8&q=$i»
mpg123 -q «http://translate.google.com/translate_tts?tl=es&ie=UTF8&q=$i»
#usando ffmpeg para convertir los archivos wav a ogg
ffmpeg -i «$ruta»$i.wav -acodec libvorbis «$ruta»$i.ogg
done
#con estas líneas se crean las carpetas para organizar los archivos de voz en WAV u OGG
mkdir «$ruta»WAV
mv «$ruta»*.wav «$ruta»WAV
mkdir «$ruta»OGG
mv «$ruta»*.ogg «$ruta»OGG
#cuadro de diálogo KDE para indicar que se terminó el trabajo
kdialog –msgbox ‘Proceso terminado’
#####################################################################
Ahora bien, ¿alguno de ustedes tiene conocimiento sobre la licencia de uso de los archivos de voz generados?
Limitacione por derechos de autor y cosas relacionadas. Esto me interesa porque pienso usar algunos de estos archivos de voz para apoyar a personas que se van a alfabetizar, básicamente es un proyecto sin ánimo de lucro.
Y es que esta herramienta tiene la mejor entonación para lenguaje español, lamentablemente en linux no hay algo parecido. Mbrola me ha dado mucha lata para configurarse junto con Gespeaker.
Gracias y nos vemos.
Ni idea… habría que ver en las licencias de Google Translator.
No me funcionó el Script, al parecer es un problema relacionado con la URL, para quien le interese esta es la URL correcta:
http://translate.google.com/translate_tts?tl=es&q=Hola
Hola! He estado realizando pruebas con tu script y al ejecutarlo me ha dicho que no encontraba el audio, asique he metido la URL y parece que el señor google ha puesto un captcha…
actualicen el script