我想编写一个程序,在其中播放读取文本的音频文件。我想以绿色突出音频文件播放的当前音节,以红色突出当前单词的其余部分。我应该使用什么样的数据结构来存储音频文件以及告诉程序何时切换到下一个单词/音节的信息?
4 回答
这是一个稍微偏左的建议,但你看过卡拉OK软件吗?它可能被视为不够“严重”,但听起来与您正在做的事情非常相似。例如,Aegisub是一个字幕程序,可让您创建 SSA/ASS 格式的字幕。它具有用于突出显示所选单词或部分的卡拉 OK 工具。
它最常用于动画字幕,但如果您有合适的播放器,它也适用于音频。遗憾的是,这些在 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] am- [0:10] ple
要突出部分单词的发音,就像您正在进入语音学一样,语音学是构成单词的声音。将声音文件转换为可以“读取”文本的文件将非常困难。最好的办法是使用文本本身来驱动基于语音的引擎,例如基于Java Speech API的 FreeTTS 。
要做到这一点,您将不得不读取要阅读的文本,将其拆分为每个音节并播放。所以“音节”是“syl”“la”“ble”。玩会;突出显示 syl,说出来,然后转到下一个。
这真的是“老派”,它在最初的 Apple II 上以同样的方式完成。
您可能想熟悉 FreeTTS - 这个开源工具:http ://freetts.sourceforge.net/docs/index.php -
您可能只想在给定的时间点向 TTS 引擎提供几个单词——突出显示它们,一旦这些单词被说出,取消突出显示它们并移动到下一批单词。
BR,
~A