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: admin_voice.php 5123 2005-07-12 14:59:03Z greg $
15 // This file contains the administrator's Manage Voice Files
17 // Get the time to use as a default filename
19 $scheme_out = AT_SPEECH_DIR.$now.'.scm';
21 if($_POST['create'] && !$_GET['page']){
22 if(!$_POST['check'] ){
23 $error = "TTS_NO_CHOICE_MADE";
24 $msg->addError($error);
28 foreach ($_POST['check'] as $lang_var){
30 $file_recieve = AT_SPEECH_URL.$lang_var.'.'.$_POST['file_type'];
31 $voice_file = AT_SPEECH_TEMPLATE_DIR.$lang_var.'.'.$_POST['file_type'];
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);
37 //remove markup from text input if not processed as SABLE formatted text
39 if($_POST['type'] != "sable"){
40 $row[3] = strip_tags($row[3]);
43 if($_POST['file_type'] == "mp3"){
45 $file_out = AT_SPEECH_DIR.$lang_var.'.wav';
47 //If SABLE is being used, generate the SABLE markup as the input file
50 if($_POST['type'] == "sable"){
52 $file_in = AT_SPEECH_DIR.$lang_var.'.sable';
55 <!DOCTYPE SABLE PUBLIC "-//SABLE//DTD SABLE speech mark up//EN" "Sable.v0_2.dtd"[]>
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].".";
72 //write the SABLE file
73 $fp = fopen($file_in,'w');
75 echo _AT('AT_ERROR_TTS_NOT_CREATE_SABLE');
78 fputs($fp, $sable_out);
80 $command = "text2wave $file_in -o $file_out -F 48000";
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;
87 $fp = fopen($file_in,'w');
89 echo _AT('AT_ERROR_TTS_NOT_CREATE_TEXT');
93 fputs($fp, strip_tags($row[3]).'.');
96 $command = "text2wave $file_props $file_in -o $file_out -F 48000 -scale ".$_POST['volumn']."";
99 $file_out_mp3 = AT_SPEECH_DIR.$lang_var.'.mp3';
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;
107 escapeshellcmd($command);
108 escapeshellcmd($command2);
112 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg')){
113 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg');
116 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3')){
117 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3');
120 if(copy($file_recieve, $voice_file)){
121 $feedback = TTS_FILE_SAVED;
122 $msg->addFeedback($feedback);
124 $error = TTS_FILE_SAVE_FAILED;
125 $msg->addError($error);
129 }else if($_POST['file_type'] == "ogg"){
130 $file_out = AT_SPEECH_DIR.$lang_var.'.wav';
132 if($_POST['type'] == "sable"){
133 $file_in = AT_SPEECH_DIR.$lang_var.'.sable';
136 <?xml version="1.0"?>
137 <!DOCTYPE SABLE PUBLIC "-//SABLE//DTD SABLE speech mark up//EN" "Sable.v0_2.dtd"[]>
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].".";
152 //write the SABLE file
153 $fp = fopen($file_in,'w');
155 echo _AT('AT_ERROR_TTS_NOT_CREATE_SABLE');
159 fputs($fp, $sable_out);
161 $command = "text2wave $file_in -o $file_out -F 48000";
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;
169 $fp = fopen($file_in,'w');
171 echo _AT('AT_ERROR_TTS_NOT_CREATE_TEXT');
174 fputs($fp, $row[3].'.');
176 $command = "text2wave $file_props $file_in -o $file_out -F 48000 -scale ".$_POST['volumn']."";
180 $file_out_ogg = AT_SPEECH_DIR.$lang_var.'.ogg';
181 $command2 = 'oggenc -quiet '.$file_out.' '. $file_out_ogg;
183 escapeshellcmd($command);
184 escapeshellcmd($command2);
188 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3')){
189 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.mp3');
192 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg')){
193 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.'.ogg');
196 if(copy($file_recieve, $voice_file)){
197 $feedback = TTS_FILE_SAVED;
198 $msg->addFeedback($feedback);
200 $error = TTS_FILE_SAVE_FAILED;
201 $msg->addError($error);
204 }else if($_POST['file_type'] == "wav"){
205 $error = TTS_NO_WAV_ALLOWED;
206 $msg->addError($error);
212 }else if($_POST['remove'] && !$_GET['page']){
214 if(!$_POST['check']){
216 $error = array(TTS_FILES_REMOVED_CHECK);
217 $msg->addError($error);
221 foreach ($_POST['check'] as $lang_var){
222 if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.".ogg")){
224 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.".ogg");
226 }else if(file_exists(AT_SPEECH_TEMPLATE_DIR.$lang_var.".mp3")){
228 unlink(AT_SPEECH_TEMPLATE_DIR.$lang_var.".mp3");
234 $feedback = array(TTS_FILES_REMOVED);
235 $msg->addFeedback($feedback);
242 if(unlink(AT_SPEECH_TEMPLATE_DIR.$_GET['delete'])){
243 $feedback = FILE_DELETED;
244 $msg->addFeedback($feedback);
246 $error = TTS_FILE_DELETE_FAILED;
247 $msg->addError($error);
249 unset($_GET['delete']);