Всем добрый день.
Необходимо заставить "говорить" приложение. Для этого решил использовать Microsoft SAPI 5.
Пример взят из следующей темы:
http://www.prog.org.ru/topic_23221_0.htmlСледующий код работоспособен - английский текст он воспроизводит.
QAxObject* sapi = new QAxObject(this);
sapi->setControl("SAPI.SpVoice");
sapi->setProperty("Voice", sapi->querySubObject("GetVoices()")->querySubObject("Item(7)")->asVariant());
sapi->setProperty("Volume", 100);
sapi->dynamicCall("Speak(\"привет\")");
НО единственно что не хочет выполняться, так эта команда на изменение текущего голоса, зарегистрированного в системе(у меня это женский русский голос под номером 7):
sapi->setProperty("Voice", sapi->querySubObject("GetVoices()")->querySubObject("Item(7)")->asVariant());
В вывод выкидывается следующее:
QAxObject::setProperty: Property "Voice" invalid, read-only or does not existХотя следующая за ним команда выполняется без проблем:
sapi->setProperty("Volume", 100);
Кстати, есть код на PowerShell, в котором все работает - выбирается нужный голос:
Write-Output "Установленные в системе голоса: "
$i = 0
Foreach ($Token in $oVoice.getvoices())
{
Write-Host $i - $Token.getdescription()
$i++
}
$oVoice = New-Object -com SAPI.spvoice
$toSpeechText = "привет"
$oVoice.rate = 1
$oVoice.volume = 100
$oVoice.voice = $oVoice.getvoices().item(7)
$oVoice.Speak($toSpeechText)
И его вывод:
0 - eSpeak-RU+F2
1 - eSpeak-RU
2 - eSpeak-EN
3 - Microsoft Mary
4 - Microsoft Mike
5 - Microsoft Sam
6 - Sample TTS Voice
7 - Alyona (Russian) SAPI5
Товарищи, подскажите что я не правильно делаю при выборе голоса.