27const QMap<QOnlineTts::Emotion, QString> QOnlineTts::s_emotionCodes =
29 {Neutral, QStringLiteral(
"neutral")},
30 {Good, QStringLiteral(
"good")},
31 {Evil, QStringLiteral(
"evil")}
37const QMap<QOnlineTts::Voice, QString> QOnlineTts::s_voiceCodes =
39 {Zahar, QStringLiteral(
"zahar")},
40 {Ermil, QStringLiteral(
"ermil")},
41 {Jane, QStringLiteral(
"jane")},
42 {Oksana, QStringLiteral(
"oksana")},
43 {Alyss, QStringLiteral(
"alyss")},
44 {Omazh, QStringLiteral(
"omazh")}
60 QString unparsedText = text;
67 setError(
UnsupportedVoice, QString(
"%1 %2 %3").arg(tr(
"Selected engine"), QMetaEnum::fromType<QOnlineTranslator::Engine>().valueToKey(engine), tr(
"does not support voice settings")));
73 setError(
UnsupportedEmotion, QString(
"%1 %2 %3").arg(tr(
"Selected engine"), QMetaEnum::fromType<QOnlineTranslator::Engine>().valueToKey(engine), tr(
"does not support emotion settings")));
77 const QString langString = languageApiCode(engine, lang);
78 if (langString.isNull())
82 while (!unparsedText.isEmpty())
84 const int splitIndex = QOnlineTranslator::getSplitIndex(unparsedText, s_googleTtsLimit);
87 QUrl apiUrl(QStringLiteral(
"http://translate.googleapis.com/translate_tts"));
88 const QString query = QStringLiteral(
"ie=UTF-8&client=gtx&tl=%1&q=%2").arg(langString, QString(QUrl::toPercentEncoding(unparsedText.left(splitIndex))));
89 #if defined(Q_OS_LINUX)
90 apiUrl.setQuery(query);
91 #elif defined(Q_OS_WIN)
92 apiUrl.setQuery(query, QUrl::DecodedMode);
94 m_media.append(apiUrl);
97 unparsedText = unparsedText.mid(splitIndex);
103 const QString langString = languageApiCode(engine, lang);
104 if (langString.isNull())
107 const QString voiceString = voiceApiCode(engine,
voice);
108 if (voiceString.isNull())
111 const QString emotionString = emotionApiCode(engine,
emotion);
112 if (emotionString.isNull())
116 while (!unparsedText.isEmpty())
118 const int splitIndex = QOnlineTranslator::getSplitIndex(unparsedText, s_yandexTtsLimit);
121 QUrl apiUrl(QStringLiteral(
"https://tts.voicetech.yandex.net/tts"));
122 const QString query = QStringLiteral(
"text=%1&lang=%2&speaker=%3&emotion=%4&format=mp3")
123 .arg(QUrl::toPercentEncoding(unparsedText.left(splitIndex)), langString, voiceString, emotionString);
124 #if defined(Q_OS_LINUX)
125 apiUrl.setQuery(query);
126 #elif defined(Q_OS_WIN)
127 apiUrl.setQuery(query, QUrl::DecodedMode);
129 m_media.append(apiUrl);
132 unparsedText = unparsedText.mid(splitIndex);
154 return m_errorString;
170 return s_voiceCodes.value(
voice);
178 return s_emotionCodes.value(
emotion);
200void QOnlineTts::setError(TtsError error,
const QString &errorString)
215 {
return QOnlineTranslator::languageApiCode(engine, lang); }
221 return QStringLiteral(
"ru_RU");
223 return QStringLiteral(
"tr_TR");
225 return QStringLiteral(
"en_GB");
234 setError(
UnsupportedLanguage, QString(
"%1 %2 %3").arg(tr(
"Selected language"), QMetaEnum::fromType<QOnlineTranslator::Language>().valueToKey(lang), QMetaEnum::fromType<QOnlineTranslator::Engine>().valueToKey(engine), tr(
"is not supported for")));
250 setError(
UnsupportedVoice, QString(
" %1 %2 %2").arg(tr(
"Selected voice"), QMetaEnum::fromType<Voice>().valueToKey(
voice), QMetaEnum::fromType<QOnlineTranslator::Engine>().valueToKey(engine), tr(
"is not supported for")));
266 setError(
UnsupportedEmotion, QString(
"%1 %2 %3").arg(tr(
"Selected emotion"), QMetaEnum::fromType<Emotion>().valueToKey(
emotion), QMetaEnum::fromType<QOnlineTranslator::Engine>().valueToKey(engine), tr(
"is not supported for")));
QString errorString() const
errorString
static Voice voice(const QString &voiceCode)
voice
QOnlineTts(QObject *parent=nullptr)
QOnlineTts.
TtsError error() const
error
static Emotion emotion(const QString &emotionCode)
emotion
static QString emotionCode(Emotion emotion)
emotionCode
QList< QMediaContent > media() const
media
void generateUrls(const QString &text, QOnlineTranslator::Engine engine, QOnlineTranslator::Language lang, Voice voice=NoVoice, Emotion emotion=NoEmotion)
generateUrls
@ UnsupportedEmotion
UnsupportedEmotion
@ UnsupportedVoice
UnsupportedVoice
@ UnsupportedEngine
UnsupportedEngine
@ UnsupportedLanguage
UnsupportedLanguage
static QString voiceCode(Voice voice)
voiceCode