Генерировать синхронизированный текст, синхронизированный с дословным текстом?
Как я могу сгенерировать синхронизированный текст (например, для субтитров), синхронизированный со словом в текст (TTS)?
Я хотел бы сделать это, используя высококачественные голоса SAPI5 (например, те, что доступны от IVONA здесь) и которые я использовал в Windows 10.
На Windows у нас уже есть несколько хороших бесплатных программ TTS:
- Read4Me - открытый исходный код
- Балаболка - закрытый источник
- TTSApp - собственный базовый графический интерфейс Microsoft, который в настоящее время доступен здесь, похоже, он появился в 2001 году.
TTSApp может создавать аудио файлы в формате WAV. Balabolka создает файлы MP3 вместе с синхронизированным синхронизированным текстом в виде файлов LRC, используемых в караоке - НО только построчно, НЕ пословно.
Тем не менее, оба показывают пословное выделение, пока они говорят вслух на экране - в режиме реального времени.
Если бы у меня был некоторый исходный код TTS/SAPI5, я мог бы просто проверять часы каждый раз, когда начинает генерироваться новое слово, и записывать время и это слово в файл. Кто-нибудь знает какой-либо проект, который выставляет этот уровень программирования - так что я мог бы начать с этого?
ОБНОВЛЕНИЕ СЕНТЯБРЯ 2016
С тех пор я обнаружил, что TTSApp был переопределён с помощью AutoHotKey неким Jballi в 2012 году.
Я адаптировал этот код для добавления к текстовому файлу времени в мс каждый раз, когда срабатывает обработчик события onWord. Еще мне нужно сделать два прохода:
- быстрый автоматизированный проход для сохранения файла WAV и
- медленный (в реальном времени) проход, который создает файл синхронизации.
Я все еще надеюсь найти способ ускорить шаг 2.
Кстати, источник VisualBasic, похоже, заархивирован здесь.
1 ответ
Можно сделать все это в автономном режиме!
Вы генерируете файл WAV, используя SAPI, указав DoEvents
- задокументировано здесь.
Двоичное представление каждого события (например, фонема / слово / предложение) добавляется в конец файла WAV. Определенный Ганс задокументировал формат WAV/SAPI в 2009 году здесь.
Все это может быть сделано простой модификацией версии TTSApp от AutoBokey от jballi 2012
В основном вы заменяете эти строки кода в 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)