Use the following tools Mbrola: .pho files -> .wav files FreeTTS: text -> .pho files, then calls Mbrola Lame: .wav -> .mp3 ttsprep: Prepares text files for FreeTTS. MBrola: Install the binary system (will need path below). Install voices us1, us2, us3. The language binary files must reside at locations like $MBROLA_HOME/us1/us1. FreeTTS: Sym link $FREETTS_HOME/mbrola/mbrola.jar to $FREETTS_HOME/lib java -cp /usr/local/voice/FreeTTS/classes -Dmbrola.base=/usr/local/voice/mbrola com.sun.speech.freetts.FreeTTS -file /tmp/soab.txt -voice mbrola2 java -cp /usr/local/voice/FreeTTS/classes -Dmbrola.base=/usr/local/voice/mbrola com.sun.speech.freetts.FreeTTS -file ortho01.mid -voice mbrola2 -dumpAudio ortho01.wav (Version 1.2 of FreeTTS not working, at least not the instructions for java -jar ../freetts.jar... and java -jar .../mbrola.jar). Lame: lame --tt 'Chapter 1' --ta 'G.K. Chesterton' --tl Orthodoxy --tg Speech --ty 1908 --tn 1 ortho01.wav ortho01.mp3 txt2wav = ttsprep + FreeTTS: ttsprep file.txt | java -cp /usr/local/voice/FreeTTS/classes -Dmbrola.base=/usr/local/voice/mbrola com.sun.speech.freetts.FreeTTS -voice mbrola2 -dumpAudio file.wav SPLITTING input text files java -DFILLOUT=3 BLSplit $HOME/mp3/aloj/aloj.txt 3000 That would write files to $PWD of size >= 3000, broken on blank lines, with names like aloj001.txt, etc. txt2waving a set of files: for file in aloj???.txt; do txt2wav $file || break; echo -e -n .; done; echo