UNPKG

voicebot-react-native-expo

Version:

This is a voicebot-react-native package of Kipps AI voice bot for React Native Expo

1 lines 5.6 kB
{"version":3,"file":"krisp.mjs","sources":["../src/hooks/cloud/krisp/useKrispNoiseFilter.ts"],"sourcesContent":["import * as React from 'react';\nimport { LocalAudioTrack } from 'livekit-client';\nimport type { KrispNoiseFilterProcessor, NoiseFilterOptions } from '@livekit/krisp-noise-filter';\nimport type { TrackReferenceOrPlaceholder } from '@livekit/components-core';\nimport { useLocalParticipant } from '../../..';\n\n/**\n * @alpha\n */\nexport interface useKrispNoiseFilterOptions {\n /**\n * by default the hook will use the localParticipant's microphone track publication.\n * You can override this behavior by passing in a target TrackReference here\n */\n trackRef?: TrackReferenceOrPlaceholder;\n filterOptions?: NoiseFilterOptions;\n}\n\n/**\n * This hook is a convenience helper for enabling Krisp Enhanced Audio Noise Cancellation on LiveKit audio tracks.\n * It returns a `setNoiseFilterEnabled` method to conveniently toggle between enabled and disabled states.\n *\n * @remarks Krisp noise filter is a feature that's only supported on LiveKit cloud plans\n * @alpha\n * @example\n * ```tsx\n * const krisp = useKrispNoiseFilter();\n * return <input\n type=\"checkbox\"\n onChange={(ev) => krisp.setNoiseFilterEnabled(ev.target.checked)}\n checked={krisp.isNoiseFilterEnabled}\n disabled={krisp.isNoiseFilterPending}\n />\n * ```\n */\nexport function useKrispNoiseFilter(options: useKrispNoiseFilterOptions = {}) {\n const [shouldEnable, setShouldEnable] = React.useState(false);\n const [isNoiseFilterPending, setIsNoiseFilterPending] = React.useState(false);\n const [isNoiseFilterEnabled, setIsNoiseFilterEnabled] = React.useState(false);\n let micPublication = useLocalParticipant().microphoneTrack;\n const [krispProcessor, setKrispProcessor] = React.useState<\n KrispNoiseFilterProcessor | undefined\n >();\n if (options.trackRef) {\n micPublication = options.trackRef.publication;\n }\n\n const setNoiseFilterEnabled = React.useCallback(async (enable: boolean) => {\n if (enable) {\n const { KrispNoiseFilter, isKrispNoiseFilterSupported } = await import(\n '@livekit/krisp-noise-filter'\n );\n\n if (!isKrispNoiseFilterSupported()) {\n console.warn('Krisp noise filter is not supported in this browser');\n return;\n }\n if (!krispProcessor) {\n setKrispProcessor(KrispNoiseFilter(options.filterOptions));\n }\n }\n setShouldEnable((prev) => {\n if (prev !== enable) {\n setIsNoiseFilterPending(true);\n }\n return enable;\n });\n }, []);\n\n React.useEffect(() => {\n if (micPublication && micPublication.track instanceof LocalAudioTrack && krispProcessor) {\n const currentProcessor = micPublication.track.getProcessor();\n if (currentProcessor && currentProcessor.name === 'livekit-noise-filter') {\n setIsNoiseFilterPending(true);\n (currentProcessor as KrispNoiseFilterProcessor).setEnabled(shouldEnable).finally(() => {\n setIsNoiseFilterPending(false);\n setIsNoiseFilterEnabled(shouldEnable);\n });\n } else if (!currentProcessor && shouldEnable) {\n setIsNoiseFilterPending(true);\n micPublication?.track\n ?.setProcessor(krispProcessor)\n .then(() => krispProcessor.setEnabled(shouldEnable))\n .then(() => {\n setIsNoiseFilterEnabled(true);\n })\n .catch((e: any) => {\n setIsNoiseFilterEnabled(false);\n console.error(e);\n })\n .finally(() => {\n setIsNoiseFilterPending(false);\n });\n }\n }\n }, [shouldEnable, micPublication, krispProcessor]);\n\n return {\n setNoiseFilterEnabled,\n isNoiseFilterEnabled,\n isNoiseFilterPending,\n processor: krispProcessor,\n };\n}\n"],"names":["useKrispNoiseFilter","options","shouldEnable","setShouldEnable","React","isNoiseFilterPending","setIsNoiseFilterPending","isNoiseFilterEnabled","setIsNoiseFilterEnabled","micPublication","useLocalParticipant","krispProcessor","setKrispProcessor","setNoiseFilterEnabled","enable","KrispNoiseFilter","isKrispNoiseFilterSupported","prev","LocalAudioTrack","currentProcessor","_a","e"],"mappings":";;;AAmCgB,SAAAA,EAAoBC,IAAsC,IAAI;AAC5E,QAAM,CAACC,GAAcC,CAAe,IAAIC,EAAM,SAAS,EAAK,GACtD,CAACC,GAAsBC,CAAuB,IAAIF,EAAM,SAAS,EAAK,GACtE,CAACG,GAAsBC,CAAuB,IAAIJ,EAAM,SAAS,EAAK;AACxE,MAAAK,IAAiBC,EAAsB,EAAA;AAC3C,QAAM,CAACC,GAAgBC,CAAiB,IAAIR,EAAM,SAEhD;AACF,EAAIH,EAAQ,aACVQ,IAAiBR,EAAQ,SAAS;AAGpC,QAAMY,IAAwBT,EAAM,YAAY,OAAOU,MAAoB;AACzE,QAAIA,GAAQ;AACV,YAAM,EAAE,kBAAAC,GAAkB,6BAAAC,EAAgC,IAAA,MAAM,OAC9D,6BACF;AAEI,UAAA,CAACA,KAA+B;AAClC,gBAAQ,KAAK,qDAAqD;AAClE;AAAA,MACF;AACA,MAAKL,KACeC,EAAAG,EAAiBd,EAAQ,aAAa,CAAC;AAAA,IAE7D;AACA,IAAAE,EAAgB,CAACc,OACXA,MAASH,KACXR,EAAwB,EAAI,GAEvBQ,EACR;AAAA,EACH,GAAG,CAAE,CAAA;AAEL,SAAAV,EAAM,UAAU,MAAM;;AACpB,QAAIK,KAAkBA,EAAe,iBAAiBS,KAAmBP,GAAgB;AACjF,YAAAQ,IAAmBV,EAAe,MAAM,aAAa;AACvD,MAAAU,KAAoBA,EAAiB,SAAS,0BAChDb,EAAwB,EAAI,GAC3Ba,EAA+C,WAAWjB,CAAY,EAAE,QAAQ,MAAM;AACrF,QAAAI,EAAwB,EAAK,GAC7BE,EAAwBN,CAAY;AAAA,MAAA,CACrC,KACQ,CAACiB,KAAoBjB,MAC9BI,EAAwB,EAAI,IAC5Bc,IAAAX,KAAA,gBAAAA,EAAgB,UAAhB,QAAAW,EACI,aAAaT,GACd,KAAK,MAAMA,EAAe,WAAWT,CAAY,GACjD,KAAK,MAAM;AACV,QAAAM,EAAwB,EAAI;AAAA,MAAA,GAE7B,MAAM,CAACa,MAAW;AACjB,QAAAb,EAAwB,EAAK,GAC7B,QAAQ,MAAMa,CAAC;AAAA,MAAA,GAEhB,QAAQ,MAAM;AACb,QAAAf,EAAwB,EAAK;AAAA,MAAA;AAAA,IAGrC;AAAA,EACC,GAAA,CAACJ,GAAcO,GAAgBE,CAAc,CAAC,GAE1C;AAAA,IACL,uBAAAE;AAAA,IACA,sBAAAN;AAAA,IACA,sBAAAF;AAAA,IACA,WAAWM;AAAA,EAAA;AAEf;"}