SAPI费率公式评估

时间:2017-03-15 19:29:22

标签: c++ text-to-speech

我创建了一个计算机语音,我想正确对待率命令。

Microsoft白皮书对速率(https://msdn.microsoft.com/en-us/library/ms717037(v=vs.85).aspx)说明了这一点:

率:

Rate标签控制语音的速率。标记可以为空,在这种情况下,它适用于所有后续文本,或者它可以包含内容,在这种情况下,它仅适用于该内容。 Rate标签有两个属性,Speed和AbsSpeed,其中一个必须存在。这些属性的值应该是负十到十之间的整数。超出此范围的值可能会被引擎截断(但不会被SAPI截断)。 AbsSpeed属性控制语音的绝对速率,因此值10总是对应于值10;值5总是对应于值5。

该文本应以第五速率发言。 该文本应以负5的速度发言。 以下所有文本都应以十分之一的速度发言。

我还没有找到任何实际转换成比率的迹象。但是,我想与微软的计算机语音保持一致。

我使用一个例句进行了一些测试。

微软自己的计算机语音产生了以下输出,带有一个例句("这是一个测试。"):

评分8: 1,15秒

评分0: 2,65秒

率-8: 6,35秒

然而,我并没有看到这背后的真实公式。 我的尝试

float f1 = (rate / 10.0f);
float fSpeed = 1+f1;

似乎根本不符合MS的输出长度。

我将此值提供给着名的libSonic库中的sonicChangeFloatSpeed。

在-8速率下,我的声音输出约为12秒,而微软的声音输出约为6秒。

任何人都可以估算MS语音费率背后的公式吗?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

使用IVONA 2 Amy(英国英国)SAPI5语音阅读短语One Two Three Four Five.我得到一个严格的线性关系,持续时间v。减慢(负)率。 但对于超速(正)率,这种关系并不相同。它可以是不同斜率的线性。

Rate Duration (s)   
-10 3.0   150%
-9  2.9   145%
-8  2.8   140%
-7  2.7   135%
-6  2.6   130%
-5  2.5   125%
-4  2.4   120%
-3  2.3   115%
-2  2.2   110%
-1  2.1   105%
 0  2.0   100%
+1  1.8   90%
+2  1.7   85%
+3  1.6   80%
+4  1.4   70%
+5  1.3   65%
+6  1.1   55%
+7  1.0   50%
+8  0.8   40%
+9  0.7   35%
+10 0.5   25%

由于只有21个离散级别,您可以避免使用公式,只需使用我在第3列中提供的百分比查找表。这是您检查的图表。

Plot of duration v. rate