【问题标题】:Generate timed-text synchronised with Text-to-Speech word-by-word?逐字生成与文本到语音同步的定时文本?
【发布时间】:2016-07-01 00:36:25
【问题描述】:

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

我想使用我在 Windows 10 上使用的高质量 SAPI5 声音(例如 IVONA here 提供的声音)来完成此操作。

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

  1. Read4Me - 开源
  2. Balabolka - 闭源
  3. TTSApp Microsoft 自己的非常基本的 GUI - 目前可用 here - 似乎可以追溯到 2001 年。

TTSApp 可以生成 WAV 格式的音频文件。 Balabolka 创建 MP3 文件 以及同步的定时文本作为卡拉 OK 中使用的 LRC 文件 - 但仅在逐行的基础上,而不是逐字。
但是,两者都在屏幕上实时大声朗读时逐字突出显示。

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

2016 年 9 月更新

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

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

  1. 快速自动通过以保存 WAV 文件和
  2. 创建计时文件的慢速(实时)通道。

我仍然希望找到一种方法来加速第 2 步。

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

【问题讨论】:

  • 我环顾四周,发现this 可能会有所帮助。如果您需要比 SPEI_SOUND_START 和 SPEI_SOUND_END 更高的准确度,您肯定需要调用 ISpRecoResult::GetResultTimes
  • 感谢 Lesley Gushurst - 我会检查 Annosoft 的 SAPI 5.1 Lipsynccode。
  • 现在我明白了 - Lipsync 程序正在解决一个微妙不同的问题。它正在生成定时文本,是的 - 但它不会同时合成语音音频。
  • 嗯...好吧,如果您已经在 TTS 中使用 Speak 呼叫,您是否查看过 SPEI_WORD_BOUNDARY?

标签: autohotkey text-to-speech sapi ttml


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-03
    • 1970-01-01
    • 2017-11-05
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 2015-06-16
    • 1970-01-01
    相关资源
    最近更新 更多