void TTSFestival::generateSettings() { // server path QString exepath = RbSettings::subValue("festival-server", RbSettings::TtsPath).toString(); if(exepath == "" ) exepath = Utils::findExecutable("festival"); insertSetting(eSERVERPATH,new EncTtsSetting(this, EncTtsSetting::eSTRING, "Path to Festival server:", exepath,EncTtsSetting::eBROWSEBTN)); // client path QString clientpath = RbSettings::subValue("festival-client", RbSettings::TtsPath).toString(); if(clientpath == "" ) clientpath = Utils::findExecutable("festival_client"); insertSetting(eCLIENTPATH,new EncTtsSetting(this,EncTtsSetting::eSTRING, tr("Path to Festival client:"), clientpath,EncTtsSetting::eBROWSEBTN)); // voice EncTtsSetting* setting = new EncTtsSetting(this, EncTtsSetting::eSTRINGLIST, tr("Voice:"), RbSettings::subValue("festival", RbSettings::TtsVoice), getVoiceList(), EncTtsSetting::eREFRESHBTN); connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); connect(setting,SIGNAL(dataChanged()),this,SLOT(clearVoiceDescription())); insertSetting(eVOICE,setting); //voice description setting = new EncTtsSetting(this,EncTtsSetting::eREADONLYSTRING, tr("Voice description:"),"",EncTtsSetting::eREFRESHBTN); connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceDescription())); insertSetting(eVOICEDESC,setting); }
void TTSFestival::updateVoiceList() { QStringList voiceList = getVoiceList(getSetting(eSERVERPATH)->current().toString()); getSetting(eVOICE)->setList(voiceList); if(voiceList.size() > 0) getSetting(eVOICE)->setCurrent(voiceList.at(0)); else getSetting(eVOICE)->setCurrent(""); }
void TTSSapi::generateSettings() { // language QStringList languages = SystemInfo::languages(); languages.sort(); EncTtsSetting* setting =new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST, tr("Language:"),RbSettings::subValue("sapi",RbSettings::TtsLanguage), languages); connect(setting,SIGNAL(dataChanged()),this,SLOT(updateVoiceList())); insertSetting(eLANGUAGE,setting); // voice setting = new EncTtsSetting(this,EncTtsSetting::eSTRINGLIST, tr("Voice:"),RbSettings::subValue("sapi",RbSettings::TtsVoice), getVoiceList(RbSettings::subValue("sapi",RbSettings::TtsLanguage).toString()), EncTtsSetting::eREFRESHBTN); connect(setting,SIGNAL(refresh()),this,SLOT(updateVoiceList())); insertSetting(eVOICE,setting); //speed insertSetting(eSPEED,new EncTtsSetting(this,EncTtsSetting::eINT, tr("Speed:"),RbSettings::subValue("sapi",RbSettings::TtsSpeed),-10,10)); // options insertSetting(eOPTIONS,new EncTtsSetting(this,EncTtsSetting::eSTRING, tr("Options:"),RbSettings::subValue("sapi",RbSettings::TtsOptions))); }
void TTSSapi::updateVoiceList() { qDebug() << "update voiceList"; QStringList voiceList = getVoiceList(getSetting(eLANGUAGE)->current().toString()); getSetting(eVOICE)->setList(voiceList); if(voiceList.size() > 0) getSetting(eVOICE)->setCurrent(voiceList.at(0)); else getSetting(eVOICE)->setCurrent(""); }
QString TTSFestival::getVoiceInfo(QString voice) { if(!configOk()) return ""; if(!getVoiceList().contains(voice)) return ""; if(voiceDescriptions.contains(voice)) return voiceDescriptions[voice]; QString response = queryServer(QString("(voice.description '%1)").arg(voice), 10000); if (response == "") { voiceDescriptions[voice]=tr("No description available"); } else { response = response.remove(QRegExp("(description \"*\")", Qt::CaseInsensitive, QRegExp::Wildcard)); qDebug() << "[Festival] voiceInfo w/o descr: " << response; response = response.remove(')'); QStringList responseLines = response.split('(', QString::SkipEmptyParts); responseLines.removeAt(0); // the voice name itself QString description; foreach(QString line, responseLines) { line = line.remove('('); line = line.simplified(); line[0] = line[0].toUpper(); // capitalize the key int firstSpace = line.indexOf(' '); if (firstSpace > 0) { // add a colon between the key and the value line = line.insert(firstSpace, ':'); // capitalize the value line[firstSpace+2] = line[firstSpace+2].toUpper(); } description += line + "\n"; } voiceDescriptions[voice] = description.trimmed(); }