+<?php
+/**
+ * Festival Wrapper class for the Festival Text To Speech Synthesis System
+ * @link http://www.ctsr.ed.ac.uk/projects/festival/
+ * @author Paul Scott (base design) + Roman Bazalevskiy (adaptation for multilingual+server environment)
+ * @package Festival
+ * @version 0.9
+ */
+class festival
+{
+
+ /**
+ * Method to wrap API calls to the festival tts engine
+ * This function will create an utterance and output it to $outputfile. '.wav';
+ * @author Paul Scott (base design) + Roman Bazalevskiy (adaptation for multilingual+server environment)
+ * @param $string
+ * @return waveform
+ */
+ function text2Wav($string,$lang = "ru")
+ {
+ //create a random number filename so that simultaneous users don't overwrite each other
+ $tempfilename = tempnam('/tmp','fest-');
+ $filename = $tempfilename . '.txt';
+ $outputfile = $tempfilename . '.wav';
+
+ if (!$handle = fopen($filename, "w"))
+ {
+ //we cannot open the file handle!
+ return false;
+ }
+ // Write $string to our opened file.
+ if (fwrite($handle, $string) === FALSE)
+ {
+ //couldn't write the file...Check permissions
+ return false;
+ }
+ //close the file handle - we are done with it
+ fclose($handle);
+
+ $prolog="/etc/festival/$lang.scm";
+ if (!file_exists($prolog)) {
+ $prolog="/etc/festival/default.scm";
+ }
+
+ //initialise and execute the festival C engine
+ //make sure that your environment is set to find the festival binaries!
+ $cmd = "festival_client --prolog $prolog --ttw $filename --output $outputfile";
+ //execute the command
+ exec($cmd);
+
+ //delete the text file (Temp)
+ unlink($filename);
+ //finally return the uptput file path and filename
+ return $outputfile;
+ }
+
+}//end class
+?>
\ No newline at end of file