如何衡量在短语中说出单词所需的时间?

时间:2016-01-27 06:35:51

标签: java algorithm text-to-speech phonetics

我需要分析一个句子/短语以及说出每个单词所需的输出时间。例如,在句子中

How can mirrors be real if our eyes aren't?

我需要这个

  Word      Time   
 --------- ------- 
  How       101ms  
  can       95ms   
  mirrors   180ms  
  be        70ms   
  real      120ms  
  if        80ms   
  our       99ms   
  eyes      101ms  
  aren't?   180ms  

(我做了这个。这些不是实际的话语时间)

这样做的一种方法是假设单词长度与发声时间成正比,但这并不总是正确的('队列'和Q'有相同的话语时间虽然它们的字长不同)

还必须考虑存在标点符号。

奖金:认识情绪:)

有人能指出我这样做的算法/论文吗?有没有办法从现有的文本到语音代码中解决这个问题?感谢Java代码建议!

2 个答案:

答案 0 :(得分:1)

是的,这是机器学习算法可解决的问题。就像你指出类似的发声词可以有不同的时间。我建议使用机器学习算法,特别是双层神经网络,并用更大的数据集输入。 THese算法是众所周知的。然后,神经网络可以给出一个时间估计 - 例如,它将学习如何根据上下文估计q或队列的时间。使用机器学习算法的另一个好处是,如果您将实时语音(即新输入)解码为文本,它将为您提供对此新输入的估计。

答案 1 :(得分:1)

我有个主意......

如果您想获得非常精确的结果:

有一张地图,其中包含每个可能单词的时间计数结果。这是详尽的,但实现是不言自明的,非常简单。

如果您想要对结果有一个很好的近似值:

获取一些初始数据,告诉您说出一个音节需要多长时间。可以有短音节或长音节。得到初始结果,找出说出一个短音节(比如一个队列)需要多长时间,以及一个长音节(比如一个眼睛等)多少。此外,您可以节省标点符号所需的时间。

样品:

短:50ms
长:100ms
逗号:20ms
全站:35ms等。

现在得到一个计数并乘以得到结果。

如果发现一些例外,您可以更新值,例如。 “尖叫”是一个单音节,但绝对需要超过100毫秒。你可以有一定的时间来说出一个音节。 (就像之前的例子有2个级别 - 长/短)。你可以从4个级别开始(短/中/长/很长等)