Speech Engine

From Axaptapedia

Jump to: navigation, search

[edit] Дополнение пользовательского интерфейса Axapta функциями SAPI.

[edit] Addition of user interface Axapta with functions SAPI.

Для реализации последовательного синтеза речи на основании указанного текста необходимо разработать класс. Назовем его SpeechEngine. Используем паттерн Singleton.

On the basis of the specified text it is necessary to develop a class for realization of consecutive synthesis of speech. We shall name it SpeechEngine. We use Singleton pattern.


1) В Class Declaration укажем переменную типа COM - spVoice.

1) In Class Declaration we shall specify a variable of type COM - spVoice.


2) Перекроем метод new():

2) We Shall block a method new():

private void new()
{
    this.parmSPVoice(new com("{96749377-3391-11D2-9EE3-00C04F797396}"));
    this.parmSPVoice().Rate(10);  //  Устанавливаем необходимую скорость воспроизведения синтезируемого голоса (We establish necessary speed of reproduction of a synthesized voice)
}

3) Создаем параметровый метод parmSPVoice():

3) We create a method parmSPVoice():

com parmSPVoice(com _spVoice = spVoice)
{
    spVoice = _spVoice;
    return spVoice;
}

4) Для реализации Singleton пишем метод instance:

4) For realization Singleton pattern we write a method instance:

static SpeechEngine instance()
{
    SpeechEngine ret;
    SysGlobalCache globalCache = infolog.objectOnServer() ? appl.globalCache() : infolog.globalCache();
    ;
 
    if (globalCache.isSet(ClassStr(SpeechEngine), 0))
        ret = globalCache.get(ClassStr(SpeechEngine), 0);
 
    else
    {
        ret = new SpeechEngine();
        infoLog.globalCache().set(ClassStr(SpeechEngine), 0, ret);
        appl.globalCache().set(ClassStr(SpeechEngine), 0, ret);
    }
 
    return ret;
}

5) Метод отвечающий за синтез голоса может выглядить следующим образом:

5) The method responsible synthesis of a voice can look as follows:

static client void speak(str _text)
{
    SpeechEngine    self = SpeechEngine::instance();
    com             status;
    int             flag;
    com             spVoice;
    ;
 
    if (!SysUserInfo::find().enabledSpeechEngine)
        return;
 
    spVoice = self.parmSPVoice();
 
    if (!spVoice)
        return;
 
    spVoice.speak(_text, 1);
}

6) Иногда приходится остановить синтез речи, делается это следующим образом:

6) Sometimes it is necessary to stop synthesis of speech, it is done as follows:

static client void dontSpeak()
{
    SpeechEngine    self = SpeechEngine::instance();
    com             spVoice;
    ;
 
    if (!SysUserInfo::find().enabledSpeechEngine)
        return;
 
    spVoice = self.parmSPVoice();
 
    if (!spVoice)
        return;
 
    spVoice.skip("Sentence", 1);
}

Вот, в итоге, у нас и получился класс SpeechEngine, отвечающий за синтез речи на основании текста в Axapta.

Here, as a result, at us class SpeechEngine which is responsible for synthesis of speech on the basis of the text in Axapta also has turned out.


Дополнительные рекомендации:

Additional recommendations:


1) Для качественного воспроизведения речи необходимо установить голосовой движок из серии RealSpeak.

1) For qualitative reproduction of speech it is necessary to establish a voice cursor from series RealSpeak.


2) Выбирается текущий движок в Панель управления => Речь.

2) The current cursor in the Control panel => Speech gets out.

Personal tools
Microsoft Community
Microsoft Dynamics Ax Community