Теперь, когда я понимаю, чего вы хотите, я могу сказать, что, насколько мне известно, механизм 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);
Надеюсь, этого достаточно, чтобы вы начали ...