持续时间 属性 的 SpeechSynthesizer?
SpeechSynthesizer with a duration property?
我需要一个带有可设置持续时间 属性 的语音合成器来指定朗读文本需要多长时间。 System.Speech.Synthesis.SpeechSynthesizer class 只有一个比率 属性.
有一个 System.Speech.Synthesis.TtsEngine 名称空间,其韵律 class 可设置 Duration 属性。但我找不到任何有关如何使用 TtsEngine 或此 属性 如何应用于 SpeechSynthesizer class 的示例(如果可能的话)。或者是否有其他我应该研究的语音合成库?
我想我明白了,多亏了对此 question 的第一个回复的提示。
using System.Speech.Synthesis;
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
void speak_utterance(string utterance_text, int duration_millisec = 0) {
if (duration_millisec <= 0) {
synthesizer.Speak(utterance_text);
}
else {
PromptBuilder builder = new PromptBuilder();
builder.AppendSsmlMarkup("<prosody duration='" + duration_millisec.ToString() + "ms'>" + utterance_text + "</prosody>");
synthesizer.Speak(builder);
}
}
我注意到持续时间和合成器说出数字时出现了一些意想不到的交互。例如:
string clearance0 = "american one twenty three cleared to land runway one left"
string clearance1= "american 123 cleared to land runway one left"
speak_utterance(clearance0, 10000);
speak_utterance(clearance1, 10000);
第一次通话时,整个语音都比较慢,拖了 10 多秒。
对于第二次通话,“美国 123”与第一次通话一样缓慢且拉长,但话语的后半部分以正常速度说出,总持续时间小于预期。所以我必须将数字转换为文字以获得一致的性能。 (或者可能有一个 属性 影响合成器处理数字的方式,可以纠正这个问题。如果我发现任何东西,将会更新。)
我需要一个带有可设置持续时间 属性 的语音合成器来指定朗读文本需要多长时间。 System.Speech.Synthesis.SpeechSynthesizer class 只有一个比率 属性.
有一个 System.Speech.Synthesis.TtsEngine 名称空间,其韵律 class 可设置 Duration 属性。但我找不到任何有关如何使用 TtsEngine 或此 属性 如何应用于 SpeechSynthesizer class 的示例(如果可能的话)。或者是否有其他我应该研究的语音合成库?
我想我明白了,多亏了对此 question 的第一个回复的提示。
using System.Speech.Synthesis;
SpeechSynthesizer synthesizer = new SpeechSynthesizer();
void speak_utterance(string utterance_text, int duration_millisec = 0) {
if (duration_millisec <= 0) {
synthesizer.Speak(utterance_text);
}
else {
PromptBuilder builder = new PromptBuilder();
builder.AppendSsmlMarkup("<prosody duration='" + duration_millisec.ToString() + "ms'>" + utterance_text + "</prosody>");
synthesizer.Speak(builder);
}
}
我注意到持续时间和合成器说出数字时出现了一些意想不到的交互。例如:
string clearance0 = "american one twenty three cleared to land runway one left"
string clearance1= "american 123 cleared to land runway one left"
speak_utterance(clearance0, 10000);
speak_utterance(clearance1, 10000);
第一次通话时,整个语音都比较慢,拖了 10 多秒。
对于第二次通话,“美国 123”与第一次通话一样缓慢且拉长,但话语的后半部分以正常速度说出,总持续时间小于预期。所以我必须将数字转换为文字以获得一致的性能。 (或者可能有一个 属性 影响合成器处理数字的方式,可以纠正这个问题。如果我发现任何东西,将会更新。)