Правильный способ использования SSML с Web Speech API

В спецификации Web Speech API говорится :

текст атрибут
Этот атрибут определяет текст, который будет синтезирован и произнесен для этого высказывания. Это может быть обычный текст или полный документ SSML правильного формата. Для механизмов синтеза речи, которые не поддерживают SSML или поддерживают только определенные теги, пользовательский агент или механизм речи должны удалить теги, которые они не поддерживают, и озвучить текст.

Он не предоставляет пример использования text с документом SSML.

В 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);

Не вышло - голос пытался озвучивать теги XML. Этот код действителен?
Должен ли я вместо этого предоставлять объект XMLDocument?

Я пытаюсь понять, нарушает ли Chrome спецификацию (о чем следует сообщать как об ошибке) или мой код недействителен.


person Andrey Shchekin    schedule 22.02.2014    source источник
comment
Вы когда-нибудь это решали? Самое близкое, что я могу найти в SSML и chrome, - это документация по синтезу речи плагина Chrome developer.chrome.com/ extension / tts   -  person ElDog    schedule 20.03.2014
comment
Вы также используете Linux. Поскольку кажется, что там могут быть проблемы code.google.com/p / chromium / issues / detail? id = 88072   -  person ElDog    schedule 20.03.2014
comment
@ElDog все, что я нашел, - это ошибка (я там прокомментировал) - кстати, как я прочитал описание, она также не реализована в Mac / Win.   -  person Andrey Shchekin    schedule 20.03.2014
comment
Из этой цепочки сообщений об ошибках и других кажется справедливым сказать, что SSML просто еще не поддерживается в этом Chrome API и, похоже, ни для кого не является приоритетом. Надеюсь, это добавлено немного времени, чтобы синтез речи можно было сделать более отзывчивым.   -  person matanster    schedule 21.03.2014
comment
@AndreyShchekin ах да, моя ошибка, похоже, это тоже Mac / Win. Вернемся к работе на стороне сервера TTS, мне нужен SSML для хака моего пения.   -  person ElDog    schedule 21.03.2014
comment
var xmldoc = new DOMParser().parseFromString(text, 'text/xml') тоже не помогает, так что я думаю, что точка зрения Мэтта верна.   -  person Brett Zamir    schedule 06.06.2014
comment
Если вы все еще заинтересованы в этом, я знаю, что Chrome TTS API будет работать с командами просодии Mac, например the square root of [[pbas +4]] 2 [[char LTRL]]a[[char NORM]] to the [[pbas +4]] 14 [[char LTRL]]x[[char NORM]]. Я не знаю, только ли это для голосов Mac. developer.apple.com/library/mac/documentation/UserExperience/   -  person citelao    schedule 08.03.2015


Ответы (3)


В Chrome 46 XML правильно интерпретируется как XML-документ в Windows, если для языка задано значение en; однако я не вижу доказательств того, что теги действительно что-то делают. Я не слышал разницы между <emphasis> и не <emphasis> версиями этого 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);

Тег <phoneme> также был полностью проигнорирован, из-за чего моя попытка говорить на IPA потерпела неудачу.

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);

И это несмотря на то, что Microsoft Speech API действительно правильно обрабатывает SSML. Вот фрагмент кода C #, подходящий для использования в 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);
person Ross Presser    schedule 21.11.2015
comment
Здесь та же проблема. - person Griffork; 07.04.2016
comment
В текущем Chrome 55.0 он даже не распознает XML. Мое выступление (msg) говорит такие вещи, как меньше, чем вопросительный знак, версия ex em el, равная цитате, одна точка нуля цитата ... - person Ross Presser; 10.01.2017
comment
Я не думаю, что SSML пока поддерживается :( - person Shu; 01.04.2017
comment
По состоянию на май 2020 года он работает нормально. Версия 81.0.4044.138 - person Mutant; 21.05.2020
comment
Я все еще использую сборку 81.0.4044.129 из-за ограничений моей компании, и она НЕ работает у меня правильно. ‹Emphasis› и ‹phoneme› по-прежнему игнорируются в моей системе. - person Ross Presser; 21.05.2020

В настоящее время в Chromium есть ошибки, связанные с этой проблемой.

  • 88072: реализации расширенной платформы TTS API должны поддерживать SSML.
  • 428902: SpeakSynthesis.speak () не удалить нераспознанные теги Эта ошибка исправлена ​​в Chrome с сентября 2016 года.
person Sarah Elan    schedule 19.03.2015
comment
И 428902 регрессировал: / Он все еще здесь. - person Qix - MONICA WAS MISTREATED; 30.07.2017
comment
Ошибка возникает в Windows, но не в MacOS. - person Steven Matthews; 28.12.2018

Я протестировал это, и, похоже, синтаксический анализ XML работает правильно в Windows, однако он не работает должным образом в MacOS.

person Steven Matthews    schedule 27.12.2018
comment
Я просто пытаюсь заставить синтаксический анализ XML работать в Windows 10 безуспешно в firefox, chrome, edge. Буду признателен за любые указатели на рабочие примеры. - person toka; 19.03.2021