OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 cr.define('hotword.constants', function() { | 5 cr.define('hotword.constants', function() { |
6 'use strict'; | 6 'use strict'; |
7 | 7 |
8 /** | 8 /** |
9 * Number of seconds of audio to record when logging is enabled. | 9 * Number of seconds of audio to record when logging is enabled. |
10 * @const {number} | 10 * @const {number} |
11 */ | 11 */ |
12 var AUDIO_LOG_SECONDS = 2; | 12 var AUDIO_LOG_SECONDS = 2; |
13 | 13 |
14 /** | 14 /** |
15 * Timeout in seconds, for detecting false positives with a hotword stream. | 15 * Timeout in seconds, for detecting false positives with a hotword stream. |
16 * @const {number} | 16 * @const {number} |
17 */ | 17 */ |
18 var HOTWORD_STREAM_TIMEOUT_SECONDS = 2; | 18 var HOTWORD_STREAM_TIMEOUT_SECONDS = 2; |
19 | 19 |
20 /** | 20 /** |
21 * Hotword data shared module extension's ID. | 21 * Hotword data shared module extension's ID. |
22 * @const {string} | 22 * @const {string} |
23 */ | 23 */ |
24 var SHARED_MODULE_ID = 'lccekmodgklaepjeofjdjpbminllajkg'; | 24 var SHARED_MODULE_ID = 'lccekmodgklaepjeofjdjpbminllajkg'; |
25 | 25 |
26 /** | 26 /** |
27 * Path to shared module data. | 27 * Path to shared module data. |
28 * @const {string} | 28 * @const {string} |
29 */ | 29 */ |
30 var SHARED_MODULE_ROOT = '_modules/' + SHARED_MODULE_ID; | 30 var SHARED_MODULE_ROOT = '_modules/' + SHARED_MODULE_ID; |
31 | 31 |
32 /** | 32 /** |
33 * Name used by the content scripts to create communications Ports. | 33 * Name used by the content scripts to create communications Ports. |
34 * @const {string} | 34 * @const {string} |
35 */ | 35 */ |
36 var CLIENT_PORT_NAME = 'chwcpn'; | 36 var CLIENT_PORT_NAME = 'chwcpn'; |
37 | 37 |
38 /** | 38 /** |
39 * The field name to specify the command among pages. | 39 * The field name to specify the command among pages. |
40 * @const {string} | 40 * @const {string} |
41 */ | 41 */ |
42 var COMMAND_FIELD_NAME = 'cmd'; | 42 var COMMAND_FIELD_NAME = 'cmd'; |
43 | 43 |
44 /** | 44 /** |
45 * The speaker model file name. | 45 * The speaker model file name. |
46 * @const {string} | 46 * @const {string} |
47 */ | 47 */ |
48 var SPEAKER_MODEL_FILE_NAME = 'speaker_model.data'; | 48 var SPEAKER_MODEL_FILE_NAME = 'speaker_model.data'; |
49 | 49 |
50 /** | 50 /** |
51 * The training utterance file name prefix. | 51 * The training utterance file name prefix. |
52 * @const {string} | 52 * @const {string} |
53 */ | 53 */ |
54 var UTTERANCE_FILE_PREFIX = 'utterance-'; | 54 var UTTERANCE_FILE_PREFIX = 'utterance-'; |
55 | 55 |
56 /** | 56 /** |
57 * The training utterance file extension. | 57 * The training utterance file extension. |
58 * @const {string} | 58 * @const {string} |
59 */ | 59 */ |
60 var UTTERANCE_FILE_EXTENSION = '.raw'; | 60 var UTTERANCE_FILE_EXTENSION = '.raw'; |
61 | 61 |
62 /** | 62 /** |
63 * The number of training utterances required to train the speaker model. | 63 * The number of training utterances required to train the speaker model. |
64 * @const {number} | 64 * @const {number} |
65 */ | 65 */ |
66 var NUM_TRAINING_UTTERANCES = 3; | 66 var NUM_TRAINING_UTTERANCES = 3; |
67 | 67 |
68 /** | 68 /** |
69 * The size of the file system requested for reading the speaker model and | 69 * The size of the file system requested for reading the speaker model and |
70 * utterances. This number should always be larger than the combined file size, | 70 * utterances. This number should always be larger than the combined file |
71 * currently 576338 bytes as of February 2015. | 71 * size, |
72 * @const {number} | 72 * currently 576338 bytes as of February 2015. |
73 */ | 73 * @const {number} |
74 var FILE_SYSTEM_SIZE_BYTES = 1048576; | 74 */ |
75 | 75 var FILE_SYSTEM_SIZE_BYTES = 1048576; |
76 /** | 76 |
77 * Time to wait for expected messages, in milliseconds. | 77 /** |
78 * @enum {number} | 78 * Time to wait for expected messages, in milliseconds. |
79 */ | 79 * @enum {number} |
80 var TimeoutMs = { | 80 */ |
81 SHORT: 200, | 81 var TimeoutMs = {SHORT: 200, NORMAL: 500, LONG: 2000}; |
82 NORMAL: 500, | 82 |
83 LONG: 2000 | 83 /** |
84 }; | 84 * The URL of the files used by the plugin. |
85 | 85 * @enum {string} |
86 /** | 86 */ |
87 * The URL of the files used by the plugin. | 87 var File = { |
88 * @enum {string} | 88 RECOGNIZER_CONFIG: 'hotword.data', |
89 */ | 89 }; |
90 var File = { | 90 |
91 RECOGNIZER_CONFIG: 'hotword.data', | 91 /** |
92 }; | 92 * Errors emitted by the NaClManager. |
93 | 93 * @enum {string} |
94 /** | 94 */ |
95 * Errors emitted by the NaClManager. | 95 var Error = { |
96 * @enum {string} | 96 NACL_CRASH: 'nacl_crash', |
97 */ | 97 TIMEOUT: 'timeout', |
98 var Error = { | 98 }; |
99 NACL_CRASH: 'nacl_crash', | 99 |
100 TIMEOUT: 'timeout', | 100 /** |
101 }; | 101 * Event types supported by NaClManager. |
102 | 102 * @enum {string} |
103 /** | 103 */ |
104 * Event types supported by NaClManager. | 104 var Event = { |
105 * @enum {string} | 105 READY: 'ready', |
106 */ | 106 TRIGGER: 'trigger', |
107 var Event = { | 107 SPEAKER_MODEL_SAVED: 'speaker model saved', |
108 READY: 'ready', | 108 ERROR: 'error', |
109 TRIGGER: 'trigger', | 109 TIMEOUT: 'timeout', |
110 SPEAKER_MODEL_SAVED: 'speaker model saved', | 110 }; |
111 ERROR: 'error', | 111 |
112 TIMEOUT: 'timeout', | 112 /** |
113 }; | 113 * Messages for communicating with the NaCl recognizer plugin. These must |
114 | 114 * match |
115 /** | 115 * constants in <google3>/hotword_plugin.c |
116 * Messages for communicating with the NaCl recognizer plugin. These must match | 116 * @enum {string} |
117 * constants in <google3>/hotword_plugin.c | 117 */ |
118 * @enum {string} | 118 var NaClPlugin = { |
119 */ | 119 RESTART: 'r', |
120 var NaClPlugin = { | 120 SAMPLE_RATE_PREFIX: 'h', |
121 RESTART: 'r', | 121 MODEL_PREFIX: 'm', |
122 SAMPLE_RATE_PREFIX: 'h', | 122 STOP: 's', |
123 MODEL_PREFIX: 'm', | 123 LOG: 'l', |
124 STOP: 's', | 124 DSP: 'd', |
125 LOG: 'l', | 125 BEGIN_SPEAKER_MODEL: 'b', |
126 DSP: 'd', | 126 ADAPT_SPEAKER_MODEL: 'a', |
127 BEGIN_SPEAKER_MODEL: 'b', | 127 FINISH_SPEAKER_MODEL: 'f', |
128 ADAPT_SPEAKER_MODEL: 'a', | 128 SPEAKER_MODEL_SAVED: 'sm_saved', |
129 FINISH_SPEAKER_MODEL: 'f', | 129 REQUEST_MODEL: 'model', |
130 SPEAKER_MODEL_SAVED: 'sm_saved', | 130 MODEL_LOADED: 'model_loaded', |
131 REQUEST_MODEL: 'model', | 131 READY_FOR_AUDIO: 'audio', |
132 MODEL_LOADED: 'model_loaded', | 132 STOPPED: 'stopped', |
133 READY_FOR_AUDIO: 'audio', | 133 HOTWORD_DETECTED: 'hotword', |
134 STOPPED: 'stopped', | 134 MS_CONFIGURED: 'ms_configured', |
135 HOTWORD_DETECTED: 'hotword', | 135 TIMEOUT: 'timeout' |
136 MS_CONFIGURED: 'ms_configured', | 136 }; |
137 TIMEOUT: 'timeout' | 137 |
138 }; | 138 /** |
139 | 139 * Messages sent from the injected scripts to the Google page. |
140 /** | 140 * @enum {string} |
141 * Messages sent from the injected scripts to the Google page. | 141 */ |
142 * @enum {string} | 142 var CommandToPage = { |
143 */ | 143 HOTWORD_VOICE_TRIGGER: 'vt', |
144 var CommandToPage = { | 144 HOTWORD_STARTED: 'hs', |
145 HOTWORD_VOICE_TRIGGER: 'vt', | 145 HOTWORD_ENDED: 'hd', |
146 HOTWORD_STARTED: 'hs', | 146 HOTWORD_TIMEOUT: 'ht', |
147 HOTWORD_ENDED: 'hd', | 147 HOTWORD_ERROR: 'he' |
148 HOTWORD_TIMEOUT: 'ht', | 148 }; |
149 HOTWORD_ERROR: 'he' | 149 |
150 }; | 150 /** |
151 | 151 * Messages sent from the Google page to the extension or to the |
152 /** | 152 * injected script and then passed to the extension. |
153 * Messages sent from the Google page to the extension or to the | 153 * @enum {string} |
154 * injected script and then passed to the extension. | 154 */ |
155 * @enum {string} | 155 var CommandFromPage = { |
156 */ | 156 SPEECH_START: 'ss', |
157 var CommandFromPage = { | 157 SPEECH_END: 'se', |
158 SPEECH_START: 'ss', | 158 SPEECH_RESET: 'sr', |
159 SPEECH_END: 'se', | 159 SHOWING_HOTWORD_START: 'shs', |
160 SPEECH_RESET: 'sr', | 160 SHOWING_ERROR_MESSAGE: 'sem', |
161 SHOWING_HOTWORD_START: 'shs', | 161 SHOWING_TIMEOUT_MESSAGE: 'stm', |
162 SHOWING_ERROR_MESSAGE: 'sem', | 162 CLICKED_RESUME: 'hcc', |
163 SHOWING_TIMEOUT_MESSAGE: 'stm', | 163 CLICKED_RESTART: 'hcr', |
164 CLICKED_RESUME: 'hcc', | 164 CLICKED_DEBUG: 'hcd', |
165 CLICKED_RESTART: 'hcr', | 165 WAKE_UP_HELPER: 'wuh', |
166 CLICKED_DEBUG: 'hcd', | 166 // Command specifically for the opt-in promo below this line. |
167 WAKE_UP_HELPER: 'wuh', | 167 // User has explicitly clicked 'no'. |
168 // Command specifically for the opt-in promo below this line. | 168 CLICKED_NO_OPTIN: 'hcno', |
169 // User has explicitly clicked 'no'. | 169 // User has opted in. |
170 CLICKED_NO_OPTIN: 'hcno', | 170 CLICKED_OPTIN: 'hco', |
171 // User has opted in. | 171 // User clicked on the microphone. |
172 CLICKED_OPTIN: 'hco', | 172 PAGE_WAKEUP: 'wu' |
173 // User clicked on the microphone. | 173 }; |
174 PAGE_WAKEUP: 'wu' | 174 |
175 }; | 175 /** |
176 | 176 * Source of a hotwording session request. |
177 /** | 177 * @enum {string} |
178 * Source of a hotwording session request. | 178 */ |
179 * @enum {string} | 179 var SessionSource = { |
180 */ | 180 LAUNCHER: 'launcher', |
181 var SessionSource = { | 181 NTP: 'ntp', |
182 LAUNCHER: 'launcher', | 182 ALWAYS: 'always', |
183 NTP: 'ntp', | 183 TRAINING: 'training' |
184 ALWAYS: 'always', | 184 }; |
185 TRAINING: 'training' | 185 |
186 }; | 186 /** |
187 | 187 * The mode to start the hotword recognizer in. |
188 /** | 188 * @enum {string} |
189 * The mode to start the hotword recognizer in. | 189 */ |
190 * @enum {string} | 190 var RecognizerStartMode = { |
191 */ | 191 NORMAL: 'normal', |
192 var RecognizerStartMode = { | 192 NEW_MODEL: 'new model', |
193 NORMAL: 'normal', | 193 ADAPT_MODEL: 'adapt model' |
194 NEW_MODEL: 'new model', | 194 }; |
195 ADAPT_MODEL: 'adapt model' | 195 |
196 }; | 196 /** |
197 | 197 * MediaStream open success/errors to be reported via UMA. |
198 /** | 198 * DO NOT remove or renumber values in this enum. Only add new ones. |
199 * MediaStream open success/errors to be reported via UMA. | 199 * @enum {number} |
200 * DO NOT remove or renumber values in this enum. Only add new ones. | 200 */ |
201 * @enum {number} | 201 var UmaMediaStreamOpenResult = { |
202 */ | 202 SUCCESS: 0, |
203 var UmaMediaStreamOpenResult = { | 203 UNKNOWN: 1, |
204 SUCCESS: 0, | 204 NOT_SUPPORTED: 2, |
205 UNKNOWN: 1, | 205 PERMISSION_DENIED: 3, |
206 NOT_SUPPORTED: 2, | 206 CONSTRAINT_NOT_SATISFIED: 4, |
207 PERMISSION_DENIED: 3, | 207 OVERCONSTRAINED: 5, |
208 CONSTRAINT_NOT_SATISFIED: 4, | 208 NOT_FOUND: 6, |
209 OVERCONSTRAINED: 5, | 209 ABORT: 7, |
210 NOT_FOUND: 6, | 210 SOURCE_UNAVAILABLE: 8, |
211 ABORT: 7, | 211 PERMISSION_DISMISSED: 9, |
212 SOURCE_UNAVAILABLE: 8, | 212 INVALID_STATE: 10, |
213 PERMISSION_DISMISSED: 9, | 213 DEVICES_NOT_FOUND: 11, |
214 INVALID_STATE: 10, | 214 INVALID_SECURITY_ORIGIN: 12, |
215 DEVICES_NOT_FOUND: 11, | 215 MAX: 12 |
216 INVALID_SECURITY_ORIGIN: 12, | 216 }; |
217 MAX: 12 | 217 |
218 }; | 218 /** |
219 | 219 * UMA metrics. |
220 /** | 220 * DO NOT change these enum values. |
221 * UMA metrics. | 221 * @enum {string} |
222 * DO NOT change these enum values. | 222 */ |
223 * @enum {string} | 223 var UmaMetrics = { |
224 */ | 224 TRIGGER: 'Hotword.HotwordTrigger', |
225 var UmaMetrics = { | 225 MEDIA_STREAM_RESULT: 'Hotword.HotwordMediaStreamResult', |
226 TRIGGER: 'Hotword.HotwordTrigger', | 226 NACL_PLUGIN_LOAD_RESULT: 'Hotword.HotwordNaClPluginLoadResult', |
227 MEDIA_STREAM_RESULT: 'Hotword.HotwordMediaStreamResult', | 227 NACL_MESSAGE_TIMEOUT: 'Hotword.HotwordNaClMessageTimeout', |
228 NACL_PLUGIN_LOAD_RESULT: 'Hotword.HotwordNaClPluginLoadResult', | 228 TRIGGER_SOURCE: 'Hotword.HotwordTriggerSource' |
229 NACL_MESSAGE_TIMEOUT: 'Hotword.HotwordNaClMessageTimeout', | 229 }; |
230 TRIGGER_SOURCE: 'Hotword.HotwordTriggerSource' | 230 |
231 }; | 231 /** |
232 | 232 * Message waited for by NaCl plugin, to be reported via UMA. |
233 /** | 233 * DO NOT remove or renumber values in this enum. Only add new ones. |
234 * Message waited for by NaCl plugin, to be reported via UMA. | 234 * @enum {number} |
235 * DO NOT remove or renumber values in this enum. Only add new ones. | 235 */ |
236 * @enum {number} | 236 var UmaNaClMessageTimeout = { |
237 */ | 237 REQUEST_MODEL: 0, |
238 var UmaNaClMessageTimeout = { | 238 MODEL_LOADED: 1, |
239 REQUEST_MODEL: 0, | 239 READY_FOR_AUDIO: 2, |
240 MODEL_LOADED: 1, | 240 STOPPED: 3, |
241 READY_FOR_AUDIO: 2, | 241 HOTWORD_DETECTED: 4, |
242 STOPPED: 3, | 242 MS_CONFIGURED: 5, |
243 HOTWORD_DETECTED: 4, | 243 MAX: 5 |
244 MS_CONFIGURED: 5, | 244 }; |
245 MAX: 5 | 245 |
246 }; | 246 /** |
247 | 247 * NaCl plugin load success/errors to be reported via UMA. |
248 /** | 248 * DO NOT remove or renumber values in this enum. Only add new ones. |
249 * NaCl plugin load success/errors to be reported via UMA. | 249 * @enum {number} |
250 * DO NOT remove or renumber values in this enum. Only add new ones. | 250 */ |
251 * @enum {number} | 251 var UmaNaClPluginLoadResult = |
252 */ | 252 {SUCCESS: 0, UNKNOWN: 1, CRASH: 2, NO_MODULE_FOUND: 3, MAX: 3}; |
253 var UmaNaClPluginLoadResult = { | 253 |
254 SUCCESS: 0, | 254 /** |
255 UNKNOWN: 1, | 255 * Source of hotword triggering, to be reported via UMA. |
256 CRASH: 2, | 256 * DO NOT remove or renumber values in this enum. Only add new ones. |
257 NO_MODULE_FOUND: 3, | 257 * @enum {number} |
258 MAX: 3 | 258 */ |
259 }; | 259 var UmaTriggerSource = |
260 | 260 {LAUNCHER: 0, NTP_GOOGLE_COM: 1, ALWAYS_ON: 2, TRAINING: 3, MAX: 3}; |
261 /** | 261 |
262 * Source of hotword triggering, to be reported via UMA. | 262 /** |
263 * DO NOT remove or renumber values in this enum. Only add new ones. | 263 * The browser UI language. |
264 * @enum {number} | 264 * @const {string} |
265 */ | 265 */ |
266 var UmaTriggerSource = { | 266 var UI_LANGUAGE = (chrome.i18n && chrome.i18n.getUILanguage) ? |
267 LAUNCHER: 0, | 267 chrome.i18n.getUILanguage() : |
268 NTP_GOOGLE_COM: 1, | 268 ''; |
269 ALWAYS_ON: 2, | 269 |
270 TRAINING: 3, | 270 return { |
271 MAX: 3 | 271 AUDIO_LOG_SECONDS: AUDIO_LOG_SECONDS, |
272 }; | 272 CLIENT_PORT_NAME: CLIENT_PORT_NAME, |
273 | 273 COMMAND_FIELD_NAME: COMMAND_FIELD_NAME, |
274 /** | 274 FILE_SYSTEM_SIZE_BYTES: FILE_SYSTEM_SIZE_BYTES, |
275 * The browser UI language. | 275 HOTWORD_STREAM_TIMEOUT_SECONDS: HOTWORD_STREAM_TIMEOUT_SECONDS, |
276 * @const {string} | 276 NUM_TRAINING_UTTERANCES: NUM_TRAINING_UTTERANCES, |
277 */ | 277 SHARED_MODULE_ID: SHARED_MODULE_ID, |
278 var UI_LANGUAGE = (chrome.i18n && chrome.i18n.getUILanguage) ? | 278 SHARED_MODULE_ROOT: SHARED_MODULE_ROOT, |
279 chrome.i18n.getUILanguage() : ''; | 279 SPEAKER_MODEL_FILE_NAME: SPEAKER_MODEL_FILE_NAME, |
280 | 280 UI_LANGUAGE: UI_LANGUAGE, |
281 return { | 281 UTTERANCE_FILE_EXTENSION: UTTERANCE_FILE_EXTENSION, |
282 AUDIO_LOG_SECONDS: AUDIO_LOG_SECONDS, | 282 UTTERANCE_FILE_PREFIX: UTTERANCE_FILE_PREFIX, |
283 CLIENT_PORT_NAME: CLIENT_PORT_NAME, | 283 CommandToPage: CommandToPage, |
284 COMMAND_FIELD_NAME: COMMAND_FIELD_NAME, | 284 CommandFromPage: CommandFromPage, |
285 FILE_SYSTEM_SIZE_BYTES: FILE_SYSTEM_SIZE_BYTES, | 285 Error: Error, |
286 HOTWORD_STREAM_TIMEOUT_SECONDS: HOTWORD_STREAM_TIMEOUT_SECONDS, | 286 Event: Event, |
287 NUM_TRAINING_UTTERANCES: NUM_TRAINING_UTTERANCES, | 287 File: File, |
288 SHARED_MODULE_ID: SHARED_MODULE_ID, | 288 NaClPlugin: NaClPlugin, |
289 SHARED_MODULE_ROOT: SHARED_MODULE_ROOT, | 289 RecognizerStartMode: RecognizerStartMode, |
290 SPEAKER_MODEL_FILE_NAME: SPEAKER_MODEL_FILE_NAME, | 290 SessionSource: SessionSource, |
291 UI_LANGUAGE: UI_LANGUAGE, | 291 TimeoutMs: TimeoutMs, |
292 UTTERANCE_FILE_EXTENSION: UTTERANCE_FILE_EXTENSION, | 292 UmaMediaStreamOpenResult: UmaMediaStreamOpenResult, |
293 UTTERANCE_FILE_PREFIX: UTTERANCE_FILE_PREFIX, | 293 UmaMetrics: UmaMetrics, |
294 CommandToPage: CommandToPage, | 294 UmaNaClMessageTimeout: UmaNaClMessageTimeout, |
295 CommandFromPage: CommandFromPage, | 295 UmaNaClPluginLoadResult: UmaNaClPluginLoadResult, |
296 Error: Error, | 296 UmaTriggerSource: UmaTriggerSource |
297 Event: Event, | 297 }; |
298 File: File, | |
299 NaClPlugin: NaClPlugin, | |
300 RecognizerStartMode: RecognizerStartMode, | |
301 SessionSource: SessionSource, | |
302 TimeoutMs: TimeoutMs, | |
303 UmaMediaStreamOpenResult: UmaMediaStreamOpenResult, | |
304 UmaMetrics: UmaMetrics, | |
305 UmaNaClMessageTimeout: UmaNaClMessageTimeout, | |
306 UmaNaClPluginLoadResult: UmaNaClPluginLoadResult, | |
307 UmaTriggerSource: UmaTriggerSource | |
308 }; | |
309 | 298 |
310 }); | 299 }); |
OLD | NEW |