テキストを読むオーディオファイルを再生するプログラムを書きたいです。オーディオファイルが再生する現在の音節を緑で強調表示し、現在の単語の残りの部分を赤で強調表示したいと思います。次の単語/音節に切り替えるタイミングをプログラムに伝えるオーディオ ファイルと情報を格納するには、どのようなデータ構造を使用すればよいですか?
4 に答える
少し左翼的な提案ですが、カラオケソフトはご覧になりましたか?「真剣」とは思えないかもしれませんが、あなたがしていることと非常に似ているように聞こえます。たとえば、Aegisubは、SSA/ASS 形式で字幕を作成できる字幕作成プログラムです。選択した単語または部分を強調表示するためのカラオケ ツールがあります。
アニメの字幕に最も一般的に使用されますが、適切なプレーヤーがあれば音声にも使用できます。残念ながら、これらは Mac では非常にまれです。
形式は、Yuval A によって提案されたものに似ています。
{\K132}Unmei {\K34}no {\K54}tobira
{\K60}{\K132}yukkuri {\K36}to {\K142}hirakareta
長さは、絶対オフセットではなく持続時間です。これにより、すべてのオフセットを再計算することなく、行の開始を簡単にシフトできます。二重エントリは一時停止を示します。
これを Java プログラムの一部にする必要がある正当な理由はありますか、それとも既製のソリューションが可能ですか?
どの文字の次のバッチが次の音節とその音節に切り替えるためのタイム スタンプで構成されているかを記述する単純なデータ構造はどうでしょうか?
簡単な例:
[0:00] この [0:02] は [0:05] [0:07] 例 [0:08] サンプル [0:10] です
単語の一部を強調することは、単語を構成する音である音声学に入るようなものです。音声ファイルをテキストを「読む」ものに変換するのは非常に困難です。あなたの最善の策は、Java Speech APIに基づいた FreeTTS のような音声学ベースのエンジンを駆動するためにテキスト自体を使用することです。
これを行うには、読み上げるテキストを取得し、それを各音節に分割して再生する必要があります。つまり、「音節」は「syl」「la」「ble」です。演奏は次のようになります。syl を強調表示し、それを言って、次のものに移動します。
これは、元の Apple II で同じ方法で行われた、まさに「オールドスクール」です。
FreeTTS -- このオープン ソース ツール : http://freetts.sourceforge.net/docs/index.php --に慣れることをお勧めします。
特定の時点で TTS エンジンにいくつかの単語だけをフィードしたい場合があります。それらを強調表示し、それらが読み出されたら強調表示を解除して、次の単語のバッチに移動します。
BR、
~A