2011-02-12 8 views
11

SSML 및 .NET SpeechSynthesizer (System.Speech.Synthesis)를 통해 음성 텍스트의 피치를 변경하려고합니다.SpeechSynthesizer .NET 컨트롤 피치

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 음성 엔진에서 지원하지 않는 피치 또는 뭔가가 누락 되었습니까?

fritz

답변

2

엔진 SsmlParserSystem.Speech 의해 사용이 ProcessProsody 방법에 pitch 특성을 허용하지만, 그것을 처리하지 않는다.

오직 range, rate, volumeduration 속성 만 처리합니다. 당신이 정말 SSML XML 파일에서 텍스트를 읽을 필요가없는 경우, 당신은 프로그래밍 방식으로 텍스트를 만들 수 있습니다 그것은 또한

편집 ... contour 구문 분석하지만 (왜 확실하지) range로 처리됩니다. 대신

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(); 
+0

내가 .NET을 사용하는 피치 명령을 처리 할 수있는 다른 음성 엔진의 API가 있는지 궁금의
? – fritz

+0

@fritz : .NET API가 많지 않습니다. 많은 원시 API가 있지만 그 중 많은 수가 "무료"는 아닙니다. 나는 ** eSpeak ** (.NET이 아니라)를 성공과 함께 사용했다 - System.Speech보다는 더 나은 결과물이지만 SSML을 잘 읽지는 못했다. –

+0

.NET 음성 또는 다른 대안으로 노래하는 방법이 있습니까? 나는 컨트롤의 세 가지 기능을 지원하는 API를 찾고 있는데요. 1) Speech 2) 정확한 안정된 피치 3) Duration 컨트롤. 그런 것이 있습니까? 음악적으로 주도적 인 API를 선호합니다. – Shimmy