如何生成与文字转语音( TTS )逐字同步的定时文字(例如字幕)?
我希望使用高质量的 SAPI5 语音(例如可从IVONA here获得的语音)和我在Windows 10上使用过的语音。
在Windows上,我们已经有了一些很好的免费TTS程序:
TTSApp可以在WAV中生成音频文件。 Balabolka创建MP3文件 以及作为卡拉OK中使用的LRC文件的同步定时文本 - 但仅在逐行的基础上,而不是逐字逐句。 然而,两者都是在屏幕上大声朗读时实时逐字突出显示。
如果我有一些TTS / SAPI5源代码,我可以在每次开始生成新单词时检查时钟,并将时间和该单词写入文件。有谁知道任何暴露这种程度的项目 - 所以我可以从那里开始?
2016年9月更新
我发现TTSApp在2012年被某个 jballi 重新实现using AutoHotKey。
我已经调整了该代码,以便每次onWord事件处理程序触发时以ms为单位追加文本文件。 我还需要做两次传球:
我仍然希望找到加速第2步的方法。
BTW VisualBasic源似乎已归档here。
答案 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)