2016-03-15 4 views
4

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

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

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

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

TTSApp может создавать аудиофайлы в WAV. Балаболка создает MP3-файлы вместе с синхронизированным синхронизируемым текстом в виде файлов LRC, используемых в караоке, - но только по принципу «строка за строкой».
Тем не менее, оба показывают слово за словом, пока они говорят вслух на экране - в режиме реального времени.

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

UPDATE сентябрь 2016

С тех пор я обнаружил, что TTSApp была переписана using AutoHotKey неким jballi в 2012 году

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

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

Я все еще надеясь найти способ ускорить шаг 2.

BTW появляется источник VisualBasic в архив here.

+1

Я оглядывался и нашел [это] (http://www.annosoft.com/sapi_lipsync/docs/classsapi__textbased__lipsy nc_a4.html), которые могут помочь. Вы обязательно должны будете вызвать ISpRecoResult :: GetResultTimes, если вам нужна более высокая точность, чем SPEI_SOUND_START и SPEI_SOUND_END –

+0

. Спасибо Лесли Гушурст. Я проверю, что SAPI 5.1 Lipsynccode от Annosoft. – GavinBrelstaff

+0

Теперь я вижу - программа Lipsync решает тонкую проблему. Он производит тайм-текст «да», но он не синтезирует голос звука одновременно. – GavinBrelstaff

ответ

0

Все это можно сделать в автономном режиме!

Вы создаете файл WAV с использованием SAPI, указывая DoEvents - задокументированный here.

Бинарное представление каждого события (например, фонема/слово/предложение) добавляется в конец WAV-файла. Определенный Hans документировал формат WAV/SAPI в 2009 году 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) 

 Смежные вопросы

  • Нет связанных вопросов^_^