现在我了解您想要发生的事情,我可以说,据我所知,SAPI SR 引擎并没有真正提供与传入文本同步的音素级标记。
您可以尝试的方法(尽管我对此并没有真正的期望)是获取音频,通过发音语法运行它以生成音素,然后获取文本元素以找到相应的音频位。
当我说“发音语法”时,我的意思是加载了发音模型的听写语法 - 设置如下:
CComPtr<ISpRecoGrammar> cpGrammar;
... initialize SR engine and create a grammar ...
cpGrammar->LoadDictation(L"Pronunciation", SPLO_STATIC);
在您的识别处理程序中,您需要解析出元素:
ISpRecoResult* ipReco;
SPPHRASE* pPhrase;
ipReco->GetPhrase(&pPhrase);
for (int i = 0; i < pPhrase->Rule.ulCountOfElements; ++i)
{
const SPPHRASEELEMENT * pElem = pPhrase->pElements + i;
// examine pElem->ulAudioSizeTime, etc.
}
::CoTaskMemFree(pPhrase);
我希望这足以让你开始......