4

Text-to-Speech ( TTS ) と単語ごとに同期されたタイムテキスト(字幕用など)を生成するにはどうすればよいですか?

高品質のSAPI5音声 (ここで IVONA から入手できるものなど)を使用してこれを行いたいと思います。これは Windows 10 で使用したものです。

Windows では、すでに優れた無料の TTS プログラムがいくつかあります。

  1. Read4Me - オープンソース
  2. バラボルカ- クローズドソース
  3. TTSApp Microsoft 独自の非常に基本的な GUI - 現在ここで入手可能- 2001 年にさかのぼるようです。

TTSApp は、WAV でオーディオ ファイルを生成できます。Balabolka は、カラオケで使用される LRC ファイルとして同期されたタイムテキストと共に MP3 ファイルを作成します - ただし、単語単位ではなく行単位でのみです。
ただし、両方とも、画面上で声を出して話している間、単語ごとの強調表示がリアルタイムで表示されます。

TTS/SAPI5 ソース コードがあれば、新しい単語が生成されるたびに時計をチェックして、時刻とその単語をファイルに書き込むことができます。そのレベルのプログラミングを公開しているプロジェクトを知っている人はいますか?

2016年9月更新

その後、2012 年に特定のjballiによってAutoHotKey を使用して TTSApp が再実装されたことを発見しました。

onWord イベント ハンドラーが起動するたびに、ミリ秒単位の時間をテキスト ファイルに追加するようにコードを調整しました。それでも、次の 2 つのパスを作成する必要があります。

  1. WAVファイルを保存するための迅速な自動パスと
  2. タイミング ファイルを作成する低速 (リアルタイム) パス。

ステップ2を加速する方法を見つけたいと思っています。

ところで、VisualBasic のソースはここにアーカイブされているようです。

4

1 に答える 1

0

このすべてをオフラインで行うことが可能です!

DoEvents-documented hereを指定しながら、SAPI を使用して WAV ファイルを生成します。

各イベントのバイナリ表現 (音素/単語/文など) が WAV ファイルの末尾に追加されます。あるHansが 2009 年に WAV/SAPI フォーマットをここで文書化しました。

これはすべて、jballiの 2012 AutoHotkey バージョンの 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)
于 2016-09-20T16:33:17.260 に答える