gpt4 book ai didi

c# - SpeechSynthesizer .NET 控制音高

转载 作者:可可西里 更新时间:2023-11-01 08:49:29 26 4
gpt4 key购买 nike

我正在尝试通过 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 本书”比其他人说得慢得多,但无论为“音高”设置什么值,都没有区别!可以在此处找到允许的值:

http://www.w3.org/TR/speech-synthesis/#S3.2.4

我是否遗漏了什么或正在更改 Microsoft 语音引擎不支持的音调?

弗里茨

最佳答案

虽然 System.Speech 使用的引擎 SsmlParserProcessProsody 方法中接受一个 pitch 属性,它不处理它。

它只处理rangeratevolumeduration 属性。它还解析 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com