2011-02-12 14 views
11

sto cercando di cambiare l'intonazione del testo parlato tramite SSML e .NET SpeechSynthesizer (System.Speech.Synthesis)SpeechSynthesizer .NET passo controllo

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

Il contenuto del file è 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> 

il tasso è riconosciuto: "8 libri" è speaken molto più lento rispetto al resto, ma non importa quale valore è impostato per "passo", non fa differenza! I valori consentiti possono essere trovate qui:

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

mi sto perdendo qualcosa o è cambiare il passo proprio non supportato dal motore di Microsoft Speech?

Fritz

risposta

2

Mentre il motore SsmlParser utilizzato da System.Speech accetta un attributo pitch nel metodo ProcessProsody, non elabora.

Elabora solo gli attributi range, rate, volume e duration. Si analizza anche contour ma viene elaborato come range (non so perché) ...

Edit: se non si ha realmente bisogno di leggere il testo da un file XML SSML, è possibile creare il testo programatically.
Invece di

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

uso

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

Mi chiedo se c'è qualche altra API motore di discorso che può essere utilizzato con .NET e che elabora i comandi passo? – fritz

+0

@fritz: non ci sono molte API .NET. Ci sono molte API native, non molte sono "libere", comunque. Ho usato ** eSpeak ** (non .NET) con successo - output migliore di 'System.Speech' ma non ha letto bene SSML. –

+0

C'è un modo per cantare con il linguaggio .NET o qualsiasi alternativa? Sto cercando un'API che supporti le tre funzioni di controllo: 1) Discorso 2) Passo stabile preciso 3) Controllo della durata. C'è una cosa del genere? Ovviamente preferisco una API basata sulla musica. – Shimmy

Problemi correlati