как удлинить паузу между словами с преобразованием текста в речь (pyTTS или SAPI5) - PullRequest
4 голосов
/ 13 ноября 2010

Можно ли увеличить разрыв между произнесенными словами при использовании текста в речь с SAPI5?

Проблема в том, что esp.с некоторыми голосами слова почти связаны друг с другом, что делает речь более трудной для понимания.

Я использую модуль python и pyTTS (на окнах, поскольку он использует SAPI)

Я попытался подключиться к событию OnWord и добавить time.sleep () или tts.Pause (), но, по-видимому, даже если все события перехвачены, они обрабатываются только в конце разговорного текста, независимо от того,m с использованием флага синхронизации или асинхронности.

В этом примере, не работающем, метод sleep () выполняется только после произнесения предложения:

tts = pyTTS.Create()
def f(x):
    tts.Pause()
    sleep(0.5)
    tts.Resume()

tts.OnWord = f
tts.Speak(text)

Редактировать: -принятые решения

Фактические ответы для меня были либо

  • произнесение каждого слова в его собственной команде «говорить» (предложено @Lennart Regebro), либо
  • замена каждого пробела запятой (как упомянуто @Dawson), например,

    text = text.replace ("", ",")

, который устанавливает разумную паузу.Я не исследовал метод Паузы больше, чем упомянул выше, поскольку я доволен принятыми решениями.

Ответы [ 3 ]

2 голосов
/ 08 февраля 2011

Вы говорите о голосе Оценить, верно? http://msdn.microsoft.com/en-us/library/ms990078.aspx

Пауза (). Я полагаю, работает очень похоже на запятую в обычном речевом паттерне ... кроме того, что вы определяете длину (натуральную или нет).

2 голосов
/ 02 февраля 2011

У меня нет хороших решений здесь.Но:

Последний выпуск PyTTS был в 2007 году, и, похоже, документации нет.Те же люди теперь поддерживают кроссплатформенную библиотеку, называемую pyttsx, которая также поддерживает SAPI.У него есть настройка слов в минуту, но нет настройки для увеличения паузы между словами.Это, скорее всего, потому, что между словами вообще нет паузы.

Вы можете вставить длинную паузу, сделав каждое слово своим собственным "высказыванием".

engine.say('The')
engine.say('quick')
engine.say('brown')
engine.say('fox.')

вместо

engine.say('The quick brown fox."

Но это, вероятно, слишком долго.Кроме этого, вам, вероятно, придется обернуть или создать подкласс драйвера SAPI, но я не уверен на 100%, что это сработает.У людей нет пауз между словами, поэтому я не уверен, что речевые движки сами поддерживают это.

0 голосов
/ 08 февраля 2011

Я уже работал с TTS, используя API .NET. В пространстве имен System.Speech.Synthesis есть перечисление, называемое PromptBreak, которое имеет различные значения для требуемой длины паузы / разрыва:

Не знаю, если / как это можно использовать с PyTTS, но, возможно, это отправная точка.

...