4 Stimmen

wie man die Pausen zwischen den Wörtern mit Text-to-Speech (pyTTS oder SAPI5) verlängern kann

Ist es möglich, den Abstand zwischen den gesprochenen Wörtern bei der Verwendung von Text-to-Speech mit SAPI5 zu vergrößern?

Das Problem ist, dass vor allem bei einigen Stimmen die Wörter fast miteinander verbunden sind, was das Verstehen erschwert.

Ich verwende Python und das pyTTS-Modul (unter Windows, da es SAPI verwendet)

Ich habe versucht, an das OnWord-Ereignis anzuknüpfen und ein time.sleep() oder tts.Pause() hinzuzufügen, aber anscheinend werden alle Ereignisse nur am Ende des gesprochenen Textes verarbeitet, unabhängig davon, ob ich die sync- oder async-Flagge verwende, obwohl sie abgefangen werden.

In diesem NON WORKING Beispiel wird die sleep()-Methode erst ausgeführt, nachdem der Satz gesprochen wurde:

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

tts.OnWord = f
tts.Speak(text)

Bearbeiten: -- akzeptierte Lösungen

Die tatsächlichen Antworten lauteten für mich entweder

  • jedes Wort in einem eigenen "speak"-Befehl sagen (vorgeschlagen von @Lennart Regebro), oder
  • Ersetzen jedes Leerzeichens durch ein Komma (wie von @Dawson erwähnt), z. B.

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

die eine angemessene Pause einlegt. Ich habe die Pause-Methode nicht weiter untersucht, als ich oben erwähnt habe, da ich mit den akzeptierten Lösungen zufrieden bin.

2voto

Lennart Regebro Punkte 157632

Ich habe hier keine großartigen Lösungen. Aber:

Die letzte Veröffentlichung von PyTTS war 2007, und es scheint keine Dokumentation zu geben. Die gleichen Leute pflegen jetzt eine plattformübergreifende Bibliothek namens pyttsx, die auch SAPI unterstützt. Sie hat eine Einstellung für Wörter pro Minute, aber keine Einstellung, um die Pausen zwischen den Wörtern zu erhöhen. Das liegt höchstwahrscheinlich daran, dass es überhaupt keine Pausen zwischen den Wörtern gibt.

Sie können eine lange Pause einfügen, indem Sie jedes Wort zu einer eigenen "Äußerung" machen.

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

anstelle von

engine.say('The quick brown fox."

Aber das ist wahrscheinlich zu lang. Ansonsten müssen Sie wahrscheinlich den SAPI-Treiber umwandeln oder unterklassifizieren, aber ich bin mir nicht zu 100 % sicher, dass das auch funktioniert. Menschen haben keine Pausen zwischen den Wörtern, so dass ich nicht sicher bin, dass die Sprach-Engines selbst es unterstützen.

2voto

Dawson Punkte 7517

Sie sprechen von Voice Rate, richtig? http://msdn.microsoft.com/en-us/library/ms990078.aspx

Pause() funktioniert, glaube ich, ähnlich wie ein Komma in einem normalen Sprachmuster... mit dem Unterschied, dass Sie die Länge bestimmen (natürlich oder nicht).

0voto

alimbada Punkte 1372

Ich habe bereits einige TTS-Arbeiten mit den .NET-APIs durchgeführt. Es gibt ein Enum im System.Speech.Synthesis-Namensraum namens PromptBreak, das verschiedene Werte für die Länge der gewünschten Pause hat: http://msdn.microsoft.com/en-us/library/system.speech.synthesis.promptbreak.aspx

Keine Ahnung, ob/wie es mit PyTTS verwendet werden kann, aber vielleicht ist es ein Ansatzpunkt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X