SAPI Распознавание речи delphi

Для многомерных массивов это немного сложнее. Часто люди определяют явные макроконстанты, т. Е.

#define g_rgDialogRows   2
#define g_rgDialogCols   7

static char const* g_rgDialog[g_rgDialogRows][g_rgDialogCols] =
{
    { " ",  " ",    " ",    " 494", " 210", " Generic Sample Dialog", " " },
    { " 1", " 330", " 174", " 88",  " ",    " OK",        " " },
};

. Но эти константы могут быть вычислены и во время компиляции с помощью sizeof :

#define rows_of_array(name)       \
    (sizeof(name   ) / sizeof(name[0][0]) / columns_of_array(name))
#define columns_of_array(name)    \
    (sizeof(name[0]) / sizeof(name[0][0]))

static char* g_rgDialog[][7] = { /* ... */ };

assert(   rows_of_array(g_rgDialog) == 2);
assert(columns_of_array(g_rgDialog) == 7);

Примечание что этот код работает на C и C ++. Для массивов с более чем двумя измерениями используйте

sizeof(name[0][0][0])
sizeof(name[0][0][0][0])

и т. Д., Ad infinitum.

1
задан RRUZ 23 April 2011 в 01:11
поделиться

2 ответа

Парень, я наконец-то смог получить ответ ....
Это может быть полезно другим ... :)

это фактический компонент, который я создал. просто измените его под свои нужды.

Function TSRRule.AddWord (Word : String; Value : string = ''; Separator : char = '|') : integer;
var
  OleValue : OleVariant;
begin
  result := 0;
  if Fwordlist.IndexOf(Word) = -1 then
     begin
       OleValue := Value;
       Fwordlist.Add(Word);
       FRule.InitialState.AddWordTransition(nil,  word, Separator, SPWT_LEXICAL, FRuleName+'_value',Fwordlist.Count, OleValue, 1.0);
       FWordCount := Fwordlist.Count;
       result := FWordCount;
     end;
end;

Вызов функции ...

FSpRunTimeGrammar := SpInProcRecoContext.CreateGrammar(2); // we assign  another grammr on index 2

   SrRule1 := TSRRule.Create(1,'Rule1',FSpRunTimeGrammar);
   with SrRule1 do
      begin
         AddWord('Maxtor');
         AddWord('Open NotePad','Notepad.exe');
         AddWord('Maxtor Dexter TrandPack','',' ');
         commit;
      end;
   SrRule2 := TSRRule.Create(2,'Rule2',FSpRunTimeGrammar);
   with SrRule1 do
      begin
         AddWord('the box');
         AddWord('WeLcOmE SaPi');
         AddWord('Halo World');
         commit;
      end;
   FSpRunTimeGrammar.CmdSetRuleState('Rule1',SGDSActive);
   FSpRunTimeGrammar.CmdSetRuleState('Rule2',SGDSActive);

Пожалуйста, оставьте комментарий для пояснений .... удачи!

1
ответ дан 3 September 2019 в 00:31
поделиться

Существует прямая обертка для speech api, сделанная командой jedi, вы должны быть в состоянии найти код отсюда http://www.delphi-jedi.org/apilibrary.html однако я только что проверил и ссылка на файл sapi.zip кажется не работает, возможно, письмо команде jedi поможет вам найти его.

Если вы все-таки получите обертку, и учитывая, что это прямая обертка API, то документация MDSN - это то, что вам нужно, просто замените синтаксис Delphi на синтаксис C++ 99% будет простым, а что нет, просто задайте конкретный вопрос здесь (или в группах новостей Embarcadero)

.
1
ответ дан 3 September 2019 в 00:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: