brilliantsole 0.0.27 → 0.0.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (202) hide show
  1. package/assets/3d/anchor.glb +0 -0
  2. package/assets/3d/coin.glb +0 -0
  3. package/assets/3d/glasses.glb +0 -0
  4. package/assets/audio/bounceMedium.wav +0 -0
  5. package/assets/audio/bounceStrong.wav +0 -0
  6. package/assets/audio/bounceWeak.wav +0 -0
  7. package/assets/audio/coin.wav +0 -0
  8. package/assets/audio/getUp.wav +0 -0
  9. package/assets/audio/grab.wav +0 -0
  10. package/assets/audio/kick.wav +0 -0
  11. package/assets/audio/platterFadeIn old.wav +0 -0
  12. package/assets/audio/platterFadeIn.wav +0 -0
  13. package/assets/audio/platterFadeOut.wav +0 -0
  14. package/assets/audio/punch.wav +0 -0
  15. package/assets/audio/punchSqueak.wav +0 -0
  16. package/assets/audio/purr.wav +0 -0
  17. package/assets/audio/purrFadeOut.wav +0 -0
  18. package/assets/audio/release.wav +0 -0
  19. package/assets/audio/splat.wav +0 -0
  20. package/assets/audio/stomp.wav +0 -0
  21. package/build/brilliantsole.cjs +3091 -741
  22. package/build/brilliantsole.cjs.map +1 -1
  23. package/build/brilliantsole.js +2759 -709
  24. package/build/brilliantsole.js.map +1 -1
  25. package/build/brilliantsole.ls.js +2602 -543
  26. package/build/brilliantsole.ls.js.map +1 -1
  27. package/build/brilliantsole.min.js +1 -1
  28. package/build/brilliantsole.min.js.map +1 -1
  29. package/build/brilliantsole.module.d.ts +295 -65
  30. package/build/brilliantsole.module.js +2749 -710
  31. package/build/brilliantsole.module.js.map +1 -1
  32. package/build/brilliantsole.module.min.d.ts +295 -65
  33. package/build/brilliantsole.module.min.js +1 -1
  34. package/build/brilliantsole.module.min.js.map +1 -1
  35. package/build/brilliantsole.node.module.d.ts +289 -62
  36. package/build/brilliantsole.node.module.js +3080 -742
  37. package/build/brilliantsole.node.module.js.map +1 -1
  38. package/build/dts/BS-output.d.ts +10 -0
  39. package/build/dts/BS.d.ts +21 -8
  40. package/build/dts/CameraManager.d.ts +72 -0
  41. package/build/dts/Device.d.ts +64 -13
  42. package/build/dts/DeviceInformationManager.d.ts +4 -4
  43. package/build/dts/DeviceManager.d.ts +2 -0
  44. package/build/dts/FileTransferManager.d.ts +18 -8
  45. package/build/dts/InformationManager.d.ts +2 -0
  46. package/build/dts/MicrophoneManager.d.ts +88 -0
  47. package/build/dts/TfliteManager.d.ts +22 -2
  48. package/build/dts/WifiManager.d.ts +61 -0
  49. package/build/dts/connection/BaseConnectionManager.d.ts +35 -3
  50. package/build/dts/connection/ClientConnectionManager.d.ts +7 -2
  51. package/build/dts/connection/bluetooth/NobleConnectionManager.d.ts +2 -1
  52. package/build/dts/connection/bluetooth/WebBluetoothConnectionManager.d.ts +1 -0
  53. package/build/dts/connection/bluetooth/bluetoothUUIDs.d.ts +2 -2
  54. package/build/dts/connection/udp/UDPConnectionManager.d.ts +28 -0
  55. package/build/dts/connection/webSocket/WebSocketConnectionManager.d.ts +25 -0
  56. package/build/dts/devicePair/DevicePair.d.ts +5 -5
  57. package/build/dts/scanner/BaseScanner.d.ts +4 -1
  58. package/build/dts/scanner/NobleScanner.d.ts +2 -1
  59. package/build/dts/sensor/MotionSensorDataManager.d.ts +5 -2
  60. package/build/dts/sensor/SensorDataManager.d.ts +5 -4
  61. package/build/dts/server/BaseClient.d.ts +5 -3
  62. package/build/dts/server/ServerUtils.d.ts +1 -1
  63. package/build/dts/server/websocket/WebSocketUtils.d.ts +1 -1
  64. package/build/dts/utils/AudioUtils.d.ts +2 -0
  65. package/build/dts/utils/Console.d.ts +2 -0
  66. package/build/dts/utils/ThrottleUtils.d.ts +2 -0
  67. package/build/dts/vibration/VibrationManager.d.ts +19 -2
  68. package/build/index.d.ts +292 -62
  69. package/build/index.node.d.ts +286 -59
  70. package/examples/3d/scene.html +19 -5
  71. package/examples/3d-generic/index.html +144 -0
  72. package/examples/3d-generic/script.js +266 -0
  73. package/examples/basic/index.html +267 -17
  74. package/examples/basic/script.js +958 -105
  75. package/examples/camera/barcode-detector.js +109 -0
  76. package/examples/camera/depth-estimation.js +71 -0
  77. package/examples/camera/face-detector.js +119 -0
  78. package/examples/camera/face-landmark.js +111 -0
  79. package/examples/camera/gesture-recognition.js +97 -0
  80. package/examples/camera/hand-landmark.js +74 -0
  81. package/examples/camera/image-segmentation.js +98 -0
  82. package/examples/camera/image-to-text.js +43 -0
  83. package/examples/camera/image-upscale.js +75 -0
  84. package/examples/camera/index.html +129 -0
  85. package/examples/camera/object-detection.js +98 -0
  86. package/examples/camera/pose-landmark.js +60 -0
  87. package/examples/camera/script.js +316 -0
  88. package/examples/camera/utils.js +165 -0
  89. package/examples/camera/yolo-tiny.js +54 -0
  90. package/examples/camera/yolo.js +119 -0
  91. package/examples/edge-impulse/script.js +157 -48
  92. package/examples/edge-impulse-test/README.md +11 -0
  93. package/examples/edge-impulse-test/edge-impulse-standalone.js +7228 -0
  94. package/examples/edge-impulse-test/edge-impulse-standalone.wasm +0 -0
  95. package/examples/edge-impulse-test/index.html +75 -0
  96. package/examples/edge-impulse-test/run-impulse.js +135 -0
  97. package/examples/edge-impulse-test/script.js +200 -0
  98. package/examples/glasses-gestures/README.md +11 -0
  99. package/examples/glasses-gestures/edge-impulse-standalone.js +7228 -0
  100. package/examples/glasses-gestures/edge-impulse-standalone.wasm +0 -0
  101. package/examples/glasses-gestures/index.html +69 -0
  102. package/examples/glasses-gestures/run-impulse.js +135 -0
  103. package/examples/glasses-gestures/script.js +226 -0
  104. package/examples/gloves/edge-impulse-standalone.js +7228 -0
  105. package/examples/gloves/edge-impulse-standalone.wasm +0 -0
  106. package/examples/gloves/index.html +4 -1
  107. package/examples/gloves/run-impulse.js +135 -0
  108. package/examples/gloves/script.js +367 -51
  109. package/examples/graph/script.js +94 -37
  110. package/examples/microphone/gender.js +54 -0
  111. package/examples/microphone/index.html +102 -0
  112. package/examples/microphone/script.js +394 -0
  113. package/examples/microphone/utils.js +45 -0
  114. package/examples/microphone/whisper-realtime.js +166 -0
  115. package/examples/microphone/whisper.js +132 -0
  116. package/examples/punch/index.html +135 -0
  117. package/examples/punch/punch.tflite +0 -0
  118. package/examples/punch/script.js +169 -0
  119. package/examples/server/index.html +98 -22
  120. package/examples/server/script.js +317 -109
  121. package/examples/ukaton-firmware-update/merged-firmware.bin +0 -0
  122. package/examples/utils/aframe/aframe-master.min.js +2 -0
  123. package/examples/utils/aframe/bs-vibration.js +150 -0
  124. package/examples/utils/aframe/force-pushable.js +80 -0
  125. package/examples/utils/aframe/grabbable-anchor.js +46 -0
  126. package/examples/utils/aframe/grabbable-listener.js +31 -0
  127. package/examples/utils/aframe/grabbable-physics-body.js +190 -0
  128. package/examples/utils/aframe/grow-shrink.js +25 -0
  129. package/examples/utils/aframe/hand-punch.js +119 -0
  130. package/examples/utils/aframe/my-obb-collider.js +293 -0
  131. package/examples/utils/aframe/occlude-hand-tracking-controls.js +47 -0
  132. package/examples/utils/aframe/occlude-mesh.js +42 -0
  133. package/examples/utils/aframe/palm-up-detector.js +47 -0
  134. package/examples/utils/aframe/shadow-material.js +20 -0
  135. package/examples/utils/aframe/soft-shadow-light.js +9 -0
  136. package/examples/webxr-2/assets/3d/soccerBall.glb +0 -0
  137. package/examples/webxr-2/assets/audio/shellBounce.wav +0 -0
  138. package/examples/webxr-2/assets/audio/shellHit.wav +0 -0
  139. package/examples/webxr-2/assets/audio/shellKick.wav +0 -0
  140. package/examples/webxr-2/assets/audio/soccerBounce.wav +0 -0
  141. package/examples/webxr-2/assets/audio/soccerKick.mp3 +0 -0
  142. package/examples/webxr-2/assets/images/shellTexture.png +0 -0
  143. package/examples/webxr-2/components/bs-ankle.js +337 -0
  144. package/examples/webxr-2/components/coin.js +84 -0
  145. package/examples/webxr-2/components/custom-wrap.js +17 -0
  146. package/examples/webxr-2/components/goomba.js +3250 -0
  147. package/examples/webxr-2/components/init-shell-material.js +215 -0
  148. package/examples/webxr-2/components/platter.js +172 -0
  149. package/examples/webxr-2/components/shell.js +374 -0
  150. package/examples/webxr-2/components/soccer-ball.js +250 -0
  151. package/examples/webxr-2/components/squashed-goomba.js +249 -0
  152. package/examples/webxr-2/edge-impulse-standalone.js +7228 -0
  153. package/examples/webxr-2/edge-impulse-standalone.wasm +0 -0
  154. package/examples/webxr-2/index.html +996 -0
  155. package/examples/webxr-2/kick.tflite +0 -0
  156. package/examples/webxr-2/kick2.tflite +0 -0
  157. package/examples/webxr-2/run-impulse.js +135 -0
  158. package/examples/webxr-2/script.js +384 -0
  159. package/examples/webxr-3/components/bs-camera.js +65 -0
  160. package/examples/webxr-3/index.html +134 -0
  161. package/examples/webxr-3/script.js +432 -0
  162. package/package.json +2 -1
  163. package/src/.prettierrc +4 -0
  164. package/src/BS.ts +79 -8
  165. package/src/CameraManager.ts +497 -0
  166. package/src/Device.ts +691 -86
  167. package/src/DeviceInformationManager.ts +19 -10
  168. package/src/DeviceManager.ts +85 -25
  169. package/src/FileTransferManager.ts +145 -20
  170. package/src/InformationManager.ts +40 -15
  171. package/src/MicrophoneManager.ts +599 -0
  172. package/src/TfliteManager.ts +171 -25
  173. package/src/WifiManager.ts +323 -0
  174. package/src/connection/BaseConnectionManager.ts +130 -30
  175. package/src/connection/ClientConnectionManager.ts +34 -10
  176. package/src/connection/bluetooth/BluetoothConnectionManager.ts +8 -2
  177. package/src/connection/bluetooth/NobleConnectionManager.ts +147 -41
  178. package/src/connection/bluetooth/WebBluetoothConnectionManager.ts +99 -34
  179. package/src/connection/bluetooth/bluetoothUUIDs.ts +40 -13
  180. package/src/connection/udp/UDPConnectionManager.ts +356 -0
  181. package/src/connection/websocket/WebSocketConnectionManager.ts +282 -0
  182. package/src/devicePair/DevicePair.ts +95 -25
  183. package/src/devicePair/DevicePairPressureSensorDataManager.ts +27 -7
  184. package/src/scanner/BaseScanner.ts +49 -11
  185. package/src/scanner/NobleScanner.ts +76 -14
  186. package/src/sensor/MotionSensorDataManager.ts +21 -6
  187. package/src/sensor/PressureSensorDataManager.ts +37 -8
  188. package/src/sensor/SensorConfigurationManager.ts +73 -22
  189. package/src/sensor/SensorDataManager.ts +109 -23
  190. package/src/server/BaseClient.ts +150 -36
  191. package/src/server/BaseServer.ts +50 -2
  192. package/src/server/ServerUtils.ts +39 -9
  193. package/src/server/udp/UDPServer.ts +73 -22
  194. package/src/server/udp/UDPUtils.ts +9 -2
  195. package/src/server/websocket/WebSocketClient.ts +27 -7
  196. package/src/server/websocket/WebSocketUtils.ts +4 -2
  197. package/src/utils/AudioUtils.ts +65 -0
  198. package/src/utils/Console.ts +62 -9
  199. package/src/utils/ParseUtils.ts +24 -5
  200. package/src/utils/ThrottleUtils.ts +62 -0
  201. package/src/utils/Timer.ts +1 -1
  202. package/src/vibration/VibrationManager.ts +166 -40
@@ -47,7 +47,22 @@
47
47
  <h2>connection</h2>
48
48
  <button id="toggleConnection">connect</button>
49
49
  <button id="reconnect" disabled>reconnect</button>
50
- <label>reconnect on disconnection? <input id="reconnectOnDisconnection" type="checkbox" /></label>
50
+ <label>
51
+ ip address:
52
+ <input
53
+ id="connectIpAddress"
54
+ placeholder="0.0.0.0 or my-device.local"
55
+ type="text"
56
+ minlength="7"
57
+ maxlength="253"
58
+ size="25"
59
+ />
60
+ </label>
61
+ <button id="connectViaIpAddress" disabled>connect via webSockets</button>
62
+ <label
63
+ >reconnect on disconnection?
64
+ <input id="reconnectOnDisconnection" type="checkbox"
65
+ /></label>
51
66
  <button id="resetDevice" disabled>reset</button>
52
67
  </div>
53
68
 
@@ -65,7 +80,15 @@
65
80
 
66
81
  <div>
67
82
  <label><b>name:</b> <span id="name"></span></label>
68
- <label> <b>new name: </b> <input id="setNameInput" type="text" placeholder="type in a name" disabled /> </label>
83
+ <label>
84
+ <b>new name: </b>
85
+ <input
86
+ id="setNameInput"
87
+ type="text"
88
+ placeholder="type in a name"
89
+ disabled
90
+ />
91
+ </label>
69
92
  <button id="setNameButton" disabled>set name</button>
70
93
  </div>
71
94
 
@@ -94,7 +117,7 @@
94
117
  <label class="sensorTypeConfiguration">
95
118
  <b class="sensorType"></b>
96
119
  <!-- <input class="sensorRate" type="number" min="0" value="" disabled />ms -->
97
- <select class="sensorRate input">
120
+ <select disabled class="sensorRate input">
98
121
  <optgroup label="sensor rate (ms)">
99
122
  <option value="0">0ms</option>
100
123
  <option value="5">5ms</option>
@@ -141,14 +164,22 @@
141
164
  <ol class="segments"></ol>
142
165
  <label>
143
166
  sequence loop count
144
- <input class="sequenceLoopCount" type="number" min="0" value="0" step="1" />
167
+ <input
168
+ class="sequenceLoopCount"
169
+ type="number"
170
+ min="0"
171
+ value="0"
172
+ step="1"
173
+ />
145
174
  </label>
146
175
  </div>
147
176
  <div class="waveform">
148
177
  <button class="add">add segment</button>
149
178
  <ol class="segments"></ol>
150
179
  </div>
151
- <label>trigger? <input class="shouldTrigger" type="checkbox" /></label>
180
+ <label
181
+ >trigger? <input class="shouldTrigger" type="checkbox"
182
+ /></label>
152
183
  <ul class="locations"></ul>
153
184
  <button class="delete">delete vibration</button>
154
185
  </div>
@@ -190,11 +221,24 @@
190
221
  <li class="waveformSegment">
191
222
  <label>
192
223
  amplitude
193
- <input class="amplitude" type="number" min="0" max="1" value="0.5" step="0.01" />
224
+ <input
225
+ class="amplitude"
226
+ type="number"
227
+ min="0"
228
+ max="1"
229
+ value="0.5"
230
+ step="0.01"
231
+ />
194
232
  </label>
195
233
  <label>
196
234
  duration
197
- <input class="duration" type="number" min="10" value="100" step="10" />ms
235
+ <input
236
+ class="duration"
237
+ type="number"
238
+ min="10"
239
+ value="100"
240
+ step="10"
241
+ />ms
198
242
  </label>
199
243
  <button class="delete">delete segment</button>
200
244
  </li>
@@ -209,7 +253,10 @@
209
253
  <optgroup label="file transfer type"></optgroup>
210
254
  </select>
211
255
  </label>
212
- <label>file (max <span id="maxFileLength">0</span>kb) <input id="file" type="file" accept=".tflite" /></label>
256
+ <label>
257
+ file (max <span id="maxFileLength">0</span>kb)
258
+ <input id="file" type="file" accept=".tflite" />
259
+ </label>
213
260
  <label>
214
261
  file transfer direction
215
262
  <select id="fileTransferDirection">
@@ -230,7 +277,12 @@
230
277
  <label><b>name:</b> <span id="tfliteName"></span></label>
231
278
  <label>
232
279
  <b>new name: </b>
233
- <input id="setTfliteNameInput" type="text" placeholder="type in a name" disabled />
280
+ <input
281
+ id="setTfliteNameInput"
282
+ type="text"
283
+ placeholder="type in a name"
284
+ disabled
285
+ />
234
286
  </label>
235
287
  <button id="setTfliteNameButton" disabled>set name</button>
236
288
  </div>
@@ -250,7 +302,15 @@
250
302
  <label><b>sample rate:</b> <span id="tfliteSampleRate"></span></label>
251
303
  <label>
252
304
  <b>new sample rate: </b>
253
- <input id="setTfliteSampleRateInput" type="number" min="5" value="20" max="1000" step="5" disabled />
305
+ <input
306
+ id="setTfliteSampleRateInput"
307
+ type="number"
308
+ min="5"
309
+ value="20"
310
+ max="1000"
311
+ step="5"
312
+ disabled
313
+ />
254
314
  </label>
255
315
  <button id="setTfliteSampleRateButton" disabled>set sample rate</button>
256
316
  </div>
@@ -271,25 +331,47 @@
271
331
  </div>
272
332
 
273
333
  <div>
274
- <label><b>is ready?</b> <input type="checkbox" id="tfliteIsReady" disabled /></label>
334
+ <label
335
+ ><b>is ready?</b> <input type="checkbox" id="tfliteIsReady" disabled
336
+ /></label>
275
337
  </div>
276
338
 
277
339
  <div>
278
340
  <label><b>threshold:</b> <span id="tfliteThreshold"></span></label>
279
341
  <label>
280
342
  <b>new threshold: </b>
281
- <input id="setTfliteThresholdInput" type="number" min="0" value="0" max="1" step="0.1" disabled />
343
+ <input
344
+ id="setTfliteThresholdInput"
345
+ type="number"
346
+ min="0"
347
+ value="0"
348
+ max="1"
349
+ step="0.1"
350
+ disabled
351
+ />
282
352
  </label>
283
353
  <button id="setTfliteThresholdButton" disabled>set threshold</button>
284
354
  </div>
285
355
 
286
356
  <div>
287
- <label><b>capture delay:</b> <span id="tfliteCaptureDelay"></span></label>
357
+ <label
358
+ ><b>capture delay:</b> <span id="tfliteCaptureDelay"></span
359
+ ></label>
288
360
  <label>
289
361
  <b>new capture delay: </b>
290
- <input id="setTfliteCaptureDelayInput" type="number" min="0" value="0" max="2000" step="1" disabled />
362
+ <input
363
+ id="setTfliteCaptureDelayInput"
364
+ type="number"
365
+ min="0"
366
+ value="0"
367
+ max="2000"
368
+ step="1"
369
+ disabled
370
+ />
291
371
  </label>
292
- <button id="setTfliteCaptureDelayButton" disabled>set capture delay</button>
372
+ <button id="setTfliteCaptureDelayButton" disabled>
373
+ set capture delay
374
+ </button>
293
375
  </div>
294
376
 
295
377
  <div>
@@ -297,7 +379,9 @@
297
379
  <b>inferencing enabled? </b>
298
380
  <input id="tfliteInferencingEnabled" type="checkbox" disabled />
299
381
  </label>
300
- <button id="toggleTfliteInferencingEnabled" disabled>enable inferencing</button>
382
+ <button id="toggleTfliteInferencingEnabled" disabled>
383
+ enable inferencing
384
+ </button>
301
385
  </div>
302
386
 
303
387
  <div>
@@ -317,12 +401,178 @@
317
401
  </div>
318
402
  </div>
319
403
 
