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.
Например, если бы у вас был динамически генерируемый список элементов, из которых пользователь мог выбирать из речи, как бы вы указали, что то, что они скажут, скорее всего, будет одним из этих элементов?
PS Я тестирую это с Google Chrome, таким образом, используя x-webkit-speech
атрибут вместо speech
и аналогично x-webkit-grammar
вместо grammar
,
2 ответа
Я нашел способ сделать это на стороне клиента, используя новую функцию html5: blob.
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
элемент.
Таким образом, нет необходимости делать запрос к серверу, что делает его более быстрым и снижает нагрузку на сервер.
Для получения дополнительной информации о каплях, посмотрите это и это.
Файл грамматики может быть сгенерирован динамически, используя что-то вроде PHP, JSP или вашего любимого языка веб-разработки. Файл грамматики выбирается с использованием HTTP, так что вы можете получить что-то вроде этого, если вы используете PHP:
<input type="text" speech grammar="grammar.php?some_var=foo" />
PHP будет динамически создавать грамматику на основе информации, передаваемой в строке запроса или через хранимую информацию о сеансе, и возвращать ее в речевой механизм.