Linux :: Texto a voz (I) :: Portapapeles Imprimir
Tutoriales
Miércoles, 18 de Junio de 2014 00:00

clip2voz_esclip2voz_enclip2voz_stop

Esta serie de artículos está dedicada a facilitar la integración de funciones de texto a voz en Linux.

Los sistemas de texto a voz (text to speech o TTS en inglés) toman como base un texto y lo convierten en un archivo de audio (voz) que lee dicho texto.

Sus posibles beneficiarios son:

- Personas con una discapacidad visual.
- Personas con una discapacidad en el ámbito de la lectura, por ejemplo los disléxicos.
- Cualquiera que prefiera que sea el ordenador el que lea en voz alta un texto a tener que leerlo por él mismo.

Mi objetivo era crear algo lo más simple posible y que además no estuviera sujeto a dependencias de un sistema de escritorio concreto (Gnome, Kde, etc.) y pudiese funcionar en cualquier sistema linux, y que, por supuesto, fuera libre y gratuito.

En busca de la sencillez he creado dos scripts para ese fin con dos enfoques distintos y vamos a comenzar con el más sencillo y directo de los dos, dejando para el siguiente artículo el otro.

En Linux cuando seleccionamos un texto, este texto pasa inmediatamente al portapapeles. No necesitamos hacer clic con el botón derecho y elegir copiar o utilizar la combinación de teclas CTRL+C. El mero hecho de seleccionarlo hace que el texto ya esté en el portapapeles.

Las ventajas de este sistema es que podemos seleccionar texto de una página web en un navegador, o de un documento de OpenOffice o LibreOffice, o de un pdf (siempre que sea editable y nos permita seleccionar su contenido) y el texto estará incorporado al portapapeles. Cualquier texto que pueda ser seleccionado de cualquier programa podrá ser convertido a voz y el ordenador nos lo leerá.

En una primera aproximación a la cuestión utilicé el programa espeak, que es un sintentizador de voz, pero la voz resultante era demasiado sintética o robótica. La solución fue conectarlo a mbrola que tiene unas voces más naturales. Respecto a la gestión del contenido del portapapeles, he optado por un pequeño programa que se llama xclip. Para la reproducción del archivo de audio de la voz utilizo aplay, que es un reproductor de audio (archivos .wav) en consola que viene con el paquete alsa-utils, instalado por defecto en muchas distros como ubuntu o bodhi linux.

También he creado unos iconos para los scripts con blender, los que están al comienzo del artículo. Podéis usarlos si os apetece, les he puesto la licencia GPL.

Vamos a ponernos manos a la obra. Para que el script funcione, necesitamos instalar los siguientes programas y archivos: xclip, espeak, mbrola, mbrola-es1 y alsa-utils.

Abrimos una consola y escribimos:

sudo apt-get install xclip espeak mbrola mbrola-es1 alsa-utils

Una vez instalados estos archivos y programas, abre tu editor de textos favorito (yo uso gedit) y copia el siguiente script y pégalo en el editor de textos:

#!/bin/sh 
idioma="es1" 
archivo="/tmp/clip.clip" 
xclip -o > $archivo 
espeak -v mb-$idioma -s 130 -p 30 -f "$archivo" | mbrola -e /usr/share/mbrola/$idioma - - | aplay -q -r16000 -fS16_LE 
rm $archivo

Guarda el archivo con el nombre leerclip-es.sh. Respecto a dónde guardarlo, puedes hacerlo donde quieras, aunque te recomiendo que lo hagas en la carpeta bin de tu directorio de usuario, que es el directorio que usaremos en este ejemplo.

Deberás convertir el archivo en ejecutable. Para ello abre una terminal y situate en la carpeta ~/bin y escribe:

chmod +x leerclip-es.sh

Es posible que cuando estemos reproduciendo el contenido del portapapeles queramos cancelar la reproducción.

Para ello he creado otro script con este contenido:

#!/bin/sh
killall espeak
exit

Lo guardamos como parar-voz.sh en la carpeta bin de tu directorio de usuario y lo convertimos en ejecutable abriendo una consola, situándonos en ~/bin y escribiendo:

chmod +x parar-voz.sh

Ya tenemos los scripts que leeran el contenido del portapapeles y pararán la lectura.

Para probarlos, podemos hacerlo en un primer momento en la consola. Seguiremos estos pasos, estando en la carpeta ~/bin.

  1.  Abrimos un documento o una página web y seleccionamos su texto.
  2. Vamos a la consola y escribimos: ./leerclip-es.sh y pulsamos intro.
  3. El script debería empezar a leer tu texto, deberías oirlo por tus altavoces o auriculares.
  4. Volvemos a la consola y escribimos: ./parar-voz.sh y pulsamos intro.
  5. El script debería parar la reproducción.

Si todo funciona correctamente y te resultan útiles estos scripts, seguro que te interesará también el poder acceder a ellos de una forma más sencilla que a través de la consola.

Lo que he hecho yo ha sido crear unos accesos directos a esos scripts, de forma que pulsando un botón lee el portapapeles y pulsando otro lo para.

Dependiendo de tu sistema de escritorio en línux el método para crear estos accesos directos será una u otra, bien creando una entrada en el menú de aplicaciones, bien creando un lanzador personalizado...

En mi caso uso Bodhi linux, así que os contaré como hacerlo en  sistema de escritorio Enlightenment:

  1. Hago clic en culaquier zona libre del escritorio y aparece el menú.
  2. Voy a Preferencias -> Todo -> Aplicaciones -> Lanzadores personales de aplicaciones
  3. En la ventana que aparece pulso Añadir.
  4. En la siguiente, pestaña Básico, pongo: Nombre: Leeclip, Comentario: Lee el portapapeles, Aplicación: Aquí pulsa el botón con 3 puntos suspensivos y localiza el archivo leerclip-es.sh.
  5. Pestaña Icono: Haciendo clic en el cuadrado blanco aparece un navegador. Localiza el icono que quieras asignar al script y listo. Puedes usar los que están al comienzo de este tutorial.
  6. Pestaña General: Nombre genérico: Leeclip, Clase de ventana: nada (vacío), Categorías: AudioVideo;Audio;Player; y lo demás vacío.
  7. Pestaña Opciones: marcar la opción Mostrar en menús.
  8. Ahora ya podemos pulsar la opción de Aceptar o Aplicar y habremos creado nuestro lanzador personalizado para este script. 
  9. La aplicación Leeclip aparecerá en nuestro menú de aplicaciones y podemos ejecutarla con hacer clic.

Obviamente deberemos repetir estos pasos para crear otro lanzador personalizado para el script parar-voz.sh.

Por último, una aclaración sobre los idiomas. Este tutorial está realizado en base a un archivo de voz, que es el es1 de mbrola. Si te interesan otros idiomas, mbrola tiene otros disponibles que puedes instalar por medio de synaptic o de tu gestor de paquetes habitual escribiendo mbrola. Ten en cuenta que deberás cambiar en el script  leerclip-es.sh la línea que define el idioma: idioma="es1" por idioma="nombre del idioma elegido". Los nombres de los idiomas que instales están en /usr/share/mbrola.

Espero que el tutorial os haya sido de utilidad. En la segunda parte veremos un script que nos convierte a un archivo de audio cualquier texto escrito.

Nos vemos.
Comentarios (1)