2014-02-22 9 views
9

Web Speech API specification sagt:Der richtige Weg SSML zu verwenden, um mit Web Speech API

Text Attribut
Dieses Attribut den Text gibt synthetisiert und für diese Äußerung gesprochen werden. Dies kann entweder reiner Text oder ein vollständiges, wohlgeformtes SSML-Dokument sein. Für Sprachsynthesemaschinen , die SSML nicht unterstützen oder nur bestimmte Tags unterstützen, muss der Benutzer Agent oder Sprachmodul die Tags, die sie nicht unterstützen, entfernen und den Text sprechen.

Es gibt kein Beispiel für die Verwendung von text mit einem SSML-Dokument.

Ich habe versucht, die folgenden in Chrome 33:

var msg = new SpeechSynthesisUtterance(); 
msg.text = '<?xml version="1.0"?>\r\n<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US">ABCD</speak>'; 
speechSynthesis.speak(msg); 

Es hat nicht funktioniert - die Stimme die XML-Tags zu erzählen versucht. Ist dieser Code gültig?
Muss ich stattdessen ein XMLDocument Objekt bereitstellen?

Ich versuche zu verstehen, ob Chrome die Spezifikation verletzt (was als Fehler gemeldet werden sollte), oder ob mein Code ungültig ist.

+0

Haben Sie das jemals gelöst? Das Nächste, was ich auf SSML und Chrome finden kann, ist die Dokumentation für die Sprachsynthese von Chrome-Plugins. Https://developer.chrome.com/extensions/tts – ElDog

+0

Außerdem benutzt du Linux. Weil es scheint, dass es Probleme gibt https://code.google.com/p/chromium/issues/detail?id=88072 – ElDog

+0

@ElDog alles, was ich fand, war dieser Fehler (ich habe dort kommentiert) - übrigens den Weg Ich habe die Beschreibung gelesen, die auch in Mac/Win nicht implementiert ist. –

Antwort

4

In Chrome 46 wird das XML ordnungsgemäß als XML-Dokument unter Windows interpretiert, wenn die Sprache auf en gesetzt ist; Ich sehe jedoch keinen Beweis dafür, dass die Tags tatsächlich etwas bewirken. Ich hörte keinen Unterschied zwischen den <emphasis> und nicht <emphasis> Versionen dieses SSML:

var msg = new SpeechSynthesisUtterance(); 
msg.text = '<?xml version="1.0"?>\r\n<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="en-US"><emphasis>Welcome</emphasis> to the Bird Seed Emporium. Welcome to the Bird Seed Emporium.</speak>'; 
msg.lang = 'en'; 
speechSynthesis.speak(msg); 

Der <phoneme> Tag wurde ebenfalls komplett ignoriert, was meinen Versuch zu sprechen IPA ausfallen. Diese

var msg = new SpeechSynthesisUtterance(); 
msg.text='<?xml version="1.0" encoding="ISO-8859-1"?> <speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3.org/2001/10/synthesis http://www.w3.org/TR/speech-synthesis/synthesis.xsd" xml:lang="en-US"> Pavlova is a meringue-based dessert named after the Russian ballerina Anna Pavlova. It is a meringue cake with a crisp crust and soft, light inside, usually topped with fruit and, optionally, whipped cream. The name is pronounced <phoneme alphabet="ipa" ph="p&aelig;v&#712;lo&#650;v&#601;">...</phoneme> or <phoneme alphabet="ipa" ph="p&#593;&#720;v&#712;lo&#650;v&#601;">...</phoneme>, unlike the name of the dancer, which was <phoneme alphabet="ipa" ph="&#712;p&#593;&#720;vl&#601;v&#601;">...</phoneme> </speak>'; 
msg.lang = 'en'; 
speechSynthesis.speak(msg); 

ist trotz der Tatsache, dass die Microsoft Sprach-API tut SSML korrekt zu verarbeiten. Hier ist ein C# -Snippet, geeignet für den Einsatz in LinqPad:

var str = "Pavlova is a meringue-based dessert named after the Russian ballerina Anna Pavlova. It is a meringue cake with a crisp crust and soft, light inside, usually topped with fruit and, optionally, whipped cream. The name is pronounced /pævˈloʊvə/ or /pɑːvˈloʊvə/, unlike the name of the dancer, which was /ˈpɑːvləvə/."; 
var regex = new Regex("/([^/]+)/"); 
if (regex.IsMatch(str)) 
{ 
    str = regex.Replace(str, "<phoneme alphabet=\"ipa\" ph=\"$1\">word</phoneme>"); 
    str.Dump(); 
} 
SpeechSynthesizer synth = new SpeechSynthesizer(); 
PromptBuilder pb = new PromptBuilder(); 
pb.AppendSsmlMarkup(str); 
synth.Speak(pb); 
+0

Das gleiche Problem hier. – Griffork

+0

Mit dem aktuellen Chrome 55.0 erkennt es nicht einmal das XML. Mein speak (msg) sagt Dinge wie "weniger als Fragezeichen ex em el Version gleich quote ein Punkt Null Zitat ..." –

+0

Ich glaube nicht, dass SSML noch unterstützt wird :( – Shu

4

Es gibt Fehler für dieses Problem derzeit mit Chrom geöffnet.

  • 88072: Erweiterung TTS API Plattformimplementierungen müssen SSML unterstützen
  • 428902: speechSynthesis.speak() 2016. Dieser Fehler wie von Sept behoben wurde
in Chrome nicht unerkannt Tags nicht abstreifen
+1

Und 428902 regrediert:/Es ist immer noch da . – Qix