fc23a4fc7b43cf6f62e4b4cb591b5232962e2f65
[atutor.git] / mods / atalker / admin / admin_voice.php
1 <?php
2 /****************************************************************/
3 /* ATalker                                                                                                      */
4 /****************************************************************/
5 /* Copyright (c) 2002-2005 by Greg Gay                                  */
6 /* Adaptive Technology Resource Centre / University of Toronto  */
7 /* http://atutor.ca                                                                                             */
8 /*                                                              */
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: admin_voice.php 5123 2005-07-12 14:59:03Z greg $
14
15 // This file contains the administrator's Manage Voice Files 
16
17         // Get the time to use as a default filename
18         $now = time();
19         $scheme_out = AT_SPEECH_DIR.$now.'.scm';
20
21         if($_POST['create'] && !$_GET['page']){
22                 if(!$_POST['check'] ){
23                                 $error = "TTS_NO_CHOICE_MADE";
24                                 $msg->addError($error);
25                 }
26         if(!$error){
27         
28                 foreach ($_POST['check'] as $lang_var){
29                         
30                         $file_recieve = AT_SPEECH_URL.$lang_var.'.'.$_POST['file_type'];
31                         $voice_file = AT_SPEECH_TEMPLATE_DIR.$lang_var.'.'.$_POST['file_type'];
32                         
33                         $sql = "SELECT * from ".TABLE_PREFIX."language_text WHERE language_code = '".$_SESSION['lang']."' AND term = '".$lang_var."'";
34                         $result = mysql_query($sql, $db);
35                         $row = mysql_fetch_row($result);
36
37                         //remove markup from text input if not processed as SABLE formatted text
38
39                         if($_POST['type'] != "sable"){
40                                 $row[3] = strip_tags($row[3]);
41                         }
42
43                         if($_POST['file_type'] == "mp3"){
44
45                                 $file_out = AT_SPEECH_DIR.$lang_var.'.wav';
46
47                                 //If SABLE is being used, generate the SABLE markup as the input file
48
49
50                                 if($_POST['type'] == "sable"){
51
52                                         $file_in =  AT_SPEECH_DIR.$lang_var.'.sable';                           
53                                         $sable_out = '
54 <?xml version="1.0"?>
55  <!DOCTYPE SABLE PUBLIC "-//SABLE//DTD SABLE speech mark up//EN" "Sable.v0_2.dtd"[]>
56   <SABLE>
57     <LANGUAGE ID="'.$_POST['language'].'" CODE="ISO-8859-1">
58      <SPEAKER NAME="'.$_POST['speaker'].'">
59       <PITCH BASE="'.$_POST['base'].'" MIDDLE="'.$_POST['middle'].'" RANGE="'.$_POST['range'].'">
60        <RATE SPEED="'.$_POST['rate'].'">
61         <VOLUMN LEVEL="'.$_POST['volumn'].'">';
62         $sable_out .= $row[3].".";
63         $sable_out .= '
64         </VOLUMN>
65        </RATE>
66       </PITCH>
67      </SPEAKER>
68     </LANGUAGE>
69   </SABLE>';
70
71
72                                         //write the SABLE file
73                                         $fp = fopen($file_in,'w');
74                                         if (!$fp) {
75                                                 echo _AT('AT_ERROR_TTS_NOT_CREATE_SABLE');
76                                                 exit;
77                                         }
78                                         fputs($fp, $sable_out);
79                                         fclose($fp);
80                                         $command = "text2wave $file_in -o $file_out -F 48000";
81                                 }else{
82                                         // If not SABLE being used, generate a standard scheme voice properties  file and input text file.
83                                         $file_in =  AT_SPEECH_DIR.$lang_var.'.txt';
84                                         $scheme_out = AT_SPEECH_DIR.$now.'.scm';
85                                         $file_props = "-mode --tts -eval ".$scheme_out;
86
87                                         $fp = fopen($file_in,'w');
88                                         if (!$fp) {
89                                                 echo _AT('AT_ERROR_TTS_NOT_CREATE_TEXT');
90                                                 exit;
91                                         }
92
93                                         fputs($fp, strip_tags($row[3]).'.');
94                                         fclose($fp);
95         
96                                         $command = "text2wave $file_props $file_in -o $file_out -F 48000  -scale ".$_POST['volumn']."";
97                                 }
98
99                                 $file_out_mp3 = AT_SPEECH_DIR.$lang_var.'.mp3';
100                                 
101                                 if(shell_exec('lame --longhelp')){
102                                         $command2 = 'lame --quiet '.$file_out.' '. $file_out_mp3;
103                                 }else if (shell_exec('bladeenc -h')) {
104                                         $command2 = 'bladeenc -quiet '.$file_out.' '. $file_out_mp3;    
105                                 }
106
107                                 escapeshellcmd($command);
108                                 escapeshellcmd($command2);
109                                 passthru($command);
110                                 passthru($command2);
111
112                                 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg')){
113                                                 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg');
114                                 }       
115
116                                 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3')){
117                                                 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3');
118                                 }                       
119
120                                 if(copy($file_recieve, $voice_file)){
121                                         $feedback =  TTS_FILE_SAVED;
122                                         $msg->addFeedback($feedback);
123                                 }else{
124                                         $error =  TTS_FILE_SAVE_FAILED;
125                                         $msg->addError($error);                         
126                                 }
127
128                         
129                         }else if($_POST['file_type'] == "ogg"){ 
130                                 $file_out = AT_SPEECH_DIR.$lang_var.'.wav';
131                         
132                                 if($_POST['type'] == "sable"){
133                                         $file_in =  AT_SPEECH_DIR.$lang_var.'.sable';                           
134                         
135                                         $sable_out = '
136 <?xml version="1.0"?>
137  <!DOCTYPE SABLE PUBLIC "-//SABLE//DTD SABLE speech mark up//EN" "Sable.v0_2.dtd"[]>
138   <SABLE>
139    <LANGUAGE ID="'.$_POST['language'].'" CODE="ISO-8859-1">
140     <SPEAKER NAME="'.$_POST['speaker'].'">
141      <PITCH BASE="'.$_POST['base'].'" MIDDLE="'.$_POST['middle'].'" RANGE="'.$_POST['range'].'">
142       <RATE SPEED="'.$_POST['rate'].'">
143        <VOLUMN LEVEL="'.$_POST['volumn'].'">';
144         $sable_out .= $row[3].".";
145         $sable_out .= '
146        </VOLUMN>
147       </RATE>
148      </PITCH>
149     </SPEAKER>
150    </LANGUAGE>
151   </SABLE>';
152                                         //write the SABLE file
153                                         $fp = fopen($file_in,'w');
154                                         if (!$fp) {
155                                                 echo _AT('AT_ERROR_TTS_NOT_CREATE_SABLE');
156                                                 exit;
157                                         }
158                                         
159                                         fputs($fp, $sable_out);
160                                         fclose($fp);
161                                         $command = "text2wave $file_in -o $file_out -F 48000";
162
163                                 } else{
164                                         // If not SABLE being used, generate a standard scheme file and input text file.
165                                         $file_in =  AT_SPEECH_DIR.$lang_var.'.txt';
166                                         $scheme_out = AT_SPEECH_DIR.$now.'.scm';        
167                                         $file_props = "-mode --tts -eval ".$scheme_out;
168
169                                         $fp = fopen($file_in,'w');
170                                         if (!$fp) {
171                                                 echo _AT('AT_ERROR_TTS_NOT_CREATE_TEXT');
172                                                 exit;
173                                         }
174                                         fputs($fp, $row[3].'.');
175                                         fclose($fp);    
176                                         $command = "text2wave $file_props $file_in -o $file_out -F 48000  -scale ".$_POST['volumn']."";
177                                 }
178
179
180                                 $file_out_ogg = AT_SPEECH_DIR.$lang_var.'.ogg';
181                                 $command2 = 'oggenc -quiet '.$file_out.' '. $file_out_ogg;
182
183                                 escapeshellcmd($command);
184                                 escapeshellcmd($command2);
185                                 passthru($command);
186                                 passthru($command2);
187
188                                 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3')){
189                                                 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3');
190                                 }
191
192                                 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg')){
193                                                 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg');
194                                 }
195
196                                 if(copy($file_recieve, $voice_file)){
197                                         $feedback =  TTS_FILE_SAVED;
198                                         $msg->addFeedback($feedback);
199                                 }else{
200                                         $error =  TTS_FILE_SAVE_FAILED;
201                                         $msg->addError($error);                         
202                                 }
203                                 
204                         }else if($_POST['file_type'] == "wav"){
205                                 $error =  TTS_NO_WAV_ALLOWED;
206                                 $msg->addError($error); 
207                         }
208                 }
209                 
210         }
211
212         }else if($_POST['remove'] && !$_GET['page']){
213         
214                 if(!$_POST['check']){
215                 
216                         $error =  array(TTS_FILES_REMOVED_CHECK);
217                         $msg->addError($error);
218                         
219                 }else{
220                 
221                         foreach ($_POST['check'] as $lang_var){
222                                 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.".ogg")){
223                                 
224                                         unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.".ogg");        
225                                         
226                                 }else if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.".mp3")){
227                                 
228                                         unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.".mp3");
229                                         
230                                 };
231                                 
232                         }
233         
234                         $feedback =  array(TTS_FILES_REMOVED);
235                         $msg->addFeedback($feedback);
236                         
237                 }
238
239         }
240
241 if($_GET['delete']){
242         if(unlink(AT_SPEECH_TEMPLATE_DIR.$_GET['delete'])){
243                 $feedback = FILE_DELETED;
244                 $msg->addFeedback($feedback);
245         }else{
246                 $error = TTS_FILE_DELETE_FAILED;
247                 $msg->addError($error);
248         }
249         unset($_GET['delete']);
250 }
251 ?>