生成与文字转语音同步的定时文本?

时间:2016-03-15 14:03:35

标签: autohotkey text-to-speech sapi ttml

如何生成与文字转语音( TTS )逐字同步的定时文字(例如字幕)?

我希望使用高质量的 SAPI5 语音(例如可从IVONA here获得的语音)和我在Windows 10上使用过的语音。

在Windows上,我们已经有了一些很好的免费TTS程序:

  1. Read4Me - 开源
  2. Balabolka - 封闭源
  3. TTSApp Microsoft拥有非常基本的GUI - 目前可用here - 它似乎是从2001年开始的。
  4. TTSApp可以在WAV中生成音频文件。 Balabolka创建MP3文件  以及作为卡拉OK中使用的LRC文件的同步定时文本 - 但仅在逐行的基础上,而不是逐字逐句。 然而,两者都是在屏幕上大声朗读时实时逐字突出显示。

    如果我有一些TTS / SAPI5源代码,我可以在每次开始生成新单词时检查时钟,并将时间和该单词写入文件。有谁知道任何暴露这种程度的项目 - 所以我可以从那里开始?

    2016年9月更新

    我发现TTSApp在2012年被某个 jballi 重新实现using AutoHotKey

    我已经调整了该代码,以便每次onWord事件处理程序触发时以ms为单位追加文本文件。 我还需要做两次传球:

    1. 快速自动传递以保存WAV文件和
    2. 创建计时文件的慢速(实时)传递。
    3. 我仍然希望找到加速第2步的方法。

      BTW VisualBasic源似乎已归档here

1 个答案:

答案 0 :(得分:0)

可以离线完成所有这些操作!

使用SAPI生成WAV文件,同时指定DoEvents - 记录here

每个事件的二进制表示(例如,音素/单词/句子)被附加到WAV文件的末尾。某些 Hans 在2009年记录了WAV / SAPI格式here

这一切都可以通过 jballi 2012年AutoHotkey version of TTSApp

的简单修改来完成

基本上,您可以在Example1GUI.ahk

中替换这些代码行
SpFileStream.Open(SaveToFileName,SSFMCreateForWrite,False)

;-- Set the output stream to the file stream
SpVoice.AllowAudioOutputFormatChangesOnNextSet:=False
SpVoice.AudioOutputStream:=SpFileStream

;-- Speak using the given flags
SpVoice.Speak(Text,SpeakFlags)

以下内容:

SpFileStream.Open(SaveToFileName,SSFMCreateForWrite,True) ;-- DoEvents 

;-- Set the output stream to the file stream
SpVoice.AllowAudioOutputFormatChangesOnNextSet:=False
SpVoice.AudioOutputStream:=SpFileStream

if not Sink ;-- DoEvents label
  {
    ComObjConnect(SpVoice, "On")
    Sink:=True
  }

;-- Speak using the given flags
SpVoice.Speak(Text,SpeakFlags|SVSFlagsAsync|SVSFPurgeBeforeSpeak)