404
+ <div>
405
+ <h2>wifi</h2>
406
+
407
+ <label>
408
+ <b>is wifi available?</b>
409
+ <span id="isWifiAvailable"></span>
410
+ </label>
411
+
412
+ <label><b>wifi ssid:</b> <span id="wifiSSID"></span></label>
413
+ <label>
414
+ <b>new wifi ssid: </b>
415
+ <input
416
+ id="setWifiSSIDInput"
417
+ type="text"
418
+ placeholder="type in an ssid"
419
+ disabled
420
+ />
421
+ </label>
422
+ <button id="setWifiSSIDButton" disabled>set wifi ssid</button>
423
+
424
+ <label><b>wifi password:</b> <span id="wifiPassword"></span></label>
425
+ <label>
426
+ <b>new wifi password: </b>
427
+ <input
428
+ id="setWifiPasswordInput"
429
+ type="text"
430
+ placeholder="type in a password"
431
+ disabled
432
+ />
433
+ </label>
434
+ <button id="setWifiPasswordButton" disabled>set wifi password</button>
435
+
436
+ <label>
437
+ <b>is wifi connection enabled?</b>
438
+ <span id="wifiConnectionEnabled"></span>
439
+ </label>
440
+
441
+ <label>
442
+ <b>toggle wifi connection</b>
443
+ <button id="toggleWifiConnection" disabled>
444
+ enable wifi connection
445
+ </button>
446
+ </label>
447
+
448
+ <label>
449
+ <b>is wifi connected?</b>
450
+ <span id="isWifiConnected"></span>
451
+ </label>
452
+
453
+ <label>
454
+ <b>ip address</b>
455
+ <span id="ipAddress"></span>
456
+ </label>
457
+
458
+ <button disabled id="connectViaWebSockets">connect via webSockets</button>
459
+ </div>
460
+
461
+ <div>
462
+ <h2>camera</h2>
463
+
464
+ <label>
465
+ <b>is camera available?</b>
466
+ <span id="isCameraAvailable"></span>
467
+ </label>
468
+
469
+ <label><b>status:</b> <span id="cameraStatus"></span></label>
470
+
471
+ <label>auto picture: <input type="checkbox" id="autoPicture" /> </label>
472
+
473
+ <button disabled id="takePicture">take picture</button>
474
+ <progress value="0" id="cameraImageProgress"></progress>
475
+ <br />
476
+ <button disabled id="focusCamera">focus camera</button>
477
+ <br />
478
+ <button disabled id="sleepCamera">sleep camera</button>
479
+
480
+ <div style="display: flex; flex-direction: row">
481
+ <div>
482
+ <label>
483
+ <b>camera configuration: </b>
484
+ <pre id="cameraConfigurationPre"></pre>
485
+ </label>
486
+ <br />
487
+
488
+ <label>
489
+ take picture after update?
490
+ <input type="checkbox" id="takePictureAfterUpdate" />
491
+ </label>
492
+
493
+ <div id="cameraConfiguration">
494
+ <template id="cameraConfigurationTypeTemplate">
495
+ <label class="cameraConfigurationType">
496
+ <b class="type"></b> <span></span>
497
+ <br />
498
+ <input class="value" type="range" value="" disabled />
499
+ </label>
500
+ </template>
501
+ </div>
502
+ <label>
503
+ <b>white balance</b>
504
+ <input type="color" id="cameraWhiteBalance" disabled />
505
+ </label>
506
+ </div>
507
+ <div>
508
+ <img id="cameraImage" />
509
+ </div>
510
+ </div>
511
+ </div>
512
+
513
+ <div>
514
+ <h2>microphone</h2>
515
+
516
+ <label>
517
+ <b>is microphone available?</b>
518
+ <span id="isMicrophoneAvailable"></span>
519
+ </label>
520
+
521
+ <label><b>status:</b> <span id="microphoneStatus"></span></label>
522
+
523
+ <button disabled hidden id="toggleMicrophone">start microphone</button>
524
+ <button disabled id="startMicrophone">start microphone</button>
525
+ <button disabled id="stopMicrophone">stop microphone</button>
526
+ <button disabled id="enableMicrphoneVad">
527
+ enable microphone voice activity detection
528
+ </button>
529
+ <br />
530
+ <button disabled id="toggleMicrophoneRecording">start recording</button>
531
+
532
+ <div>
533
+ <label>
534
+ <b>microphone configuration: </b>
535
+ <pre id="microphoneConfigurationPre"></pre>
536
+ </label>
537
+ <br />
538
+
539
+ <div id="microphoneConfiguration">
540
+ <template id="microphoneConfigurationTypeTemplate">
541
+ <label class="microphoneConfigurationType">
542
+ <b class="type"></b> <span hidden></span>
543
+ <select disabled>
544
+ <optgroup></optgroup>
545
+ </select>
546
+ </label>
547
+ </template>
548
+ </div>
549
+
550
+ <div>
551
+ <b>stream</b>
552
+ <br />
553
+ <audio id="microphoneStream" controls autoplay></audio>
554
+ </div>
555
+
556
+ <div>
557
+ <b>recording</b>
558
+ <label>
559
+ auto play
560
+ <input type="checkbox" id="autoPlayMicrphoneRecording" />
561
+ </label>
562
+ <br />
563
+ <audio id="microphoneRecording" controls></audio>
564
+ </div>
565
+ </div>
566
+ </div>
567
+
320
568
  <div>
321
569
  <h2>firmware update</h2>
322
570
 
323
571
  <label><b>status:</b> <span id="firmwareStatus"></span></label>
324
572
 
325
- <label>firmware <input id="firmwareInput" type="file" accept=".bin" /></label>
573
+ <label
574
+ >firmware <input id="firmwareInput" type="file" accept=".bin"
575
+ /></label>
326
576
  <button id="toggleFirmwareUpload" disabled>upload firmware</button>
327
577
  <progress value="0" id="firmwareUploadProgress"></progress>
328
578
  <span id="firmwareUploadProgressPercentage" style="display: none"></span>