Можно ли делать SpeechToText (распознавание речи), а затем TextToSpeech (используя тот же текст и тот же голос)? - PullRequest
0 голосов
/ 01 июля 2010

Я работаю над программой для глухих людей. Я работаю с сапи и ТЦ. Программа одновременно делает 3D анимацию рукой. Но проблема в том, что голоса (даже когда их ставят в самой медленной речи) - это поститься за то, что я хочу. Итак, я подумал о распознавании речи, но проблема в том, что мне нужно выполнить большой процесс для текста перед началом анимации.

Итак, я хочу знать, можно ли было бы выполнить распознавание речи (из моего голоса в файле .wave), а затем выполнить тот же процесс TT (с событиями Sapi ...), но используя .wave с мой голос.

Если это возможно, скажите, пожалуйста, как. Если вы думаете, что есть лучшие альтернативы, позвольте мне их увидеть.

Спасибо за ваше время (и извините за мой английский)

Jesuskiewicz

1 Ответ

0 голосов
/ 20 июля 2010

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

Надеюсь, этого достаточно, чтобы вы начали ...

...