2011-02-12 40 views
11

Tôi đang cố gắng để thay đổi độ cao của văn bản nói qua SSML và .NET SpeechSynthesizer (System.Speech.Synthesis)SpeechSynthesizer NET kiểm soát sân

SpeechSynthesizer synthesizer = new SpeechSynthesizer(); 
PromptBuilder builder = new PromptBuilder(); 
builder.AppendSsml(@"C:\Users\me\Documents\ssml1.xml"); 
synthesizer.Speak(builder); 

Nội dung của tập tin ssml1.xml là:

<?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> 

tỷ lệ được công nhận: "8 cuốn sách" được speaken chậm hơn nhiều so với phần còn lại, nhưng không có vấn đề gì giá trị được đặt cho "sân", nó làm cho không có sự khác biệt! giá trị được phép có thể được tìm thấy ở đây:

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

Am tôi thiếu một cái gì đó hoặc đang thay đổi pitch chỉ không được hỗ trợ bởi các công cụ Microsoft Speech là gì?

Fritz

Trả lời

2

Trong khi động cơ được sử dụng bởi SsmlParserSystem.Speech chấp nhận một thuộc tính pitch trong phương pháp ProcessProsody, nó không xử lý nó.

Chỉ xử lý thuộc tính range, rate, volumeduration. Nó cũng phân tích contour nhưng được xử lý như range (không chắc chắn lý do tại sao) ...

Sửa: nếu bạn không thực sự cần phải đọc các văn bản từ một tập tin xml SSML, bạn có thể tạo ra các văn bản chương trình khác.
Thay vì

builder.AppendSsml(@"C:\Users\me\Documents\ssml1.xml"); 

sử dụng

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

Tôi tự hỏi nếu có bất kỳ lời nói động cơ api khác có thể được sử dụng với .net và đó sẽ xử lý lệnh sân? – fritz

+0

@fritz: không có nhiều API .NET. Có nhiều API gốc, tuy nhiên, nhiều API không phải là "miễn phí". Tôi đã sử dụng ** eSpeak ** (không .NET) với thành công - đầu ra tốt hơn so với 'System.Speech' nhưng nó không đọc SSML tốt. –

+0

Có cách nào để hát với bài phát biểu .NET hay bất kỳ phương án nào khác không? Tôi đang tìm một API hỗ trợ ba tính năng điều khiển: 1) Bài phát biểu 2) Độ ổn định chính xác cao 3) Kiểm soát thời lượng. Có một điều như vậy? Tôi rõ ràng thích một API hướng âm nhạc hơn. – Shimmy

Các vấn đề liên quan