Kinect + SpCreateDefaultObjectFromCategoryId = SPERR_NOT_FOU

Kinect + SpCreateDefaultObjectFromCategoryId = SPERR_NOT_FOUND

本文关键字:NOT FOU SPERR SpCreateDefaultObjectFromCategoryId Kinect      更新时间:2023-10-16

我创建了一个解决方案,它使用microsoft SAPI来识别语法文件中定义的语音。

就其本身而言,此代码运行良好。然而,当我将它与运行Kinect SDK的同一程序集成时,它在以下行失败:

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

我尝试将kinect外部的麦克风插入可用的麦克风端口,并将其设置为默认麦克风。这也没有给我带来任何快乐。

然后我使用pAudioToken调用cpRecognizer->SetInput(pAudioToken,TRUE);

需要考虑的一件事是桌面SAPI识别器和服务器SAPI识别程序之间的差异。不幸的是,(通过视觉检查)确定你包含的是哪一个非常棘手——它们都被命名为sapi.h,但类别ID不同。

一个简单的区别是,SAPI_VER对于服务器版本为0x055,而对于桌面版本为0x054或更低。

然而,这里的关键区别在于SPCAT_AUDIOIN(音频输入类别)在服务器SAPI标头和桌面SAPI标头中的命名不同,并且服务器识别器完全可能没有音频输入类别的默认标记。

插入麦克风不会改变服务器识别器对默认输入的想法,尽管它会改变桌面识别器的默认输入。

我建议使用SpEnumTokens助手迭代音频输入类别,以查看哪些输入设备可用。