Russian Qt Forum
Ноябрь 22, 2024, 14:15 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QAxObject & SAPI5  (Прочитано 6259 раз)
gering
Гость
« : Январь 04, 2013, 12:35 »

Всем добрый день.
Необходимо заставить "говорить" приложение. Для этого решил использовать 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


Товарищи, подскажите что я не правильно делаю при выборе голоса.
Записан
_OLEGator_
Гость
« Ответ #1 : Январь 04, 2013, 12:52 »

Для sapi выполни
Код
C++ (Qt)
QString QAxBase::generateDocumentation ()

скорее всего Voice не property.
Записан
gering
Гость
« Ответ #2 : Январь 04, 2013, 13:32 »

Для sapi выполни
Код
C++ (Qt)
QString QAxBase::generateDocumentation ()

скорее всего Voice не property.

Выполнил - в разделе Properties:

Цитировать
QString objectName;
SpeechVoiceEvents AlertBoundary;
bool AllowAudioOutputFormatChangesOnNextSet;
IDispatch* AudioOutput;
IDispatch* AudioOutputStream;
SpeechVoiceEvents EventInterests;
SpeechVoicePriority Priority;
int Rate;
IDispatch* Status;
int SynchronousSpeakTimeout;
IDispatch* Voice;
int Volume;
QString control;
Записан
_OLEGator_
Гость
« Ответ #3 : Январь 04, 2013, 15:32 »

Это объект. Пользуй для получения объекта:
Код
C++ (Qt)
QAxObject * QAxBase::querySubObject ( const char * name, ... )

Дальше генерируй документацию и смотри как с ним работать.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.11 секунд. Запросов: 20.