En este post doy por hecho que sabemos hacer la instalación del servicio de Festival en nuestro equipo linux, si no es así siempre podéis pasar por Festival, de texto a voz en linux.
Después de unos post "filosóficos" hoy pasamos nuevamente a la parte ténica, en donde con un par de ficheros podremos generar un fichero mp3 sintetizado con Festival mediante un texto de un formulario web.
El ejemplo que expongo a continuación es una página web sencilla que tras rellenar el texto en un textarea lo envía a si misma y retorna la descarga de un fichero mp3 con el texto sintetizado, siempre que tengamos el servicio de festival configurado.
El ejemplo de página web sería:
-
<?php
-
if($_POST['texto']){
-
$txtFile=$filename;
-
$mp3File=$filename.".mp3";
-
}
-
}
-
echo $mp3;
-
}
-
}else{
-
?>
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-
-
<html>
-
<head>
-
<title>Demo</title>
-
</head>
-
<body>
-
<h1>Demo</h1>
-
<form action="" method="post">
-
<textarea name="texto" rows="10" cols="50"></textarea>
-
<br />
-
<input type="submit" name="enviar" value="enviar" />
-
</form>
-
</body>
-
</html>
-
<?
-
}
-
-
?>
Como podemos ver, lanzamos un script para generar el fichero mp3, que es la parte más importante ya que cualquier programador y más si hablamos de alguien experto en PHP puede observar que el código es realmente sencillo. Pero lo más divertido fue crear el script sh para generar el fichero mp3.
-
#!/bin/sh
-
TEXT=`cat $1`
-
PAR1="(Parameter.set 'Wavefiletype 'riff)\n"
-
PAR2="(let ((utt (Utterance Text \"$TEXT\"))) (begin (utt.synth utt) (utt.save.wave utt \"$1.wav\"))) \n"
-
echo Inicio festival!
-
echo $PAR1$PAR2 | festival -b --pipe --language spanish
-
lame -hf $1.wav $1.mp3
-
rm $1.wav
Aquí en el script, lo que hacemos es indicarle a Festival que la salida la queremos en un fichero Wav. De todas formas no tenemos todo resuelto! tenemos que generar el mp3, y con lame lo hacemos de una manera sencilla :-)
Espero que os pueda ser de utilidad esta mini-receta, cualquier duda siempre podéis plasmarla en un comentario.