lunes, 17 de junio de 2019

LECTOR (POR AUDIO) DE FICHEROS DE TEXTO CON "win32com" EN PYTHON.

En el presente artículo, vamos a crear un sencillo programa que sea capaz de leer (mediante salida de audio) el contenido de un fichero de texto (de extensión ".txt") que nosotros, previamente le indiquemos.

Para la cofección de nuestro programa, vamos a hacer uso de la librería para "Windows", "win32com". Puesto que lo que queremos es generar una salida de audio, lo primero que haremos será importar la referida librería del modo que ya conocemos:

lt1
Para aquellos que aún no tengáis instalada esta librería, tendréis que instalar "pywin32" o "pypwin32" haciendo uso del módulo "pip".

iiii.png

En realidad, este es el único recurso externo que vamos a emplear en la confección de nuestro programa. Por lo cual, pasaremos a definir una función (de nombre "conti", relacionada con la introducción de opciones) cuya razón de ser explicaremos en su momento:

lt1

Tras ello, empezaremos a preparar nuestro programa para que sea capaz de generar audio a partir de texto escrito con "win32com". Esto lo haremos creando el objeto "speak" que se encargará de llevar a cabo tal acción. Como se ve en la imagen, eso lo haremos escribiendo "speak=wc.Dispatch("Sapi.SpVoice")":

lt2

Con lo visto hasta ahora, nuestro programa ya está listo para generar audio a partir de texto. En las líneas siguientes lo que haremos será indicarle la información que queremos que "lea". Para ello, lo que haremos será pedir a nuestro hipotético usuario, que introduzca el nombre (sin la extensión, la cual, añadiremos nosotros mismos al input) del fichero de texto que desea que nuestro programa reproduzca. Dicha información se almacenará en una variable a la que hemos dado el nombre de "texto":

lt3

Una vez declarada la variable "texto" nuestro programa, lo primero que tendrá que hacer es abrir dicho fichero. No obstante, existe la posibilidad que (por algún error a la hora de introducir el nombre del fichero) nuestro programa no pueda abrirlo al no encontrarlo. Dicha situación tendrá que ser prevista de algún modo. Para ello utilizaremos una sentencia "try" mediante le indicamos a nuestro programa que "intente" la apertura de dicho archivo, de modo que si no puede completar esta operación ("except: ") nos muestre el correspondiente mensaje de error:

lt4

De este modo, hacemos que para el caso de no poderse abrir el fichero pedido (por estar mal escrito o no encontrarse ubicado en el lugar correcto), el programa nos muestre un mensaje advirtiendo al usuario de que dicho archivo no ha sido encontrado, y dando a su vez, la posibilidad de continuar o finalizar el programa (para lo cual el usuario tendrá que introducir "n" o "s" de acuerdo a la información requerida por la función "conti", a la que me referí con anterioridad).

Animated GIF-downsized_large (3)

Bien, una vez que tenemos previsto como ha de actuar nuestro programa para el caso que no encuentre el fichero pedido por el usuario, pasaremos a programar el supuesto en el que el programa si pueda encontrar y abrir dicho fichero. En tal caso, lo que nuestro código ha de hacer es proceder a la lectura de dicho fichero, leyéndolo línea a línea. Para ello emplearemos el método que, en su momento vimos en la serie dedicada a la gestión de ficheros de texto con python (a la que me remito al final). De tal modo, que para recorrer las líneas que compongan el archivo ".txt", escribiremos:

lt5

Como se ve, lo que estamos haciendo es usar un ciclo "for" que irá recorriendo las lineas de las que se compone el texto a leer, tal y como vimos en su momento cuando hablábamos de ficheros de texto. En aquella ocasión para cada lectura de línea, imprimíamos su contenido (mediante la sentencia "print"). No obstante, en este caso lo que queremos es generar un audio que recite el contenido de la misma. Por ello, en este caso, donde antes usábamos "print", haremos una llamada a la variable "speak" que, tal y como veíamos anteriormente, era la que contenía el objeto que producía la salida de audio:

lt6

De ese modo, el programa aplicara la función ".Speak" al contenido de la variable "linea" (el cual, se corresponde con el texto contenido en cada una de las líneas de texto que componen el archivo ".txt").

Así, si le pedimos a nuestro programa que reproduzca (por audio) el contenido de un archivo de nombre, por ejemplo, "new york.txt", que se encuentre ubicado en nuestra carpeta python, se procederá a leer, línea a línea, dicho archivo (mediante salida de audio).

EJECUCIÓN EN CONSOLA DURANTE LA LECTURA DE UN ARCHIVO
Animated GIF-downsized_large (2)

En lo referente a la lectura del archivo, cabe hacer referencia al hecho de que la pronunciación que tenga el audio, viene determinada por el idioma que venga establecido como predeterminado en el sistema operativo "windows" del que se trate. esto es importante tenerlo en cuenta, debido a que si hacemos que nuestro programa lea un texto en español, siendo el idioma preestablecido el, por ejemplo, inglés, la lectura del mismo, no producirá ningún error, pero si que sonará bastante raro.

lt
Como puede apreciarse en el código sobre estas líneas, una vez finalizada la lectura del fichero de texto, daremos al usuario la posibilidad de continuar o finalizar la ejecución del programa, haciendo uso de la función "conti" que ya definimos al comienzo.

Animated GIF-downsized_large (5)

Podéis ver el código completo del este programa en el siguiente enlace de github:
https://github.com/antonioam82/text-reader/blob/master/text_reader.py


Saludos.

No hay comentarios:

Publicar un comentario