2 /****************************************************************/
4 /****************************************************************/
5 /* Copyright (c) 2002-2005 by Greg Gay */
6 /* Adaptive Technology Resource Centre / University of Toronto */
9 /* This program is free software. You can redistribute it and/or*/
10 /* modify it under the terms of the GNU General Public License */
11 /* as published by the Free Software Foundation. */
12 /****************************************************************/
13 // $Id: index.php 5123 2005-07-12 14:59:03Z greg $
15 // Get the time to use as a default filename
17 $scheme_out = AT_SPEECH_DIR.$now.'.scm';
18 //$sable_in= AT_SPEECH_DIR.$now.'.sable';
19 // Build the Scheme file. Lots more can be done here to customize voices
21 if($_POST['type'] != "sable"){
23 $scheme_in .= $_POST['voice'];
26 $scheme_in .= "Parameter.set 'Duration_Stretch ".$_POST['duration'];
29 // create a scheme file with the voice properties
30 $fp = fopen($scheme_out,'w');
32 echo _AT(AT_ERROR_TTS__NOT_CREATE_SCHEME);
35 fputs($fp, $scheme_in);
39 if($_POST['create'] && !$_GET['page']){
41 if($_POST['file_type'] == "mp3"){
42 if(shell_exec('lame --longhelp')){
43 $command2 = 'lame --quiet '.$file_out.' '. $file_out_mp3;
44 }else if (shell_exec('bladeenc -h')) {
45 $command2 = 'bladeenc -quiet '.$file_out.' '. $file_out_mp3;
47 $error = "TTS_MP3_ENCODER";
48 $msg->addError($error);
51 if($_POST['file_type'] == "ogg"){
53 $command = 'oggenc --version';
54 $command = escapeshellcmd($command);
56 if(shell_exec($command) == ''){
57 $error = "TTS_OGG_ENCODER";
58 $msg->addError($error);
60 $command2 = 'oggenc -quiet '.$file_out.' '. $file_out_ogg;
65 foreach ($_POST['check'] as $lang_var){
67 $file_recieve = AT_SPEECH_URL.$lang_var.'.'.$_POST['file_type'];
68 $voice_file = AT_SPEECH_TEMPLATE_DIR.$lang_var.'.'.$_POST['file_type'];
70 $sql = "SELECT * from ".TABLE_PREFIX."language_text WHERE language_code = '".$_SESSION['lang']."' AND term = '".$lang_var."'";
71 $result = mysql_query($sql, $db);
72 $row = mysql_fetch_row($result);
74 if($_POST['file_type'] == "mp3"){
75 //$file_in = AT_SPEECH_DIR.$lang_var.'.sable';
76 $file_out = AT_SPEECH_DIR.$lang_var.'.wav';
77 //If SABLE is being used, generate the SBALE markup as the input file
78 if($_POST['type'] == "sable"){
79 $file_in = AT_SPEECH_DIR.$lang_var.'.sable';
80 $sable_out = '<?xml version="1.0"?>
81 <!DOCTYPE SABLE PUBLIC "-//SABLE//DTD SABLE speech mark up//EN" "Sable.v0_2.dtd"[]>
83 <LANGUAGE ID="'.$_POST['language'].'" CODE="ISO-8859-1">
84 <SPEAKER NAME="'.$_POST['speaker'].'">
85 <PITCH BASE="'.$_POST['base'].'" MIDDLE="'.$_POST['middle'].'" RANGE="'.$_POST['range'].'">
86 <RATE SPEED="'.$_POST['rate'].'">
87 <VOLUMN LEVEL="'.$_POST['volumn'].'">';
88 $sable_out .= $row[3].".";
96 //write the SABLE file
97 $fp = fopen($file_in,'w');
99 echo _AT(AT_ERROR_TTS__NOT_CREATE_SABLE);
102 fputs($fp, $sable_out);
104 $command = "text2wave $file_in -o $file_out -F 48000";
106 // If not SABLE being used, generate a standard scheme file and input text file.
107 $file_in = AT_SPEECH_DIR.$lang_var.'.txt';
108 $scheme_out = AT_SPEECH_DIR.$now.'.scm';
109 $file_props = "-mode --tts -eval ".AT_SPEECH_DIR.$now.".scm";
110 $fp = fopen($file_in,'w');
112 echo _AT(AT_ERROR_TTS__NOT_CREATE_TEXT);echo 'Unable to create '.$name.' Text file.';
115 fputs($fp, $row[3].'.');
117 $command = "text2wave $file_props $file_in -o $file_out -F 48000 -scale ".$_POST['volumn']."";
121 $file_out_mp3 = AT_SPEECH_DIR.$lang_var.'.mp3';
123 if(shell_exec('lame --longhelp')){
124 $command2 = 'lame --quiet '.$file_out.' '. $file_out_mp3;
125 }else if (shell_exec('bladeenc -h')) {
126 $command2 = 'bladeenc -quiet '.$file_out.' '. $file_out_mp3;
128 escapeshellcmd($command);
129 escapeshellcmd($command2);
133 if(!copy($file_recieve, $voice_file)){
134 $error = TTS_FILE_SAVE_FAILED;
135 $msg->addError($error);
140 }else if($_POST['file_type'] == "ogg"){
141 $file_out = AT_SPEECH_DIR.$lang_var.'.wav';
143 if($_POST['type'] == "sable"){
144 $file_in = AT_SPEECH_DIR.$lang_var.'.sable';
146 $sable_out = '<?xml version="1.0"?>
147 <!DOCTYPE SABLE PUBLIC "-//SABLE//DTD SABLE speech mark up//EN" "Sable.v0_2.dtd"[]>
149 <LANGUAGE ID="'.$_POST['language'].'" CODE="ISO-8859-1">
150 <SPEAKER NAME="'.$_POST['speaker'].'">
151 <PITCH BASE="'.$_POST['base'].'" MIDDLE="'.$_POST['middle'].'" RANGE="'.$_POST['range'].'">
152 <RATE SPEED="'.$_POST['rate'].'">
153 <VOLUMN LEVEL="'.$_POST['volumn'].'">';
154 $sable_out .= $row[3].".";
162 //write the SABLE file
163 $fp = fopen($file_in,'w');
165 echo _AT(AT_ERROR_TTS__NOT_CREATE_SABLE);
169 fputs($fp, $sable_out);
171 $command = "text2wave $file_in -o $file_out -F 48000";
175 $file_props = "-mode --tts -eval ".AT_SPEECH_DIR.$now.".scm";
176 $file_out_ogg = AT_SPEECH_DIR.$lang_var.'.ogg';
177 $command2 = 'oggenc -quiet '.$file_out.' '. $file_out_ogg;
179 escapeshellcmd($command);
180 escapeshellcmd($command2);
184 if(!copy($file_recieve, $voice_file)){
185 $error = TTS_FILE_SAVE_FAILED;
186 $msg->addError($error);
191 }else if($_POST['file_type'] == "wav"){
192 $error = TTS_NO_WAV_ALLOWED;
193 $msg->addError($error);
197 $feedback = array(TTS_VOICE_SAVED);
198 $msg->addFeedback($feedback);
201 }else if($_POST['remove'] && !$_GET['page']){
203 if(!$_POST['check']){
204 $error = array(TTS_FILES_REMOVED_CHECK);
205 $msg->addError($error);
208 foreach ($_POST['check'] as $lang_var){
209 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.".ogg")){
211 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.".ogg");
213 }else if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.".mp3")){
215 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.".mp3");
220 $feedback = array(TTS_FILES_REMOVED);
221 $msg->addFeedback($feedback);