@@ -82,6 +82,17 @@ <h1>SEPIA Web Audio Processor</h1>
8282 < label > < b > Basic Buffer</ b > </ label >
8383 < label > Buffer-Size:</ label > < input id ="basicBufferSize " class ="small " value ="512 " onchange ="setResamplerBufferSize(this); " placeholder ="512 ">
8484 </ div >
85+ < div id ="vadWorkerControls " class ="contorlGroup ">
86+ < label > < b > VAD</ b > </ label >
87+ < label > Buffer-Size:</ label > < input id ="vadWorkerBufferSize " class ="small " value ="960 " placeholder ="960 " onchange ="setVadWorkerBufferSize(+this.value); ">
88+ < label > Mode:</ label > < input id ="vadWorkerVadMode " class ="small " value ="3 " placeholder ="1-3 (3: agressive) " onchange ="setVadWorkerVadMode(+this.value); ">
89+ </ div >
90+ < div id ="wakeWordWorkerControls " class ="contorlGroup ">
91+ < label > < b > Wake-Word</ b > </ label >
92+ < label > TBD - (Porcupine fixed values)</ label >
93+ < label > Gate:</ label > < div id ="wakeWordGateState "> </ div > < label > </ label >
94+ < label > Control:</ label > < button onclick ="wakeWordSetGate('open'); "> Listen</ button > < button onclick ="wakeWordSetGate('close'); "> Stop</ button > < label > </ label >
95+ </ div >
8596 < div id ="waveEncoderControls " class ="contorlGroup ">
8697 < label > < b > Wave Encoder</ b > </ label >
8798 < label > Lookback (ms):</ label > < input id ="waveEncoderLookback " class ="small " value ="0 " onchange ="setWaveEncoderLookback(this); ">
@@ -99,25 +110,23 @@ <h1>SEPIA Web Audio Processor</h1>
99110 < label > Control:</ label > < button onclick ="startMediaRecorder(); "> Capture</ button > < button onclick ="stopMediaRecorder(); "> Stop</ button >
100111 < label > Export:</ label > < button onclick ="getRawDataFromMediaRecorder(); "> Show Decoded Data</ button >
101112 </ div >
102- < div id ="vadWorkerControls " class ="contorlGroup ">
103- < label > < b > VAD</ b > </ label >
104- < label > Buffer-Size:</ label > < input id ="vadWorkerBufferSize " class ="small " value ="960 " placeholder ="960 " onchange ="setVadWorkerBufferSize(+this.value); ">
105- < label > Mode:</ label > < input id ="vadWorkerVadMode " class ="small " value ="3 " placeholder ="1-3 (3: agressive) " onchange ="setVadWorkerVadMode(+this.value); ">
106- </ div >
107113 < div class ="contorlGroup ">
108114 < label > < b > Switches:</ b > </ label >
115+ < div style ="flex: 1 0 100%; "> </ div >
109116 < label > Volume-proc.:</ label > < input type ="checkbox " id ="useVolumeProcessor " checked onchange ="useVolumeProcessor(this.checked); ">
110117 < label > Resampler:</ label > < input type ="checkbox " id ="useResampler " checked onchange ="useResampler(this.checked); ">
111118 < label > Wave-encoder:</ label > < input type ="checkbox " id ="useWaveEncoder " checked onchange ="useWaveEncoder(this.checked); ">
112119 < label > VAD:</ label > < input type ="checkbox " id ="useVadWorker " checked onchange ="useVadWorker(this.checked); ">
120+ < label > Wake-Word:</ label > < input type ="checkbox " id ="useWakeWordWorker " checked onchange ="useWakeWordWorker(this.checked); ">
121+ < div style ="flex: 1 0 100%; "> </ div >
113122 < label > Plot 1:</ label > < input type ="checkbox " id ="usePlot1 " checked onchange ="usePlot(1, this); ">
114123 < label > Plot 2:</ label > < input type ="checkbox " id ="usePlot2 " checked onchange ="usePlot(2, this); ">
115- < label > Plot 3:</ label > < input type ="checkbox " id ="usePlot3 " checked onchange ="usePlot(3, this); ">
124+ < label > Plot 3:</ label > < input type ="checkbox " id ="usePlot3 " onchange ="usePlot(3, this); ">
116125 < label > Plot 4:</ label > < input type ="checkbox " id ="usePlot4 " checked onchange ="usePlot(4, this); ">
117126 </ div >
118127 < div id ="chart1 " class ="chart "> </ div >
119128 < div id ="chart2 " class ="chart "> </ div >
120- < div id ="chart3 " class ="chart "> </ div >
129+ < div id ="chart3 " class ="chart " style =" display: none; " > </ div >
121130 < div id ="chart4 " class ="chart "> </ div >
122131</ div >
123132< script type ='text/javascript ' src ="test-commons.js "> </ script >
@@ -339,6 +348,30 @@ <h1>SEPIA Web Audio Processor</h1>
339348 window . vadWorker = vadWorker ;
340349 var vadWorkerIndex ;
341350
351+ var porcupineWorker = {
352+ name : 'porcupine-wake-word-worker' ,
353+ type : 'worker' ,
354+ preLoad : {
355+ wasmFile : 'src/modules/picovoice/porcupine-19.wasm'
356+ } ,
357+ settings : {
358+ onmessage : console . log , //TODO: change
359+ //sendToModules: (doUseWaveEncoder? [waveEncoderIndex] : []),
360+ options : {
361+ setup : {
362+ inputSampleRate : ( doUseResampler ? resamplerSampleRate : 0 ) ,
363+ inputSampleSize : resamplerBufferSize , //output bufferSize of previous module
364+ bufferSize : 1024 , //TODO: change
365+ version : 19 ,
366+ keywords : [ "Computer" , "Jarvis" ] ,
367+ sensitivities : [ 0.5 , 0.5 ]
368+ }
369+ }
370+ }
371+ } ;
372+ window . porcupineWorker = porcupineWorker ;
373+ var porcupineWorkerIndex ;
374+
342375 //put together modules
343376 var activeModules = [ ] ;
344377 if ( doUseVolumeProcessor ) {
@@ -355,15 +388,6 @@ <h1>SEPIA Web Audio Processor</h1>
355388 activeModules . push ( bufferSwitch ) ;
356389 bufferSwitchIndex = activeModules . length ;
357390 }
358- if ( doUseWaveEncoder ) {
359- activeModules . push ( waveEncoder ) ;
360- waveEncoderIndex = activeModules . length ;
361-
362- //add to send function
363- bufferSwitch . settings . sendToModules . push ( waveEncoderIndex ) ;
364- resampler . settings . sendToModules . push ( waveEncoderIndex ) ;
365- resamplerWorker . settings . sendToModules . push ( waveEncoderIndex ) ;
366- }
367391 if ( doUseVadWorker ) {
368392 activeModules . push ( vadWorker ) ;
369393 vadWorkerIndex = activeModules . length ;
@@ -373,6 +397,24 @@ <h1>SEPIA Web Audio Processor</h1>
373397 resampler . settings . sendToModules . push ( vadWorkerIndex ) ;
374398 resamplerWorker . settings . sendToModules . push ( vadWorkerIndex ) ;
375399 }
400+ if ( doUseWakeWordWorker ) {
401+ activeModules . push ( porcupineWorker ) ;
402+ porcupineWorkerIndex = activeModules . length ;
403+
404+ //add to send function
405+ bufferSwitch . settings . sendToModules . push ( porcupineWorkerIndex ) ;
406+ resampler . settings . sendToModules . push ( porcupineWorkerIndex ) ;
407+ resamplerWorker . settings . sendToModules . push ( porcupineWorkerIndex ) ;
408+ }
409+ if ( doUseWaveEncoder ) {
410+ activeModules . push ( waveEncoder ) ;
411+ waveEncoderIndex = activeModules . length ;
412+
413+ //add to send function
414+ bufferSwitch . settings . sendToModules . push ( waveEncoderIndex ) ;
415+ resampler . settings . sendToModules . push ( waveEncoderIndex ) ;
416+ resamplerWorker . settings . sendToModules . push ( waveEncoderIndex ) ;
417+ }
376418
377419 //create processor
378420 rec = new SepiaFW . webAudio . Processor ( {
@@ -737,6 +779,25 @@ <h1>SEPIA Web Audio Processor</h1>
737779 }
738780 }
739781
782+ var doUseWakeWordWorker = document . getElementById ( "useWakeWordWorker" ) . checked ;
783+ var wakeWordGate = document . getElementById ( 'wakeWordGateState' ) ;
784+ var wakeWordGateOpen = false ;
785+ function wakeWordSetGate ( state ) {
786+ window . porcupineWorker . handle . sendToModule ( { gate : state } ) ;
787+ //wakeWordGate.textContent = state;
788+ wakeWordGate . className = state ;
789+ wakeWordGateOpen = ( state == "open" ) ;
790+ console . log ( "wakeWordSetGate" , state ) ;
791+ }
792+ function useWakeWordWorker ( useIt ) {
793+ doUseWakeWordWorker = useIt ;
794+ if ( useIt ) {
795+ document . getElementById ( "wakeWordWorkerControls" ) . style . display = "" ;
796+ } else {
797+ document . getElementById ( "wakeWordWorkerControls" ) . style . display = "none" ;
798+ }
799+ }
800+
740801 function showMediaRecorderCodecs ( ) {
741802 //add codec options
742803 var codecSel = document . getElementById ( "mediaRecorderCodec" ) ;
0 commit comments