HTML5 Распознавание речи --- есть ли способ установить, что пользователь должен сказать динамически? (Использование пользовательских грамматик)
Я ищу способ определить, что вы ожидаете от пользователя в теге <input>
с набором атрибутов HTML 5 speech
.
Я знаю, что вы можете указать конкретную грамматику для использования через атрибут grammar
,
вот так:
<input type="text" speech grammar="grammar.grxml" />
(см. http://lists.w3.org/Archives/Public/public-xg-htmlspeech/2011Feb/att-0020/api-draft.html)
но я надеялся на способ сделать эту динамику, чтобы я мог указать, что я ожидаю, что пользователь скажет через javascript.
Например, если у вас есть динамически сгенерированный список элементов для пользователя, чтобы выбрать из речи, как бы вы указали, что то, что они скажут, скорее всего, будет одним из этих элементов?
P.S. Я тестирую это с помощью Google Chrome, используя вместо атрибута x-webkit-speech
вместо speech
, а также x-webkit-grammar
вместо grammar
.
Ответы
Ответ 1
Я нашел способ сделать это на стороне клиента, используя новую функцию html5: blobs.
window.URL = window.URL || window.webkitURL;
var myGrammar = new Blob(["My custom grammar"], {
type: 'text/xml Or whatever is the proper MIME type for grammars'});
var grammarUrl = window.URL.createObjectURL(myGrammar);
myInput = document.getElementById("myInput");
myInput.grammar = grammarUrl;
Это делает url из строки грамматики, а затем устанавливает этот url для нашего элемента input
.
Таким образом, нет необходимости делать запрос сервера, тем самым делая его быстрее и меньше нагрузки на сервер.
Для получения дополнительной информации о блобах см. this и this.
Ответ 2
Файл грамматики может быть динамически сгенерирован с использованием чего-то вроде PHP, JSP или вашего любимого языка веб-разработки. Файл грамматики извлекается с использованием HTTP, поэтому вы можете иметь что-то вроде этого, если используете PHP:
<input type="text" speech grammar="grammar.php?some_var=foo" />
PHP будет динамически создавать грамматику на основе информации, переданной в строке запроса, или через хранимую информацию сеанса и возвращать ее в речевой механизм.