我创建了一个计算机语音,我想正确对待率命令。
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语音费率背后的公式吗?
感谢您的帮助。
答案 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列中提供的百分比查找表。这是您检查的图表。