0

我正在为音盲人士开发一个程序。我一直在使用 sapi 和 TTs。该程序同时用一只手制作 3D 动画。但问题是声音(即使是最慢的声音)对于我想要的东西来说太快了。所以,我考虑过语音识别,但问题是我必须在动画开始之前对文本做一个大的处理。

所以,我想知道是否可以进行语音识别(从我在 .wave 文件上的声音),然后执行相同的 TT 过程(使用 Sapi 事件......),但在我的声音中使用 .wave。

如果可能,请告诉我如何。如果你认为有更好的选择,让我看看。

谢谢你的时间(请原谅我的英语)

耶稣凯维奇

4

1 回答 1

0

现在我了解您想要发生的事情,我可以说,据我所知,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);

我希望这足以让你开始......

于 2010-07-20T17:30:50.260 回答