2012-02-02 5 views
0

Я создал решение, которое использует microsoft SAPI для распознавания речи, определенной в файле грамматики.Kinect + SpCreateDefaultObjectFromCategoryId = SPERR_NOT_FOUND

Само по себе этот код работает нормально. Однако, когда я интегрировать его с той же программой, которая работает с Kinect SDK, он не будет работать на линии:

hr = cpRecognizer->SpGetDefaultTokenFromCategoryId(SPCAT_AUDIOIN,&pAudioToken); 
//At this point, HR == -2147200966 == SPERR_NOT_FOUND 

Я попытался закупорки в микрофон, который является внешним по отношению к Kinect в свободный порт микрофона и настройки это микрофон по умолчанию. Это тоже не приносило мне радости.

Затем я использую pAudioToken для вызова cpRecognizer-> SetInput (pAudioToken, TRUE);

ответ

1

Следует учитывать только разницу между распознавателями SAPI и идентификаторами SAPI сервера. К сожалению, очень сложно определить (из визуального осмотра), какой из них вы включили, - оба они названы sapi.h, но идентификаторы категорий разные.

Простое отличие заключается в том, что SAPI_VER составляет 0x055 для версии сервера, но 0x054 или меньше для рабочего стола.

Однако ключевое различие заключается в том, что SPCAT_AUDIOIN (категория аудиовхода) назван по-разному в заголовке SAPI сервера и заголовке SAPI на рабочем столе, и вполне возможно, что для категории аудиовхода нет стандартного токена для распознаватель сервера.

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

Я бы порекомендовал повторить через категорию аудиовхода с помощью вспомогательного помощника SpEnumTokens, чтобы узнать, какие устройства ввода доступны.

+0

Это невероятно полезно, спасибо. Я дам это, чтобы посмотреть, что это за сделка - в настоящее время я не могу найти константу SAPI_VER ... –

+0

Когда я вызываю следующее: hr = SpEnumTokens (SPCAT_AUDIOIN, NULL, NULL, & cpEnum); // hr == S_OK hr = cpEnum-> GetCount (& ulNumTokens); // ulNumTokens == 0 –

+0

Хорошо, давайте немного отступим. То, что вы действительно хотите, - это распознавание речи с помощью аудиовхода Kinect, правильно? Если это так, то вместо использования ISpObjectToken вы должны использовать потоковые интерфейсы (ISpStream, ISpStreamFormat, ISpAudio). Поскольку я незнаком с Kinect SDK, какие аудио-интерфейсы доступны для вас? –