Генерировать синхронизированный текст, синхронизированный с дословным текстом?

Как я могу сгенерировать синхронизированный текст (например, для субтитров), синхронизированный со словом в текст (TTS)?

Я хотел бы сделать это, используя высококачественные голоса SAPI5 (например, те, что доступны от IVONA здесь) и которые я использовал в Windows 10.

На Windows у нас уже есть несколько хороших бесплатных программ TTS:

  1. Read4Me - открытый исходный код
  2. Балаболка - закрытый источник
  3. TTSApp - собственный базовый графический интерфейс Microsoft, который в настоящее время доступен здесь, похоже, он появился в 2001 году.

TTSApp может создавать аудио файлы в формате WAV. Balabolka создает файлы MP3 вместе с синхронизированным синхронизированным текстом в виде файлов LRC, используемых в караоке - НО только построчно, НЕ пословно.
Тем не менее, оба показывают пословное выделение, пока они говорят вслух на экране - в режиме реального времени.

Если бы у меня был некоторый исходный код TTS/SAPI5, я мог бы просто проверять часы каждый раз, когда начинает генерироваться новое слово, и записывать время и это слово в файл. Кто-нибудь знает какой-либо проект, который выставляет этот уровень программирования - так что я мог бы начать с этого?

ОБНОВЛЕНИЕ СЕНТЯБРЯ 2016

С тех пор я обнаружил, что TTSApp был переопределён с помощью AutoHotKey неким Jballi в 2012 году.

Я адаптировал этот код для добавления к текстовому файлу времени в мс каждый раз, когда срабатывает обработчик события onWord. Еще мне нужно сделать два прохода:

  1. быстрый автоматизированный проход для сохранения файла WAV и
  2. медленный (в реальном времени) проход, который создает файл синхронизации.

Я все еще надеюсь найти способ ускорить шаг 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)
Другие вопросы по тегам