#!/bin/sh
# txt2mp3 - convert ebooks to audiobooks (text files to mp3 audio files)
# v0.9
# TODO: remover os números de página, não soletrar acrônimos nem abreviações (ex.: OK, Dr.)
# BR4 female http://tcts.fpms.ac.be/synthesis/mbrola/dba/br4/br4.zip
#
# (c) 2008 Everthon Valadão <everthonvaladao@gmail.com> under the GPL
# http://www.gnu.org/copyleft/gpl.html
#
# OBS.: primeiramente é necessário instalar os pré-requisitos
# sudo apt-get -y install espeak lame xpdf-utils odt2txt antiword
# sudo apt-get -y install mbrola mbrola-br1 #mbrola-br3
#
# para testar se a instalação foi bem sucedida, execute em um terminal:
# echo echo 'teste, teste, funciona!' | espeak -v mb-br1
#
# dependendo de sua versão do Ubuntu (< 10.04), pode ser necessário instalar o MBROLA manualmente:
# cd /tmp
# wget http://tcts.fpms.ac.be/synthesis/mbrola/bin/pclinux/mbrola3.0.1h_i386.deb && sudo dpkg -i mbrola3.0.1h_i386.deb
# wget -c http://tcts.fpms.ac.be/synthesis/mbrola/dba/br3/br3-000119.zip && unzip -x br3-000119.zip
# sudo mkdir -p /usr/share/mbrola/voices && sudo mv br3/br3 /usr/share/mbrola/voices
TXT_FILE="$1"
BASENAME=`echo "$TXT_FILE" | sed "s/\(.*\)\(\....$\)/\1/g"`
echo "TTS (text-to-speach) ${TXT_FILE}"
ext=${1##*.}
# if it isn`t a TXT file, convert it first
if [ "$ext" != "txt" ] ; then
TMP_FILE="/tmp/espeakfile-$$.txt"
# PDF
if [ "$ext" = "pdf" ] ; then
echo "converting from PDF to TXT"
pdftotext "${TXT_FILE}" "${TMP_FILE}"
fi
# ODT
if [ "$ext" = "odt" ] ; then
echo "converting from ODT to TXT"
odt2txt --subst=all "${TXT_FILE}" > "${TMP_FILE}"
fi
# DOC
if [ "$ext" = "doc" ] ; then
echo "converting from DOC to TXT"
antiword "${TXT_FILE}" > "${TMP_FILE}"
fi
TXT_FILE="${TMP_FILE}"
fi
sed -i 's/^[ ]*[0-9]*[ ]*$//g' "${TXT_FILE}"
rm -f "${BASENAME}_VBR.mp3"
## create a FIFO "named pipe" to save space, so espeak write output to a pipe while lame encodes the file on the fly
rm -f /tmp/voice.wav
mkfifo /tmp/voice.wav
## utiliza o sintetizador do mbrola (soa mais "humano")
nice espeak -v mb-br1 -f "${TXT_FILE}" -s 145 -w /tmp/voice.wav 2>/dev/null & \
## ??? the updated versions of espeak do not pass the phonetics to mbrola, but use it directly
#nice espeak -v mb-br3 -f "${TXT_FILE}" | mbrola -t 1.0 -e /usr/share/mbrola/br3/br3 - /tmp/voice.wav 2>/dev/null & \
## OBS.: para controlar a velocidade, altere o parâmetro -t para 1.2 (mais lento), 1.0 (normal) ou 0.9 (mais rápido)
## ALTERNATIVA: caso o MBROLA não esteja disponível, é possível utilizar somente o sintetizador do espeak (soa meio robotizado)
# nice espeak -v brazil+f3 -p 25 -f "${TXT_FILE}" -w /tmp/voice.wav & \
## converte pra mp3
xterm -e nice lame -a --resample 16 -V 9 --vbr-new --lowpass 8 -f /tmp/voice.wav -o "${BASENAME}_VBR.mp3"
echo "...done! Voice saved as ${1}.mp3"