我正在尝试通过SSML和.NET SpeechSynthesizer(System.Speech.Synthesis)更改语音文本的音高
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
PromptBuilder builder = new PromptBuilder();
builder.AppendSsml(@"C:\Users\me\Documents\ssml1.xml");
synthesizer.Speak(builder);
ssml1.xml文件的内容为:
<?xml version="1.0" encoding="ISO-8859-1"?>
<ssml:speak version="1.0"
xmlns:ssml="http://www.w3.org/2001/10/synthesis"
xml:lang="en-US">
<ssml:sentence>
Your order for <ssml:prosody pitch="+30%" rate="-90%" >8 books</ssml:prosody>
will be shipped tomorrow.
</ssml:sentence>
</ssml:speak>
识别率:“8本书”的发音比其他单词慢得多,但是无论“pitch”设置为什么值,都没有区别!允许的值可以在这里找到:
http://www.w3.org/TR/speech-synthesis/#S3.2.4
我是否缺少某些东西,或者Microsoft语音引擎不支持更改音高?
弗里兹
最佳答案
虽然SsmlParser
使用的引擎System.Speech
在pitch
方法中接受ProcessProsody
属性,但它不会对其进行处理。
它仅处理range
,rate
,volume
和duration
属性。它也解析contour
,但是被当作range
处理(不确定原因)...
编辑:如果您确实不需要从SSML xml文件中读取文本,则可以以编程方式创建文本。
代替
builder.AppendSsml(@"C:\Users\me\Documents\ssml1.xml");
用
builder.Culture = CultureInfo.CreateSpecificCulture("en-US");
builder.StartVoice(builder.Culture);
builder.StartSentence();
builder.AppendText("Your order for ");
builder.StartStyle(new PromptStyle() { Emphasis = PromptEmphasis.Strong, Rate = PromptRate.ExtraSlow });
builder.AppendText("8 books");
builder.EndStyle();
builder.AppendText(" will be shipped tomorrow.");
builder.EndSentence();
builder.EndVoice();
关于c# - SpeechSynthesizer .NET控制音调,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4977379/