2e48b3187c8e0110f3ed68bf73b512bc0c103d71
[php.git] / festival-php / festival_class_inc.php
1 <?php
2 /**
3  * Festival Wrapper class for the Festival Text To Speech Synthesis System
4  * @link http://www.ctsr.ed.ac.uk/projects/festival/
5  * @author Paul Scott (base design) + Roman Bazalevskiy (adaptation for multilingual+server environment)
6  * @package Festival
7  * @version 0.9
8  */
9 class festival
10 {
11         
12         /**
13          * Method to wrap API calls to the festival tts engine
14          * This function will create an utterance and output it to $outputfile. '.wav';
15          * @author Paul Scott (base design) + Roman Bazalevskiy (adaptation for multilingual+server environment)
16          * @param $string
17          * @return waveform
18          */
19         function text2Wav($string,$lang = "ru")
20         {
21                 //create a random number filename so that simultaneous users don't overwrite each other
22                 $tempfilename = tempnam('/tmp','fest-');
23                 $filename = $tempfilename . '.txt';
24                 $outputfile = $tempfilename . '.wav';
25                 
26                 if (!$handle = fopen($filename, "w")) 
27                 {
28                         //we cannot open the file handle!
29                         return false;
30                 }
31                 // Write $string to our opened file.
32                 if (fwrite($handle, $string) === FALSE) 
33                 {
34                         //couldn't write the file...Check permissions
35                         return false;
36                 }
37                 //close the file handle - we are done with it
38                 fclose($handle);
39                 
40                 $prolog="/etc/festival/$lang.scm";
41                 if (!file_exists($prolog)) {
42                         $prolog="/etc/festival/default.scm";
43                 }
44                 
45                 //initialise and execute the festival C engine
46                 //make sure that your environment is set to find the festival binaries!
47                 $cmd = "festival_client --prolog $prolog --ttw $filename --output $outputfile";
48                 //execute the command
49                 exec($cmd);
50                 
51                 //delete the text file (Temp)
52                 unlink($filename);
53                 //finally return the uptput file path and filename
54                 return $outputfile;
55         }
56         
57 }//end class
58 ?>