【问题标题】:It's posible to do SpeechToText(Speech recognition) and afterwards TextToSpeech (using same text and same voice)?可以先做 SpeechToText(语音识别),然后再做 TextToSpeech(使用相同的文本和相同的声音)?
【发布时间】:2011-03-10 14:21:58
【问题描述】:

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

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

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

感谢您的宝贵时间(请原谅我的英语)

耶苏斯基维茨

【问题讨论】:

  • 您确定不能只将动画与视位或音位事件同步吗?另外,为什么不在将文本发送到 TTS 引擎之前处理文本?
  • 不,因为即使将 TTS 配置为以最慢的速度说话,也太快了,而且它还会以机器人的方式发出声音。此外,动画是在音节级别引用的,所以无法实时同步。
  • 所以,如果我对问题的理解正确,您有一些文本,并且您想使用 TTS,但您还需要将 TTS 与签名动画同步。您遇到的问题是签名动画相对较长,并且您正在失去同步。我(尚未)理解的是当动画太长时你想要发生的事情 - 你想在单词之间插入停顿吗?
  • 不完全是。我想说一段文字(带麦克风),并在该语音注册到 wav 文件的同时识别该文本。然后,使用波形文件并用该波形文件的声音唱动画。所以我只想将来自 wav 的声音与动画同步。为什么要这样做,因为需要对文本进行分析,才能加载正确的动画(语音视位和音素的信息还不够
  • 我还是不明白你为什么需要识别wave文件。识别引擎和 tts 引擎之间没有内在的同步(或者,就此而言,识别引擎和实时之间没有任何特定的同步)。那么,您为什么不直接分析文本、生成动画,然后然后将其发送到 TTS 引擎,并根据需要与音素/视位同步?

标签: speech-recognition text-to-speech sapi speech-to-text


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回答。我想我会采取另一种方式(如果我找到它)......我的错误是我认为当你进行识别时,有 Viseme_events 就像你进行合成时一样......但这是真的,我已经意识到这没有意义,识别是在单词级别。再次感谢
猜你喜欢
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-17
  • 2016-12-04
相关资源
最近更新 更多