mode = 'rhvoice'; $this->pitch = -0.1; $this->speed = -0.3; $this->display = ":99"; } function text2Wav($string,$lang = "ru") { $redis = new Redis(); $hash =''; if ($redis->pconnect('127.0.0.1', 6379, 2.5)) { $hash="voice-".hash("sha256","$lang-$string"); $result=$redis->get($hash); if ($result) { return $result; } } if ($this->mode == 'festival') { $prolog="/etc/festival/$lang.scm"; if (!file_exists($prolog)) { $prolog="/etc/festival/default.scm"; } //make sure that your environment is set to find the festival binaries! $cmd = "festival_client --prolog $prolog --ttw | lame -f - -"; } elseif ($this->mode == 'rhvoice') { $cmd = "DISPLAY=".$this->display." RHVoice-client -s Anna+CLB -r ".$this->speed." -p ".$this->pitch." | lame -f - -"; } print $cmd; //execute the command $descriptorspec = array( 0 => array("pipe", "r"), // stdin is a pipe that the child will read from 1 => array("pipe", "w"), // stdout is a pipe that the child will write to 2 => array("pipe", "w") // stderr is a file to write to ); $cwd = '/tmp'; $env = array(); $process = proc_open($cmd, $descriptorspec, $pipes, $cwd, $env); if (is_resource($process)) { fwrite($pipes[0],$string); fclose($pipes[0]); $data = stream_get_contents($pipes[1]); fclose($pipes[1]); fclose($pipes[2]); $proc_result = proc_close($process); } if (!$proc_result) { if ($hash) { $redis->set($hash,$data); } return $data; } else { return ''; } } }//end class ?>