逐字生成与文本到语音同步的定时文本?
Generate timed-text synchronised with Text-to-Speech word-by-word?
如何生成与文字转语音 (TTS) 同步的 timed-text(例如用于字幕) -单词?
我想使用高质量的 SAPI5 语音(例如 IVONA here 提供的语音)并且我在 Windows 10.
在 Windows 我们已经有一些不错的免费 TTS 程序:
- Read4Me - 开源
- Balabolka - 闭源
- 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 事件处理程序触发时以毫秒为单位附加到文本文件。
我仍然需要通过两次:
- 快速自动传递保存 WAV 文件和
- 创建计时文件的慢速(实时)传递。
我仍然希望找到加速步骤 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)
如何生成与文字转语音 (TTS) 同步的 timed-text(例如用于字幕) -单词?
我想使用高质量的 SAPI5 语音(例如 IVONA here 提供的语音)并且我在 Windows 10.
在 Windows 我们已经有一些不错的免费 TTS 程序:
- Read4Me - 开源
- Balabolka - 闭源
- 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 事件处理程序触发时以毫秒为单位附加到文本文件。 我仍然需要通过两次:
- 快速自动传递保存 WAV 文件和
- 创建计时文件的慢速(实时)传递。
我仍然希望找到加速步骤 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)