@gnani.ai/web-voice-hook 1.0.0 → 1.0.2
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.
- package/README.md +10 -0
- package/dist/useWebVoice.d.ts.map +1 -1
- package/dist/useWebVoice.js +1 -1
- package/dist/useWebVoice.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
A **React hook** for real-time bidirectional WebSocket voice: capture microphone → server (STT), play TTS ← server. Published as `@gnani.ai/web-voice-hook`.
|
|
4
4
|
|
|
5
|
+
**We welcome community contributions** — edge cases, cleaner code, and improvements. See [Contributing](#contributing) below.
|
|
5
6
|
|
|
6
7
|
---
|
|
7
8
|
|
|
@@ -164,6 +165,15 @@ Consumers can then install the new tag, e.g. `#v1.0.2`.
|
|
|
164
165
|
|
|
165
166
|
---
|
|
166
167
|
|
|
168
|
+
## Contributing
|
|
169
|
+
|
|
170
|
+
We welcome the community to improve this code: handle edge cases, simplify logic, and improve documentation.
|
|
171
|
+
|
|
172
|
+
- **How to contribute:** See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup (`pnpm install`, `pnpm run build`, `pnpm run typecheck`), what we’re looking for (bugs, edge cases, cleanup, tests), and PR guidelines.
|
|
173
|
+
- **Quick start:** Clone the repo, run `pnpm install` and `pnpm run build`, then open a pull request or issue.
|
|
174
|
+
|
|
175
|
+
---
|
|
176
|
+
|
|
167
177
|
## TypeScript
|
|
168
178
|
|
|
169
179
|
```ts
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWebVoice.d.ts","sourceRoot":"","sources":["../src/useWebVoice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAoB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAaxE,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,eAAe,KAAK,CAAC;AAYlC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,2LAU3B,mBAAmB;;;;;;;;
|
|
1
|
+
{"version":3,"file":"useWebVoice.d.ts","sourceRoot":"","sources":["../src/useWebVoice.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAoB,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAaxE,eAAO,MAAM,QAAQ,IAAI,CAAC;AAC1B,eAAO,MAAM,eAAe,KAAK,CAAC;AAYlC;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,2LAU3B,mBAAmB;;;;;;;;sCAulBK,MAAM,IAAI;CA0KpC,CAAC"}
|
package/dist/useWebVoice.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import AudioMotionAnalyzer from"audiomotion-analyzer";import{useCallback,useMemo,useRef,useState}from"react";import{audioProcessorSource}from"./audioProcessorSource.generated";import{applyCustomColor,base64ToPCM16Data,convertPCMDataToFloat32,getBase64Audio,getVisualizerOptions,resampleAudio,resetAudioInput}from"./webVoiceUtils";const SAMPLE_RATE=44100;export const CHANNELS=1;export const BITS_PER_SAMPLE=16;const defaultLogger={info:(e,...r)=>console.log("[GnaniWebVoice]",e,...r),error:(e,...r)=>console.error("[GnaniWebVoice]",e,...r)};export const useWebSocketAudio=({websocketUrl:e,workletPath:r,visualizerOptions:{elementId:t,color:n,options:c}={},events:o,logger:u})=>{const{onOpen:a,onClose:s,onException:i}=o??{},l=u??defaultLogger,[d,p]=useState(!1),f=useRef(null),g=useRef(null),m=useRef(null),
|
|
1
|
+
import AudioMotionAnalyzer from"audiomotion-analyzer";import{useCallback,useMemo,useRef,useState}from"react";import{audioProcessorSource}from"./audioProcessorSource.generated";import{applyCustomColor,base64ToPCM16Data,convertPCMDataToFloat32,getBase64Audio,getVisualizerOptions,resampleAudio,resetAudioInput}from"./webVoiceUtils";const SAMPLE_RATE=44100;export const CHANNELS=1;export const BITS_PER_SAMPLE=16;const defaultLogger={info:(e,...r)=>console.log("[GnaniWebVoice]",e,...r),error:(e,...r)=>console.error("[GnaniWebVoice]",e,...r)};export const useWebSocketAudio=({websocketUrl:e,workletPath:r,visualizerOptions:{elementId:t,color:n,options:c}={},events:o,logger:u})=>{const{onOpen:a,onClose:s,onException:i}=o??{},l=u??defaultLogger,[d,p]=useState(!1),f=useRef(null),g=useRef(null),m=useRef(null),S=useRef(!1),v=useRef(!0),y=useRef(),b=useRef(!1),k=useRef(!1),C=useRef(44100),R=useRef(!1),h=useRef(!1),O=useRef(0),w=useRef(0),E=useRef(0),P=useRef(null),N=useRef(null),[I,A]=useState(!1),M=useRef(!1),T=44100,L=useRef([]),W=useCallback((()=>(g.current&&"closed"!==g.current.state||(g.current=new(window.AudioContext||window.webkitAudioContext)({sampleRate:44100,latencyHint:"playback"})),g.current)),[]),D=useCallback((e=>{if(!t||P.current||k.current)P.current?.connectInput(e);else{const r=new AudioMotionAnalyzer(document.getElementById(t),{...c??getVisualizerOptions(e)});r.start(),n&&applyCustomColor(r,n),P.current=r}}),[]),J=useCallback((async()=>{if(!b.current){resetAudioInput(y.current);try{y.current=await navigator.mediaDevices.getUserMedia({audio:{sampleRate:44100,channelCount:1,echoCancellation:{ideal:!0},noiseSuppression:{ideal:!0},autoGainControl:{ideal:!0}}});const e=W(),r=e.createMediaStreamSource(y.current),t=e.createDynamicsCompressor();t.threshold.value=-30,t.knee.value=40,t.ratio.value=8,t.attack.value=.002,t.release.value=.1;const n=e.createGain();n.gain.value=1.2,r.connect(t).connect(n),D(r),b.current=!0}catch(e){throw l.error("Error setting up audio stream:",e),i?.(e),e}}}),[W,D]),{startProcessing:x,stopProcessing:_,isProcessing:B}=useMemo((()=>{let e=null,t=null;return{startProcessing:async()=>{if(y.current)try{const n=W(),c=void 0===r||""===r,o=c?URL.createObjectURL(new Blob([audioProcessorSource],{type:"application/javascript"})):r;try{await n.audioWorklet.addModule(o)}finally{c&&URL.revokeObjectURL(o)}t=n.createMediaStreamSource(y.current),e=new AudioWorkletNode(n,"audio-processor",{numberOfInputs:1,numberOfOutputs:1,channelCount:1,processorOptions:{sampleRate:n.sampleRate}}),e.port.onmessage=e=>{if(f.current?.readyState===WebSocket.OPEN){const{data:r,timestamp:t}=e.data,n=getBase64Audio(r);f.current.send(JSON.stringify({event:"media",media:{payload:n,timestamp:t}}))}},t.connect(e)}catch(e){l.error("Failed to start audio processing:",e),i?.(e)}},stopProcessing:()=>{e&&(e.disconnect(),e=null),t&&(t.disconnect(),t=null)},isProcessing:!!e}}),[W,r]),U=useCallback((e=>{W();try{const r=base64ToPCM16Data(e),t=convertPCMDataToFloat32(r),n=44100===C.current?t:resampleAudio(t,C.current,44100);L.current.push(n);const c=L.current.reduce(((e,r)=>e+r.length),0);(c>=T||M.current||R.current&&c>0)&&G()}catch(e){l.error("Error processing audio chunk:",e)}}),[W]),G=useCallback((()=>{const e=W();if(!e)return;let r=L.current.reduce(((e,r)=>e+r.length),0);const t=R.current&&r>0;if(M.current||!(r<T)||t)for(;L.current.length>0&&(t||M.current||!(r<T));){let t=0;const n=[];for(;L.current.length>0&&t<T;){const e=L.current.shift();n.push(e),t+=e.length}if(0===t)break;const c=new Float32Array(t);let o=0;for(const e of n)c.set(e,o),o+=e.length;const u=e.createBuffer(1,c.length,44100);u.getChannelData(0).set(c);const a=e.createBufferSource();a.buffer=u,a.connect(e.destination),D(a);const s=.02,i=Math.max(e.currentTime+s,w.current||0);h.current||(f.current?.send(JSON.stringify({event:"TTS_PLAYING",media:{tts_playing:!0}})),h.current=!0),M.current=!0,p(!0),E.current+=1,a.onended=()=>{E.current=Math.max(0,E.current-1),0===E.current&&0===L.current.length&&(M.current=!1,p(!1),f.current?.send(JSON.stringify({event:"TTS_PLAYING",media:{tts_playing:!1}})),h.current=!1,R.current&&f.current?.close())},a.start(i),w.current=i+u.duration,m.current=a,S.current=!0,r-=t}}),[W,D]),z=useCallback((async e=>{try{"media"===e.event&&e.media?.payload?(0===O.current&&(O.current=Date.now(),l.info("Chunk received at:",O.current)),C.current=e.sample_rate??44100,U(e.media.payload)):["barge","BARGE"].includes(e.event)?(l.info("Barged"),L.current=[]):"EOC"===e.event?(l.info("EOC event occurred"),f.current?.send(JSON.stringify({event:"EOC"}))):"stop"===e.event?(l.info("Stop event occurred"),f.current?.readyState===WebSocket.OPEN&&(R.current=!0),L.current.length>0&&G()):l.info("Unhandled message type:",e)}catch(e){l.error("Error processing audio message:",e)}}),[G,U]),V=useCallback((e=>{if(!k.current){if(k.current=!0,_(),N.current&&(clearInterval(N.current),N.current=null),f.current&&(f.current.readyState!==WebSocket.OPEN&&f.current.readyState!==WebSocket.CONNECTING||f.current.close(),f.current=null),P.current?.stop(),P.current?.destroy(),g.current&&(g.current.close(),g.current=null),m.current&&(m.current.stop(),m.current.disconnect(),m.current=null),y.current){y.current.getTracks().forEach((e=>{e.stop(),e.enabled=!1,y.current?.removeTrack(e)})),y.current=void 0}L.current=[],S.current=!1,b.current=!1,v.current=!0,M.current=!1,R.current=!1,w.current=0,E.current=0,p(!1),A(!1),s?.(e)}}),[_,s]),F=useCallback((()=>{if(!e||f.current||k.current||I)return;k.current=!1,v.current=!0;const r=new WebSocket(e);f.current=r,r.onopen=async()=>{k.current?r.close():(A(!0),f.current?.send(JSON.stringify({event:"ping",metadata:{timestamp:Date.now().toString()}})),N.current&&(clearInterval(N.current),N.current=null),N.current=setInterval((()=>{k.current||f.current?.readyState!==WebSocket.OPEN?N.current&&(clearInterval(N.current),N.current=null):f.current?.send(JSON.stringify({event:"ping",metadata:{timestamp:Date.now().toString()}}))}),1e4),await J(),await x(),r.send(JSON.stringify({event:"start"})))},r.onmessage=e=>{if(!k.current)try{const r=JSON.parse(e.data);r&&z(r)}catch(e){l.error("Error parsing websocket message:",e)}},r.onclose=e=>{N.current&&(clearInterval(N.current),N.current=null);"LINK_EXPIRED"===e.reason&&(l.info("Link expired"),location.reload()),k.current||V("server"),_()},r.onerror=e=>{l.error("WebSocket error:",e),i?.(e),k.current||V("server")}}),[e,a,s,i,J,x,I]),j=useCallback((()=>{V("client")}),[V]),H=useCallback((r=>{if(f.current&&(f.current.close(),f.current=null),k.current=!1,v.current=!0,S.current=!1,b.current=!1,M.current=!1,R.current=!1,w.current=0,E.current=0,A(!1),p(!1),L.current=[],g.current&&(g.current.close(),g.current=null),m.current&&(m.current.stop(),m.current.disconnect(),m.current=null),P.current&&(P.current.stop(),P.current.destroy(),P.current=null),y.current){y.current.getTracks().forEach((e=>{e.stop(),e.enabled=!1,y.current?.removeTrack(e)})),y.current=void 0}if(_(),!e)return void l.error("Cannot reconnect: websocketUrl is required");const t=new WebSocket(e);f.current=t,t.onopen=async()=>{k.current?t.close():(A(!0),N.current&&(clearInterval(N.current),N.current=null),N.current=setInterval((()=>{k.current||f.current?.readyState!==WebSocket.OPEN?N.current&&(clearInterval(N.current),N.current=null):f.current?.send(JSON.stringify({event:"ping",metadata:{timestamp:Date.now().toString()}}))}),1e4),await J(),await x(),t.send(JSON.stringify({event:"start"})),r?.())},t.onmessage=e=>{if(!k.current)try{const r=JSON.parse(e.data);r&&z(r)}catch(e){l.error("Error parsing websocket message:",e),i?.(e)}},t.onclose=e=>{N.current&&(clearInterval(N.current),N.current=null);"LINK_EXPIRED"===e.reason&&(l.info("Link expired"),location.reload()),k.current||V("server"),_()},t.onerror=e=>{l.error("WebSocket error:",e),i?.(e),k.current||V("server")}}),[e,a,s,i,J,x,_,V]);return{isConnected:I,isPlaying:d,startRecording:x,stopRecording:_,isRecording:B,connect:F,disconnect:j,reconnect:H}};
|
|
2
2
|
//# sourceMappingURL=useWebVoice.js.map
|
package/dist/useWebVoice.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWebVoice.js","names":["AudioMotionAnalyzer","useCallback","useMemo","useRef","useState","audioProcessorSource","applyCustomColor","base64ToPCM16Data","convertPCMDataToFloat32","getBase64Audio","getVisualizerOptions","resampleAudio","resetAudioInput","SAMPLE_RATE","CHANNELS","BITS_PER_SAMPLE","defaultLogger","info","arg","args","console","log","error","useWebSocketAudio","websocketUrl","workletPath","visualizerOptions","elementId","visualizerElementId","color","visualizerColor","options","events","eventsOption","logger","loggerOption","onOpen","onClose","onException","isPlaying","setIsPlaying","websocketRef","audioContextRef","sourceNodeRef","isPlayingRef","isFirstChunk","streamRef","isAudioNodesConnected","isCleanedUp","backendSampleRate","isStopReceived","lastSentTTSEvent","chunkReceivedAt","analyzerRef","isConnected","setIsConnected","isPlayingAudio","audioBufferRef","getOrCreateAudioContext","current","state","window","AudioContext","webkitAudioContext","sampleRate","latencyHint","initializeVisualizer","source","connectInput","analyzer","document","getElementById","start","setupAudioStream","async","navigator","mediaDevices","getUserMedia","audio","channelCount","echoCancellation","ideal","noiseSuppression","autoGainControl","audioContext","createMediaStreamSource","compressor","createDynamicsCompressor","threshold","value","knee","ratio","attack","release","gainNode","createGain","gain","connect","e","startProcessing","stopProcessing","isProcessing","audioWorkletNode","sourceNode","useEmbedded","undefined","workletUrl","URL","createObjectURL","Blob","type","audioWorklet","addModule","revokeObjectURL","AudioWorkletNode","numberOfInputs","numberOfOutputs","processorOptions","port","onmessage","event","readyState","WebSocket","OPEN","data","timestamp","base64Data","send","JSON","stringify","media","payload","disconnect","processAudioChunk","pcm16Data","float32Data","rightSampled","push","reduce","acc","chunk","length","playNextChunk","audioData","tts_playing","silenceLength","Math","floor","Float32Array","fill","totalLength","chunks","shift","offset","set","audioBuffer","createBuffer","getChannelData","createBufferSource","buffer","destination","onended","close","processAudioMessage","message","Date","now","sample_rate","includes","cleanup","CONNECTING","stop","destroy","getTracks","forEach","track","enabled","removeTrack","ws","onopen","parse","onclose","reason","location","reload","onerror","reconnect","onConnectionSuccess","startRecording","stopRecording","isRecording"],"sources":["../src/useWebVoice.ts"],"mappings":"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","ignoreList":[]}
|
|
1
|
+
{"version":3,"file":"useWebVoice.js","names":["AudioMotionAnalyzer","useCallback","useMemo","useRef","useState","audioProcessorSource","applyCustomColor","base64ToPCM16Data","convertPCMDataToFloat32","getBase64Audio","getVisualizerOptions","resampleAudio","resetAudioInput","SAMPLE_RATE","CHANNELS","BITS_PER_SAMPLE","defaultLogger","info","arg","args","console","log","error","useWebSocketAudio","websocketUrl","workletPath","visualizerOptions","elementId","visualizerElementId","color","visualizerColor","options","events","eventsOption","logger","loggerOption","onOpen","onClose","onException","isPlaying","setIsPlaying","websocketRef","audioContextRef","sourceNodeRef","isPlayingRef","isFirstChunk","streamRef","isAudioNodesConnected","isCleanedUp","backendSampleRate","isStopReceived","lastSentTTSEvent","chunkReceivedAt","nextPlayTimeRef","pendingSourcesRef","analyzerRef","pingIntervalRef","isConnected","setIsConnected","isPlayingAudio","bufferSize","audioBufferRef","getOrCreateAudioContext","current","state","window","AudioContext","webkitAudioContext","sampleRate","latencyHint","initializeVisualizer","source","connectInput","analyzer","document","getElementById","start","setupAudioStream","async","navigator","mediaDevices","getUserMedia","audio","channelCount","echoCancellation","ideal","noiseSuppression","autoGainControl","audioContext","createMediaStreamSource","compressor","createDynamicsCompressor","threshold","value","knee","ratio","attack","release","gainNode","createGain","gain","connect","e","startProcessing","stopProcessing","isProcessing","audioWorkletNode","sourceNode","useEmbedded","undefined","workletUrl","URL","createObjectURL","Blob","type","audioWorklet","addModule","revokeObjectURL","AudioWorkletNode","numberOfInputs","numberOfOutputs","processorOptions","port","onmessage","event","readyState","WebSocket","OPEN","data","timestamp","base64Data","send","JSON","stringify","media","payload","disconnect","processAudioChunk","pcm16Data","float32Data","rightSampled","push","totalBufferedSamples","reduce","acc","chunk","length","playNextChunk","bufferedSamples","shouldPlayRemainder","totalLength","chunks","shift","audioData","Float32Array","offset","set","audioBuffer","createBuffer","getChannelData","createBufferSource","buffer","destination","safetyOffset","startTime","Math","max","currentTime","tts_playing","onended","close","duration","processAudioMessage","message","Date","now","sample_rate","includes","cleanup","clearInterval","CONNECTING","stop","destroy","getTracks","forEach","track","enabled","removeTrack","ws","onopen","metadata","toString","setInterval","parse","onclose","reason","location","reload","onerror","reconnect","onConnectionSuccess","startRecording","stopRecording","isRecording"],"sources":["../src/useWebVoice.ts"],"mappings":"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","ignoreList":[]}
|