Ahora que he hecho el proceso completo al menos una vez, creo estar en condiciones de echar el cuento de cómo producir un audiolibro en GNU/Debian(testing)/Linux. Se supone que disponemos de un libro -o cualquier otro texto- en formato PDF, al final se obtiene un cierto número de archivos mp3 u ogg que pueden escucharse en la computadora o en un tocador portátil de esos formatos.
Los programas requeridos -aparte de las herramientas normales del terminal- son:
-
festival (incluye text2wave y voz en español),
-
pdftotext o ps2text , y
-
lame para producir MP3.
Primero, hay que convertir el archivo PDF a texto y el problema puede estar en la codificación
del texto. En esta máquina la codificación predeterminada es iso-8859-1 o Latin1. También puede
pasar que la conversión no se pueda realizar porque el conversor no “conoce” la codificación.
En ese caso, hay que agregar la línea textEncoding Latin1
en el archivo de configuración de
xpdf, en debian está en: /etc/xpdf/xpdfrc
. Así que hay dos opciones:
-
pdftotext -enc Latin1 archivo.PDF
-
pstotext -output archivo.txt archivo.pdf
Después de probar ambas, me quedo con la última. ps2text hace un mejor trabajo de conversión del texto a Latin1 (de hecho es lo que hace de forma predeterminada), elimina caracteres ocultos y deja el texto más limpio (por ejemplo, convierte los guiones largos en —). Este proceso tarda unos pocos segundos.
Pero el conversor de texto a voz comete actualmente algunos errores intolerables, como no
entender los signos ¿ (pronuncia “equis” y deletrea la palabra que sigue). Así que hay que
pulir el texto, esto es, corregir la ortografía (los acentos y demás detalles son importantes
para la pronuciación correcta) y eliminar los caracteres no pronunciables o que causan esos
errores en el robot-lector, en el caso que nos ocupa ¿ ¡ - y similares. Para ello se puede
hacer un pequeño libreto (script) con sed
, como líneas como esta: sed -i -e 's/¿/ /g' archivo.txt
.
Una vez pulido el texto, ya se puede enviar al lector, pero el resultado sería un solo archivo excesivamente largo si se trata de un libro (unas 300 páginas pueden llevar a 200 megabytes de archivo de sonido y eso en un formato comprimido). Así que es preferible ‘picar’ o dividir el texto original en trozos para que sea más sencillo detener al lector y llegar a un punto dado.
Para dividir el archivo ya corregido en pedazos de (por ejemplo) 300 líneas:
split -l 300 -d archivo.txt prefijo
.
El ‘prefijo’ es el nombre que tendrán los archivos divididos seguidos de un número secuencial,
por lo tanto esa orden crea una serie de archivos con nombre prefijo01, prefijo02, etc. Si
text2wave se confunde con los nombres de los archivos, se les puede agregar la extensión .txt
de forma automática así: rename 's/\$/.txt/' prefijo\*
Hasta aquí, no se ha producido ningún sonido, aparte del típico repiqueteo del teclado. Ahora hay que ordenarle a text2wave que vaya leyendo cada uno de los archivos
text2wave prefijo04.txt -o archivodesonido04.wav
.
Pero, puede pasar -así fue en este caso- que el lector predeterminado no sea el que queremos.
Para hacer que la voz elegida por text2wave para leer sea la que realmente se desea hay que
modificar -o crear, si no existe- un archivo llamado .festivalrc
y colocar esta línea:
(set! voice_default 'voice_el_diphone)
: la voz “el_diphone” que corresponde a un lector
español será la que haga el trabajo; de otro modo muy bien puede suceder que el lector sea un
gringo y la lectura será consecuentemente errada. Además, es preferible hacer de una vez la
conversión a un formato portátil, sea MP3 u Ogg, de una de estas formas:
-
text2wave prefijo01.txt | lame - prefijo01.mp3
-
text2wave prefijo01.txt | oggenc - -o prefijo01.ogg
Ya que pueden resultar muchos archivos (entre 10 y 100, dependiendo de la longitud que hayamos decidido poner como norma) es mejor hacer un libreto o script, algo como:
cuenta=1 for i in `ls prefijo*` do text2wave $i |\
lame - prefijo${cuenta}.mp3 cuenta=`expr $cuenta + 1` done `
Lo que queda es esperar un rato; según mi cuenta, aproximadamente una décima parte del tiempo de lectura real. Es decir, si la lectura del libro completo dura unas 30 horas, el proceso de conversión de texto a voz tardará unas tres; de hecho algo menos, dependerá de la velocidad de la máquina y demás detalles.