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

Generate timed-text synchronised with Text-to-Speech word-by-word?

如何生成与文字转语音 (TTS) 同步的 timed-text(例如用于字幕) -单词?

我想使用高质量的 SAPI5 语音(例如 IVONA here 提供的语音)并且我在 Windows 10.

在 Windows 我们已经有一些不错的免费 TTS 程序:

  1. Read4Me - 开源
  2. Balabolka - 闭源
  3. TTSApp Microsoft's own very basic GUI - currently available here - 它似乎是从 2001 年开始的。

TTSApp 可以生成 WAV 格式的音频文件。 Balabolka 创建 MP3 文件 连同同步的定时文本作为卡拉 OK 中使用的 LRC 文件 - 但只是逐行而不是逐字。
但是,当他们在屏幕上大声说话时,两者都会实时逐字突出显示。

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

2016 年 9 月更新

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

我已经修改了该代码以在每次 onWord 事件处理程序触发时以毫秒为单位附加到文本文件。 我仍然需要通过两次:

  1. 快速自动传递保存 WAV 文件和
  2. 创建计时文件的慢速(实时)传递。

我仍然希望找到加速步骤 2 的方法。

顺便说一句,VisualBasic 源似乎已存档 here

所有这些都可以离线完成!

您在指定 DoEvents 时使用 SAPI 生成 WAV 文件 - 已记录 here

每个事件的二进制表示(例如 phoneme/word/sentence)被附加到 WAV 文件的末尾。某个 Hans 在 2009 here.

中记录了 WAV/SAPI 格式

这一切都可以通过简单修改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)