2017-03-15 122 views
0

我创建了一个计算机语音,我想正确处理速率命令。SAPI速率公式评估

微软白皮书说,这对率(0​​):

率:

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

这段文字应该用五种语言说出。 这段文字应该以5的速率说出。 接下来的所有文字都应该以10的速度说出。

我还没有找到任何指示应该实际转换为什么比率。不过,我想继续确认微软的电脑语音。

我用一个例子做了一些测试。

微软自己的计算机语音产生与样品句子下面输出( “这是一个测试”):

率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

微软有不少SAPI5声音 - 您使用作为您的参考哪一个?您可能会发现使用非MS语音作为参考更有用,因为有些功能要好得多 - 而且他们可能更注意细节,例如一致的速率变化。国际海事组织伊万娜做英语声音。 – GavinBrelstaff

+0

@GavinBrelstaff我可以向你保证,作为一名开发人员,微软在他们的声音上表现出色。支持任何标签,所有事件触发,所有数据转换都非常出色。 Ivona在我尝试过的语言中并不擅长。 – tmighty

回答

1

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

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

+0

你确定吗?这可以放入公式中吗? – tmighty

+0

@tmighty而不是一个公式我给你一个查找表,你可以使用找到你需要的乘数,以21种不同的速率 – GavinBrelstaff