00001 #include "loquendo_tts_driver.h" 00002 00003 #include "exceptions.h" 00004 #include "loquendo_tts_exceptions.h" 00005 00006 LoquendoTtsDriver::LoquendoTtsDriver(void) 00007 { 00008 tts = NULL; 00009 setDriverId("loquendo_tts"); 00010 } 00011 00012 bool LoquendoTtsDriver::openDriver(void) 00013 { 00014 try 00015 { 00016 this->lock(); 00017 tts = new CLoquendoTTS(config_.speaker); 00018 this->unlock(); 00019 } 00020 catch(CException &e) 00021 { 00022 ROS_FATAL("'%s'", e.what().c_str()); 00023 this->unlock(); 00024 00025 return false; 00026 } 00027 00028 return true; 00029 } 00030 00031 bool LoquendoTtsDriver::closeDriver(void) 00032 { 00033 delete tts; 00034 return true; 00035 } 00036 00037 bool LoquendoTtsDriver::startDriver(void) 00038 { 00039 return true; 00040 } 00041 00042 bool LoquendoTtsDriver::stopDriver(void) 00043 { 00044 return true; 00045 } 00046 00047 void LoquendoTtsDriver::config_update(const Config& new_cfg, uint32_t level) 00048 { 00049 this->lock(); 00050 00051 try 00052 { 00053 // depending on current state 00054 // update driver with new_cfg data 00055 switch(this->getState()) 00056 { 00057 case LoquendoTtsDriver::CLOSED: 00058 break; 00059 00060 case LoquendoTtsDriver::OPENED: 00061 break; 00062 00063 case LoquendoTtsDriver::RUNNING: 00064 break; 00065 } 00066 00067 // update current speaker voice 00068 if( tts != NULL ) 00069 tts->setCurrentSpeaker(new_cfg.speaker); 00070 } 00071 catch(CException &e) 00072 { 00073 ROS_ERROR("'%s'", e.what().c_str()); 00074 } 00075 00076 // save the current configuration 00077 this->config_ = new_cfg; 00078 00079 this->unlock(); 00080 } 00081 00082 LoquendoTtsDriver::~LoquendoTtsDriver() 00083 { 00084 //delete tts; 00085 } 00086 00087 bool LoquendoTtsDriver::playSpeech(const std::string & msg) 00088 { 00089 // try 00090 // { 00091 tts->playSpeech(msg); 00092 return true; 00093 // } 00094 // catch(CLoquendoTTSException &e) 00095 // { 00096 // ROS_ERROR("'%s'", e.what().c_str()); 00097 // return false; 00098 // } 00099 } 00100 00101 bool LoquendoTtsDriver::stopSpeech(void) 00102 { 00103 // try 00104 // { 00105 tts->stopSpeech(); 00106 return true; 00107 // } 00108 // catch(CLoquendoTTSException &e) 00109 // { 00110 // ROS_ERROR("'%s'", e.what().c_str()); 00111 // return false; 00112 // } 00113 } 00114 00115 bool LoquendoTtsDriver::pauseSpeech(void) 00116 { 00117 // try 00118 // { 00119 tts->pauseSpeech(); 00120 return true; 00121 // } 00122 // catch(CLoquendoTTSException &e) 00123 // { 00124 // ROS_ERROR("'%s'", e.what().c_str()); 00125 // return false; 00126 // } 00127 } 00128 00129 bool LoquendoTtsDriver::resumeSpeech(void) 00130 { 00131 // try 00132 // { 00133 tts->resumeSpeech(); 00134 return true; 00135 // } 00136 // catch(CLoquendoTTSException &e) 00137 // { 00138 // ROS_ERROR("'%s'", e.what().c_str()); 00139 // return false; 00140 // } 00141 } 00142 00143 bool LoquendoTtsDriver::isBusy(void) 00144 { 00145 //{ TO_BE_INIT, AVAILABLE, BUSY, PAUSED }; 00146 if( tts->getCurrentState() != CLoquendoTTS::AVAILABLE) 00147 return true; 00148 else 00149 return false; 00150 } 00151 00152