@tiny-codes/react-easy 1.4.5 → 1.4.7
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/CHANGELOG.md +20 -0
- package/es/assets/request-camera-en.js +2 -0
- package/es/assets/request-camera-en.js.d.ts +2 -0
- package/es/assets/request-camera-en.js.map +1 -0
- package/es/assets/request-camera-en.png +0 -0
- package/es/assets/request-camera-zh.js +2 -0
- package/es/assets/request-camera-zh.js.d.ts +2 -0
- package/es/assets/request-camera-zh.js.map +1 -0
- package/es/assets/request-camera-zh.png +0 -0
- package/es/assets/request-microphone-en.js +2 -0
- package/es/assets/request-microphone-en.js.d.ts +2 -0
- package/es/assets/request-microphone-en.js.map +1 -0
- package/es/assets/request-microphone-en.png +0 -0
- package/es/assets/request-microphone-zh.js +2 -0
- package/es/assets/request-microphone-zh.js.d.ts +2 -0
- package/es/assets/request-microphone-zh.js.map +1 -0
- package/es/assets/request-microphone-zh.png +0 -0
- package/es/assets/reset-camera-en.js +2 -0
- package/es/assets/reset-camera-en.js.d.ts +2 -0
- package/es/assets/reset-camera-en.js.map +1 -0
- package/es/assets/reset-camera-en.png +0 -0
- package/es/assets/reset-camera-zh.js +2 -0
- package/es/assets/reset-camera-zh.js.d.ts +2 -0
- package/es/assets/reset-camera-zh.js.map +1 -0
- package/es/assets/reset-camera-zh.png +0 -0
- package/es/assets/reset-microphone-en.js +2 -0
- package/es/assets/reset-microphone-en.js.d.ts +2 -0
- package/es/assets/reset-microphone-en.js.map +1 -0
- package/es/assets/reset-microphone-en.png +0 -0
- package/es/assets/reset-microphone-zh.js +2 -0
- package/es/assets/reset-microphone-zh.js.d.ts +2 -0
- package/es/assets/reset-microphone-zh.js.map +1 -0
- package/es/assets/reset-microphone-zh.png +0 -0
- package/es/assets/save-default-audio1-en.js +2 -0
- package/es/assets/save-default-audio1-en.js.d.ts +2 -0
- package/es/assets/save-default-audio1-en.js.map +1 -0
- package/es/assets/save-default-audio1-en.png +0 -0
- package/es/assets/save-default-audio1-zh.js +2 -0
- package/es/assets/save-default-audio1-zh.js.d.ts +2 -0
- package/es/assets/save-default-audio1-zh.js.map +1 -0
- package/es/assets/save-default-audio1-zh.png +0 -0
- package/es/assets/save-default-audio2-en.js +2 -0
- package/es/assets/save-default-audio2-en.js.d.ts +2 -0
- package/es/assets/save-default-audio2-en.js.map +1 -0
- package/es/assets/save-default-audio2-en.png +0 -0
- package/es/assets/save-default-audio2-zh.js +2 -0
- package/es/assets/save-default-audio2-zh.js.d.ts +2 -0
- package/es/assets/save-default-audio2-zh.js.map +1 -0
- package/es/assets/save-default-audio2-zh.png +0 -0
- package/es/components/ConfigProvider/index.js +1 -0
- package/es/components/ConfigProvider/index.js.map +1 -1
- package/es/hooks/index.d.ts +1 -0
- package/es/hooks/index.js +1 -0
- package/es/hooks/index.js.map +1 -1
- package/es/hooks/useRefValue.d.ts +2 -2
- package/es/hooks/useRefValue.js.map +1 -1
- package/es/hooks/useUserMedia.d.ts +104 -0
- package/es/hooks/useUserMedia.js +799 -0
- package/es/hooks/useUserMedia.js.map +1 -0
- package/es/locales/index.d.ts +51 -0
- package/es/locales/langs/en-US.d.ts +17 -0
- package/es/locales/langs/en-US.js +18 -1
- package/es/locales/langs/en-US.js.map +1 -1
- package/es/locales/langs/zh-CN.d.ts +17 -0
- package/es/locales/langs/zh-CN.js +18 -1
- package/es/locales/langs/zh-CN.js.map +1 -1
- package/es/utils/math.js +52 -4
- package/es/utils/math.js.map +1 -1
- package/es/utils/stream.d.ts +68 -0
- package/es/utils/stream.js +122 -0
- package/es/utils/stream.js.map +1 -0
- package/lib/assets/request-camera-en.js +26 -0
- package/lib/assets/request-camera-en.js.d.ts +2 -0
- package/lib/assets/request-camera-en.js.map +7 -0
- package/lib/assets/request-camera-en.png +0 -0
- package/lib/assets/request-camera-zh.js +26 -0
- package/lib/assets/request-camera-zh.js.d.ts +2 -0
- package/lib/assets/request-camera-zh.js.map +7 -0
- package/lib/assets/request-camera-zh.png +0 -0
- package/lib/assets/request-microphone-en.js +26 -0
- package/lib/assets/request-microphone-en.js.d.ts +2 -0
- package/lib/assets/request-microphone-en.js.map +7 -0
- package/lib/assets/request-microphone-en.png +0 -0
- package/lib/assets/request-microphone-zh.js +26 -0
- package/lib/assets/request-microphone-zh.js.d.ts +2 -0
- package/lib/assets/request-microphone-zh.js.map +7 -0
- package/lib/assets/request-microphone-zh.png +0 -0
- package/lib/assets/reset-camera-en.js +26 -0
- package/lib/assets/reset-camera-en.js.d.ts +2 -0
- package/lib/assets/reset-camera-en.js.map +7 -0
- package/lib/assets/reset-camera-en.png +0 -0
- package/lib/assets/reset-camera-zh.js +26 -0
- package/lib/assets/reset-camera-zh.js.d.ts +2 -0
- package/lib/assets/reset-camera-zh.js.map +7 -0
- package/lib/assets/reset-camera-zh.png +0 -0
- package/lib/assets/reset-microphone-en.js +26 -0
- package/lib/assets/reset-microphone-en.js.d.ts +2 -0
- package/lib/assets/reset-microphone-en.js.map +7 -0
- package/lib/assets/reset-microphone-en.png +0 -0
- package/lib/assets/reset-microphone-zh.js +26 -0
- package/lib/assets/reset-microphone-zh.js.d.ts +2 -0
- package/lib/assets/reset-microphone-zh.js.map +7 -0
- package/lib/assets/reset-microphone-zh.png +0 -0
- package/lib/assets/save-default-audio1-en.js +26 -0
- package/lib/assets/save-default-audio1-en.js.d.ts +2 -0
- package/lib/assets/save-default-audio1-en.js.map +7 -0
- package/lib/assets/save-default-audio1-en.png +0 -0
- package/lib/assets/save-default-audio1-zh.js +26 -0
- package/lib/assets/save-default-audio1-zh.js.d.ts +2 -0
- package/lib/assets/save-default-audio1-zh.js.map +7 -0
- package/lib/assets/save-default-audio1-zh.png +0 -0
- package/lib/assets/save-default-audio2-en.js +26 -0
- package/lib/assets/save-default-audio2-en.js.d.ts +2 -0
- package/lib/assets/save-default-audio2-en.js.map +7 -0
- package/lib/assets/save-default-audio2-en.png +0 -0
- package/lib/assets/save-default-audio2-zh.js +26 -0
- package/lib/assets/save-default-audio2-zh.js.d.ts +2 -0
- package/lib/assets/save-default-audio2-zh.js.map +7 -0
- package/lib/assets/save-default-audio2-zh.png +0 -0
- package/lib/components/ConfigProvider/index.js +1 -0
- package/lib/components/ConfigProvider/index.js.map +2 -2
- package/lib/hooks/index.d.ts +1 -0
- package/lib/hooks/index.js +3 -0
- package/lib/hooks/index.js.map +2 -2
- package/lib/hooks/useRefValue.d.ts +2 -2
- package/lib/hooks/useRefValue.js.map +2 -2
- package/lib/hooks/useUserMedia.d.ts +104 -0
- package/lib/hooks/useUserMedia.js +553 -0
- package/lib/hooks/useUserMedia.js.map +7 -0
- package/lib/locales/index.d.ts +51 -0
- package/lib/locales/langs/en-US.d.ts +17 -0
- package/lib/locales/langs/en-US.js +18 -1
- package/lib/locales/langs/en-US.js.map +2 -2
- package/lib/locales/langs/zh-CN.d.ts +17 -0
- package/lib/locales/langs/zh-CN.js +18 -1
- package/lib/locales/langs/zh-CN.js.map +2 -2
- package/lib/utils/math.js +37 -4
- package/lib/utils/math.js.map +2 -2
- package/lib/utils/stream.d.ts +68 -0
- package/lib/utils/stream.js +101 -0
- package/lib/utils/stream.js.map +7 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["_regeneratorRuntime","e","t","r","Object","prototype","n","hasOwnProperty","o","defineProperty","value","i","Symbol","a","iterator","c","asyncIterator","u","toStringTag","define","enumerable","configurable","writable","wrap","Generator","create","Context","makeInvokeMethod","tryCatch","type","arg","call","h","l","f","s","y","GeneratorFunction","GeneratorFunctionPrototype","p","d","getPrototypeOf","v","values","g","defineIteratorMethods","forEach","_invoke","AsyncIterator","invoke","_typeof","resolve","__await","then","callInvokeWithMethodAndArg","Error","done","method","delegate","maybeInvokeDelegate","sent","_sent","dispatchException","abrupt","return","TypeError","resultName","next","nextLoc","pushTryEntry","tryLoc","catchLoc","finallyLoc","afterLoc","tryEntries","push","resetTryEntry","completion","reset","isNaN","length","displayName","isGeneratorFunction","constructor","name","mark","setPrototypeOf","__proto__","awrap","async","Promise","keys","reverse","pop","prev","charAt","slice","stop","rval","handle","complete","finish","catch","_catch","delegateYield","ownKeys","getOwnPropertySymbols","filter","getOwnPropertyDescriptor","apply","_objectSpread","arguments","_defineProperty","getOwnPropertyDescriptors","defineProperties","obj","key","_toPropertyKey","_toPrimitive","String","toPrimitive","Number","asyncGeneratorStep","gen","reject","_next","_throw","info","error","_asyncToGenerator","fn","self","args","err","undefined","_slicedToArray","arr","_arrayWithHoles","_iterableToArrayLimit","_unsupportedIterableToArray","_nonIterableRest","minLen","_arrayLikeToArray","toString","Array","from","test","len","arr2","isArray","useContext","useEffect","useMemo","useRef","useState","App","Checkbox","Flex","Form","Modal","notification","Select","Typography","EasyConfigProvider","ReactEasyContext","StreamTimeSlicerClass","useRefFunction","useRefValue","useT","jsx","_jsx","jsxs","_jsxs","requestMicrophoneEnUrlPromise","requestMicrophoneZhUrlPromise","resetMicrophoneEnUrlPromise","resetMicrophoneZhUrlPromise","saveAudioDeviceEnUrlPromise1","saveAudioDeviceZhUrlPromise1","saveAudioDeviceEnUrlPromise2","saveAudioDeviceZhUrlPromise2","requestCameraEnUrlPromise","requestCameraZhUrlPromise","resetCameraEnUrlPromise","resetCameraZhUrlPromise","useUserMedia","props","_app$modal","media","pcmAudioOptions","disabled","_props$streamSliceMs","streamSliceMs","_props$soundDetection","soundDetectionThreshold","_props$soundDetection2","soundDetectionTimeout","onStartRecording","onStopRecording","onStreamChunk","onPcmStreamChunk","context","lang","contextRef","app","useApp","modal","confirm","modalRef","_useState","_useState2","requestMicrophoneEnUrl","setRequestMicrophoneEnUrl","_useState3","_useState4","requestMicrophoneZhUrl","setRequestMicrophoneZhUrl","_useState5","_useState6","resetMicrophoneEnUrl","setResetMicrophoneEnUrl","_useState7","_useState8","resetMicrophoneZhUrl","setResetMicrophoneZhUrl","_useState9","_useState10","requestCameraEnUrl","setRequestCameraEnUrl","_useState11","_useState12","requestCameraZhUrl","setRequestCameraZhUrl","_useState13","_useState14","resetCameraEnUrl","setResetCameraEnUrl","_useState15","_useState16","resetCameraZhUrl","setResetCameraZhUrl","_useState17","_useState18","isRecording","setIsRecording","_useState19","_useState20","mediaStream","setMediaStream","_useState21","_useState22","mediaRecorder","setMediaRecorder","stopSoundListeningRef","closePcmRef","includeAudio","audio","exactAudioDeviceIdRef","rafRef","isSpeakingRef","silenceVolumeThresholdRef","silenceDetectDurationRef","soundDetectStart","pcmSampleRateRef","onPcmStreamChunkRef","pcmStreamSlicerRef","timeSlice","onSlice","channels","_onPcmStreamChunkRef$","current","deviceType","video","featureName","showDeniedPopup","resetMicrophoneUrl","resetCameraUrl","title","width","content","children","Paragraph","Text","strong","src","alt","style","recordStream","_ref","_callee2","stream","options","recorder","ctx","sourceNode","node","setupWorklet","_callee2$","_context2","deviceId","exact","navigator","mediaDevices","getUserMedia","MediaRecorder","ondataavailable","event","data","size","start","AudioContext","audioContext","sampleRate","state","resume","createMediaStreamSource","_node","_node2","port","close","disconnect","_ref2","_callee","_callee$","_context","audioWorklet","addModule","generatePcmCaptureProcessorModule","AudioWorkletNode","workletOptions","onmessage","_e$data","connect","t0","fallbackScriptProcessor","streamSlicer","console","t1","message","startRecording","_callee3","_navigator$mediaDevic","_navigator$permission","result","requestMicrophoneUrl","requestCameraUrl","_callee3$","_context3","permissions","query","window","warning","onOk","stopRecording","_stopSoundListeningRe","_closePcmRef$current","getTracks","cancelAnimationFrame","waitForSound","source","analyser","createAnalyser","fftSize","Date","now","Uint8Array","cancelDetect","_stopSoundListeningRe2","loop","getByteTimeDomainData","sum","_iterator","_createForOfIteratorHelper","_step","rms","Math","sqrt","enumerateDevices","devices","audioInputs","kind","SaveAudioDeviceForm","onDeviceChange","setTimeout","onCancel","requestAnimationFrame","warn","_stopSoundListeningRe3","module","default","_Form$useForm","useForm","_Form$useForm2","form","_useContext","_useState23","_useState24","saveAudioDeviceEnUrl1","setSaveAudioDeviceEnUrl1","_useState25","_useState26","saveAudioDeviceEnUrl2","setSaveAudioDeviceEnUrl2","_useState27","_useState28","saveAudioDeviceZhUrl1","setSaveAudioDeviceZhUrl1","_useState29","_useState30","saveAudioDeviceZhUrl2","setSaveAudioDeviceZhUrl2","_useState31","_useState32","saveDefaultAudioDevicePermanently","setSaveDefaultAudioDevicePermanently","_useState33","_mediaStream$getAudio","_mediaStream$getAudio2","_audioInputs$","getAudioTracks","getSettings","_useState34","selectedDeviceId","setSelectedDeviceId","openDataImageInNewTab","dataUrl","_meta$match","_dataUrl$split","split","_dataUrl$split2","meta","b64","mime","match","binary","atob","bytes","charCodeAt","blob","Blob","url","URL","createObjectURL","open","layout","Item","label","map","input","defaultValue","onChange","id","marginBottom","target","checked","gap","align","flex","minWidth","href","onClick","preventDefault","height","workletCode","blobUrl","bufferSize","processor","createScriptProcessor","onaudioprocess","ev","inputBuffer","numberOfChannels","getChannelData","copy","Float32Array","set","gain","createGain","destination"],"sources":["../../src/hooks/useUserMedia.tsx"],"sourcesContent":["import { useContext, useEffect, useMemo, useRef, useState } from 'react';\nimport { App, Checkbox, Flex, Form, Modal, notification, Select, Typography } from 'antd';\nimport EasyConfigProvider from '../components/ConfigProvider';\nimport ReactEasyContext from '../components/ConfigProvider/context';\nimport { StreamTimeSlicerClass } from '../utils/stream';\nimport useRefFunction from './useRefFunction';\nimport useRefValue from './useRefValue';\nimport useT from './useT';\n\nconst requestMicrophoneEnUrlPromise = import('../assets/request-microphone-en.js');\nconst requestMicrophoneZhUrlPromise = import('../assets/request-microphone-zh.js');\nconst resetMicrophoneEnUrlPromise = import('../assets/reset-microphone-en.js');\nconst resetMicrophoneZhUrlPromise = import('../assets/reset-microphone-zh.js');\nconst saveAudioDeviceEnUrlPromise1 = import('../assets/save-default-audio1-en.js');\nconst saveAudioDeviceZhUrlPromise1 = import('../assets/save-default-audio1-zh.js');\nconst saveAudioDeviceEnUrlPromise2 = import('../assets/save-default-audio2-en.js');\nconst saveAudioDeviceZhUrlPromise2 = import('../assets/save-default-audio2-zh.js');\nconst requestCameraEnUrlPromise = import('../assets/request-camera-en.js');\nconst requestCameraZhUrlPromise = import('../assets/request-camera-zh.js');\nconst resetCameraEnUrlPromise = import('../assets/reset-camera-en.js');\nconst resetCameraZhUrlPromise = import('../assets/reset-camera-zh.js');\n\nexport interface UseUserMediaProps {\n /**\n * - **EN:** The media constraints for the audio and video stream.\n * - **CN:** 媒体流的媒体约束。\n */\n media: Pick<MediaStreamConstraints, 'audio' | 'video'>;\n /**\n * - **EN:** Whether to enable PCM output, only effective when recording audio. Please use\n * `onPcmStreamChunk` callback to get PCM data. Default is `false`.\n * - **CN:** 是否启用 PCM 输出,仅在录制音频时有效。请使用 `onPcmStreamChunk` 回调获取 PCM 数据。默认`false`\n */\n pcmAudioOptions?: {\n /**\n * - **EN:** The audio context options for the PCM output.\n * - **CN:** PCM 输出的音频上下文选项。\n */\n audioContext?: AudioContextOptions;\n /**\n * - **EN:** The worklet options for the PCM output.\n * - **CN:** PCM 输出的工作线程选项。\n */\n workletOptions?: AudioWorkletNodeOptions;\n };\n /**\n * - **EN:** Callback function that is triggered when the recording starts, providing the media\n * stream.\n * - **CN:** 开始录制时触发的回调函数,提供媒体流。\n *\n * @param {MediaStream} stream - The media stream.\n */\n onStartRecording?: (stream: MediaStream) => void;\n /**\n * - **EN:** Callback function that is triggered when the recording stops.\n * - **CN:** 停止录制时触发的回调函数。\n */\n onStopRecording?: () => void;\n /**\n * - **EN:** Callback function that is triggered when a new chunk of media data is available.\n * - **CN:** 当录制媒体流时,每个时间分片会触发一次 `onStreamChunk` 回调,提供媒体数据块。\n *\n * > 注意音频流编码格式为:audio/webm;codecs=opus。如果希望获取 PCM 数据,请使用 `onPcmData` 回调。\n *\n * @param {Blob} chunk - The media data chunk (MIME: audio/webm;codecs=opus) | 媒体数据块 (MIME:\n * audio/webm;codecs=opus)\n */\n onStreamChunk?: (chunk: Blob) => void;\n /**\n * - **EN:** Callback for raw PCM float data (per render quantum)\n * - **CN:** 获取原始 PCM 浮点数据的回调(每个渲染量子)\n *\n * @param data Monophonic or polyphonic spliced data | 单声道或多声道拼接数据\n * @param sampleRate Sample rate | 采样率\n */\n onPcmStreamChunk?: (channels: Float32Array[], sampleRate: number) => void;\n /**\n * - **EN:** Whether to disable this hook.\n * - **CN:** 是否禁用此工具\n */\n disabled?: boolean;\n /**\n * - **EN:** The slicing time period (milliseconds) for each fragment of the audio and video stream,\n * each time slice will trigger the `onStreamChunk` callback. Default is `500`.\n * - **CN:** 媒体流每个分片的切片时间段(毫秒),每个时间分片会触发一次 `onStreamChunk` 回调,默认值为 `500`。\n */\n streamSliceMs?: number;\n /**\n * - **EN:** The silence detection threshold (0-1) for the audio stream, below which the audio is\n * considered silent. Default is `0`.\n * - **CN:** 音频流的静音检测阈值(0-1),低于该值音频被视为静音。默认值为 `0`。\n */\n soundDetectionThreshold?: number;\n /**\n * - **EN:** The timeout duration (milliseconds) for detecting sound input. If no sound is detected\n * within this period, the user will be prompted to re-select the audio device. Default is\n * `3000`.\n * - **CN:** 检测是否有声音输入的超时时间(毫秒),如果在该时间段内没有检测到声音,则会提示用户重新选择音频设备。默认值为 `3000`。\n */\n soundDetectionTimeout?: number;\n}\n\nconst useUserMedia = (props: UseUserMediaProps): UseUserMediaResult => {\n const {\n media,\n pcmAudioOptions,\n disabled,\n streamSliceMs = 500,\n soundDetectionThreshold = 0,\n soundDetectionTimeout = 3000,\n onStartRecording,\n onStopRecording,\n onStreamChunk,\n onPcmStreamChunk,\n } = props;\n const context = useContext(ReactEasyContext);\n const { lang } = context;\n const contextRef = useRefValue(context);\n const t = useT();\n const app = App.useApp();\n // @ts-expect-error: because app may return a stub object when App is not used\n const modal = app.modal?.confirm ? app.modal : Modal;\n const modalRef = useRefValue(modal);\n const [requestMicrophoneEnUrl, setRequestMicrophoneEnUrl] = useState<string>();\n const [requestMicrophoneZhUrl, setRequestMicrophoneZhUrl] = useState<string>();\n const [resetMicrophoneEnUrl, setResetMicrophoneEnUrl] = useState<string>();\n const [resetMicrophoneZhUrl, setResetMicrophoneZhUrl] = useState<string>();\n const [requestCameraEnUrl, setRequestCameraEnUrl] = useState<string>();\n const [requestCameraZhUrl, setRequestCameraZhUrl] = useState<string>();\n const [resetCameraEnUrl, setResetCameraEnUrl] = useState<string>();\n const [resetCameraZhUrl, setResetCameraZhUrl] = useState<string>();\n const [isRecording, setIsRecording] = useState(false);\n const [mediaStream, setMediaStream] = useState<MediaStream>();\n const [mediaRecorder, setMediaRecorder] = useState<MediaRecorder | null>(null);\n const stopSoundListeningRef = useRef<(() => void) | undefined>(undefined);\n const closePcmRef = useRef<(() => void) | undefined>(undefined);\n const includeAudio = !!media.audio;\n const exactAudioDeviceIdRef = useRef<string | undefined>(undefined);\n const rafRef = useRef<number>(0);\n const isSpeakingRef = useRef(false);\n const silenceVolumeThresholdRef = useRefValue(soundDetectionThreshold);\n const silenceDetectDurationRef = useRefValue(soundDetectionTimeout);\n const soundDetectStart = useRef<number>(0);\n const pcmSampleRateRef = useRef<number>(0);\n const onPcmStreamChunkRef = useRefValue(onPcmStreamChunk);\n const pcmStreamSlicerRef = useRef(\n new StreamTimeSlicerClass({\n timeSlice: streamSliceMs,\n onSlice: (channels) => {\n onPcmStreamChunkRef.current?.(channels, pcmSampleRateRef.current);\n },\n })\n );\n const deviceType = useMemo(\n () => (media.video ? t('hooks.useUserMedia.camera') : t('hooks.useUserMedia.microphone')),\n [media, t]\n );\n const featureName = useMemo(\n () => (media.video ? t('hooks.featureName.camera') : t('hooks.featureName.microphone')),\n [media, t]\n );\n\n const showDeniedPopup = () => {\n const resetMicrophoneUrl = lang === 'zh-CN' ? resetMicrophoneZhUrl : resetMicrophoneEnUrl;\n const resetCameraUrl = lang === 'zh-CN' ? resetCameraZhUrl : resetCameraEnUrl;\n modal.error({\n title: t('hooks.useUserMedia.devicePermission', { deviceType }),\n width: 500,\n content: (\n <div>\n <Typography.Paragraph></Typography.Paragraph>\n <Typography.Paragraph>\n <Typography.Text strong type=\"danger\">\n {t('hooks.useUserMedia.deniedPermission', { deviceType, featureName })}\n </Typography.Text>\n </Typography.Paragraph>\n <Typography.Paragraph>{t('hooks.useUserMedia.reopenPermissionGuide', { deviceType })}</Typography.Paragraph>\n <img\n src={media.video ? resetCameraUrl : resetMicrophoneUrl}\n alt=\"microphone-permission\"\n style={{ width: 380 }}\n />\n </div>\n ),\n });\n };\n const recordStream = async () => {\n let stream: MediaStream;\n try {\n const options = media;\n if (media.audio) {\n if (exactAudioDeviceIdRef.current) {\n if (media.audio === true) {\n options.audio = { deviceId: { exact: exactAudioDeviceIdRef.current } };\n } else {\n options.audio = { deviceId: { exact: exactAudioDeviceIdRef.current }, ...media.audio };\n }\n }\n }\n stream = await navigator.mediaDevices.getUserMedia(options);\n setMediaStream(stream);\n onStartRecording?.(stream);\n\n const recorder = new MediaRecorder(stream);\n recorder.ondataavailable = (event) => {\n if (event.data.size > 0) {\n onStreamChunk?.(event.data);\n }\n };\n if (streamSliceMs) {\n recorder.start(streamSliceMs);\n } else {\n recorder.start();\n }\n setMediaRecorder(recorder);\n setIsRecording(true);\n\n // Capture PCM data if enabled\n if (options.audio && onPcmStreamChunkRef.current) {\n try {\n const ctx = new AudioContext(pcmAudioOptions?.audioContext);\n pcmSampleRateRef.current = ctx.sampleRate;\n // Safari might need resume\n if (ctx.state === 'suspended') {\n await ctx.resume();\n }\n const sourceNode = ctx.createMediaStreamSource(stream);\n let node: AudioWorkletNode | undefined;\n\n closePcmRef.current = () => {\n node?.port.close();\n node?.disconnect();\n sourceNode.disconnect();\n ctx.close().catch(() => {\n // Ignore errors\n });\n };\n\n const setupWorklet = async () => {\n try {\n // Load the worklet module\n await ctx.audioWorklet.addModule(generatePcmCaptureProcessorModule());\n node = new AudioWorkletNode(ctx, 'pcm-capture', pcmAudioOptions?.workletOptions);\n node.port.onmessage = (e: MessageEvent) => {\n if (e.data?.type === 'pcm') {\n const channels = e.data.channels as Float32Array[];\n pcmStreamSlicerRef.current.push(channels);\n }\n };\n sourceNode.connect(node);\n } catch (err) {\n fallbackScriptProcessor({ ctx, sourceNode, streamSlicer: pcmStreamSlicerRef.current });\n }\n };\n\n if ('audioWorklet' in ctx) {\n setupWorklet();\n } else {\n fallbackScriptProcessor({ ctx, sourceNode, streamSlicer: pcmStreamSlicerRef.current });\n }\n } catch (e) {\n console.error('setup pcm worklet failed', e);\n }\n }\n return recorder;\n } catch (error) {\n console.error(error);\n if (error instanceof Error && error.name === 'NotAllowedError') {\n showDeniedPopup();\n notification.error({ message: t('hooks.useUserMedia.deniedPermission', { deviceType, featureName }) });\n throw new Error(t('hooks.useUserMedia.deniedPermission', { deviceType, featureName }));\n }\n notification.error({ message: t('hooks.useUserMedia.notSupport') });\n throw new Error(t('hooks.useUserMedia.notSupport'));\n }\n };\n\n const startRecording = useRefFunction(async () => {\n if (disabled) {\n throw new Error(t('hooks.useUserMedia.disabledWarning'));\n }\n if (isRecording) {\n throw new Error(t('hooks.useUserMedia.isRecordingNow'));\n }\n if (!navigator.mediaDevices?.getUserMedia || !navigator.permissions?.query) {\n notification.error({\n message: t('hooks.useUserMedia.notSupport'),\n });\n throw new Error(t('hooks.useUserMedia.notSupport'));\n }\n try {\n const result = await window.navigator.permissions.query({\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n name: media.video ? ('camera' as any) : ('microphone' as any),\n });\n if (result.state === 'denied') {\n showDeniedPopup();\n notification.error({ message: t('hooks.useUserMedia.deniedPermission', { deviceType, featureName }) });\n throw new Error(t('hooks.useUserMedia.deniedPermission', { deviceType, featureName }));\n } else {\n if (result.state === 'prompt') {\n const requestMicrophoneUrl = lang === 'zh-CN' ? requestMicrophoneZhUrl : requestMicrophoneEnUrl;\n const requestCameraUrl = lang === 'zh-CN' ? requestCameraZhUrl : requestCameraEnUrl;\n return new Promise<MediaRecorder>((resolve, reject) => {\n modal.warning({\n title: t('hooks.useUserMedia.devicePermission', { deviceType }),\n content: (\n <div>\n <Typography.Paragraph></Typography.Paragraph>\n <Typography.Paragraph>\n <Typography.Text strong>{t('hooks.useUserMedia.requestTip1', { deviceType })}</Typography.Text>\n </Typography.Paragraph>\n <Typography.Paragraph>{t('hooks.useUserMedia.requestTip2', { featureName })}</Typography.Paragraph>\n <div>\n <img\n src={media.video ? requestCameraUrl : requestMicrophoneUrl}\n alt=\"microphone-permission\"\n style={{ width: 380 }}\n />\n </div>\n </div>\n ),\n onOk: () => {\n try {\n recordStream()\n .then((recorder) => {\n resolve(recorder);\n })\n .catch((error) => {\n reject(error);\n });\n } catch (error) {\n console.error(error);\n reject(error);\n }\n },\n width: 500,\n });\n });\n } else {\n return await recordStream();\n }\n }\n } catch (error) {\n console.error(error);\n throw error;\n }\n });\n\n const stopRecording = useRefFunction(() => {\n mediaRecorder?.stop();\n mediaStream?.getTracks().forEach((t) => t.stop());\n setMediaStream(undefined);\n setIsRecording(false);\n isSpeakingRef.current = false;\n cancelAnimationFrame(rafRef.current);\n stopSoundListeningRef.current?.();\n closePcmRef.current?.();\n onStopRecording?.();\n });\n\n // Wait for sound. If keep silent for a while, show a modal to let user reselect audio device\n const waitForSound = useRefFunction((mediaStream: MediaStream) => {\n const ctx = new AudioContext();\n const source = ctx.createMediaStreamSource(mediaStream);\n const analyser = ctx.createAnalyser();\n analyser.fftSize = 2048;\n source.connect(analyser);\n soundDetectStart.current = Date.now();\n const data = new Uint8Array(analyser.fftSize);\n const cancelDetect = () => {\n cancelAnimationFrame(rafRef.current);\n rafRef.current = 0;\n stopSoundListeningRef.current?.();\n };\n const loop = () => {\n analyser.getByteTimeDomainData(data);\n // Calculate RMS\n let sum = 0;\n for (const value of data) {\n const v = (value - 128) / 128;\n sum += v * v;\n }\n const rms = Math.sqrt(sum / data.length); // 0~1\n if (rms > silenceVolumeThresholdRef.current) {\n if (!isSpeakingRef.current) {\n isSpeakingRef.current = true;\n cancelDetect();\n return;\n }\n } else {\n if (Date.now() > soundDetectStart.current + silenceDetectDurationRef.current) {\n navigator.mediaDevices.enumerateDevices().then((devices) => {\n const audioInputs = devices.filter((d) => d.kind === 'audioinput');\n modalRef.current.confirm({\n title: t('hooks.useUserMedia.soundDetectTitle'),\n content: (\n <EasyConfigProvider {...contextRef.current}>\n <SaveAudioDeviceForm\n devices={audioInputs}\n mediaStream={mediaStream}\n onDeviceChange={(deviceId) => (exactAudioDeviceIdRef.current = deviceId)}\n />\n </EasyConfigProvider>\n ),\n width: 500,\n onOk: () => {\n if (exactAudioDeviceIdRef.current) {\n stopRecording();\n setTimeout(() => {\n startRecording();\n });\n }\n },\n onCancel: () => {\n cancelDetect();\n },\n });\n });\n\n cancelDetect();\n return;\n }\n }\n rafRef.current = requestAnimationFrame(loop);\n };\n loop();\n\n stopSoundListeningRef.current = () => {\n analyser.disconnect();\n source.disconnect();\n ctx.close().catch(() => {\n // Ignore errors\n });\n stopSoundListeningRef.current = undefined;\n };\n });\n\n // Component destroy\n useEffect(() => {\n return stopRecording;\n }, []);\n\n // Stop recording when disabled has been changed\n useEffect(() => {\n if (disabled && isRecording) {\n stopRecording();\n }\n }, [disabled, isRecording]);\n\n // Update PCM stream slicer time slice when input sample rate changes\n useEffect(() => {\n if (streamSliceMs && pcmStreamSlicerRef.current.timeSlice !== streamSliceMs) {\n pcmStreamSlicerRef.current.timeSlice = streamSliceMs;\n }\n }, [streamSliceMs]);\n\n // Detect sound activity (only for audio or media with audio)\n useEffect(() => {\n if (includeAudio && mediaStream && !isSpeakingRef.current) {\n try {\n waitForSound(mediaStream);\n } catch (e) {\n console.warn('Audio volume detecting failed:', e);\n }\n }\n return () => {\n stopSoundListeningRef.current?.();\n };\n }, [includeAudio, mediaStream, t]);\n\n useEffect(() => {\n requestMicrophoneEnUrlPromise.then((module) => {\n setRequestMicrophoneEnUrl(module.default);\n });\n requestMicrophoneZhUrlPromise.then((module) => {\n setRequestMicrophoneZhUrl(module.default);\n });\n resetMicrophoneEnUrlPromise.then((module) => {\n setResetMicrophoneEnUrl(module.default);\n });\n resetMicrophoneZhUrlPromise.then((module) => {\n setResetMicrophoneZhUrl(module.default);\n });\n requestCameraEnUrlPromise.then((module) => {\n setRequestCameraEnUrl(module.default);\n });\n requestCameraZhUrlPromise.then((module) => {\n setRequestCameraZhUrl(module.default);\n });\n resetCameraEnUrlPromise.then((module) => {\n setResetCameraEnUrl(module.default);\n });\n resetCameraZhUrlPromise.then((module) => {\n setResetCameraZhUrl(module.default);\n });\n }, []);\n\n return {\n isRecording,\n startRecording,\n stopRecording,\n };\n};\n\nexport interface UseUserMediaResult {\n /**\n * - **EN** Whether the media stream is currently being recorded\n * - **CN** 是否正在录制媒体流\n */\n isRecording: boolean;\n /**\n * - **EN** Start recording the media stream\n * - **CN** 开始录制媒体流\n */\n startRecording: () => Promise<MediaRecorder>;\n /**\n * - **EN** Stop recording the media stream\n * - **CN** 停止录制媒体流\n */\n stopRecording: () => void;\n /**\n * - **EN** Get the media stream being recorded, returns the stream if recording, otherwise returns\n * `undefined`\n * - **CN** 获取正在录制的媒体流,如果正在录制则返回该流,否则返回 `undefined`\n */\n mediaStream?: MediaStream;\n}\n\nfunction SaveAudioDeviceForm(props: {\n devices: MediaDeviceInfo[];\n mediaStream: MediaStream;\n onDeviceChange: (deviceId: string) => void;\n}) {\n const { devices, mediaStream, onDeviceChange } = props;\n const [form] = Form.useForm();\n const t = useT();\n const { lang } = useContext(ReactEasyContext);\n const [saveAudioDeviceEnUrl1, setSaveAudioDeviceEnUrl1] = useState<string>();\n const [saveAudioDeviceEnUrl2, setSaveAudioDeviceEnUrl2] = useState<string>();\n const [saveAudioDeviceZhUrl1, setSaveAudioDeviceZhUrl1] = useState<string>();\n const [saveAudioDeviceZhUrl2, setSaveAudioDeviceZhUrl2] = useState<string>();\n const [saveDefaultAudioDevicePermanently, setSaveDefaultAudioDevicePermanently] = useState(false);\n const audioInputs = useMemo(() => devices.filter((d) => d.kind === 'audioinput'), [devices]);\n const [selectedDeviceId, setSelectedDeviceId] = useState<string | undefined>(\n () => mediaStream.getAudioTracks()[0]?.getSettings()?.deviceId ?? audioInputs[0]?.deviceId\n );\n\n const openDataImageInNewTab = useRefFunction((dataUrl: string | undefined) => {\n if (!dataUrl) return;\n const [meta, b64] = dataUrl.split(',');\n const mime = meta.match(/data:(.*);base64/)?.[1] || 'image/png';\n const binary = atob(b64);\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i++) bytes[i] = binary.charCodeAt(i);\n const blob = new Blob([bytes], { type: mime });\n const url = URL.createObjectURL(blob);\n window.open(url);\n });\n\n useEffect(() => {\n saveAudioDeviceEnUrlPromise1.then((module) => {\n setSaveAudioDeviceEnUrl1(module.default);\n });\n saveAudioDeviceEnUrlPromise2.then((module) => {\n setSaveAudioDeviceEnUrl2(module.default);\n });\n saveAudioDeviceZhUrlPromise1.then((module) => {\n setSaveAudioDeviceZhUrl1(module.default);\n });\n saveAudioDeviceZhUrlPromise2.then((module) => {\n setSaveAudioDeviceZhUrl2(module.default);\n });\n }, []);\n\n return (\n <Form layout=\"vertical\" form={form}>\n <Typography.Paragraph></Typography.Paragraph>\n <Typography.Paragraph>\n <Typography.Text>{t('hooks.useUserMedia.soundDetectDescription')}</Typography.Text>\n </Typography.Paragraph>\n <Form.Item label={t('hooks.useUserMedia.chooseMicrophoneDevice')}>\n <Select\n options={audioInputs.map((input) => ({\n label: input.label,\n value: input.deviceId,\n }))}\n defaultValue={selectedDeviceId}\n onChange={(id) => {\n setSelectedDeviceId(id);\n onDeviceChange(id);\n }}\n />\n </Form.Item>\n <Form.Item style={{ marginBottom: 0 }}>\n <Checkbox onChange={(e) => setSaveDefaultAudioDevicePermanently(e.target.checked)}>\n {t('hooks.useUserMedia.rememberDefaultAudioDevice')}\n </Checkbox>\n </Form.Item>\n {saveDefaultAudioDevicePermanently && (\n <div>\n <Typography.Paragraph>\n <Typography.Text>{t('hooks.useUserMedia.rememberDefaultAudioDeviceTip')}</Typography.Text>\n </Typography.Paragraph>\n <Flex gap={8} align=\"flex-start\">\n <div style={{ flex: 1, minWidth: 0 }}>\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n openDataImageInNewTab(lang === 'zh-CN' ? saveAudioDeviceZhUrl1 : saveAudioDeviceEnUrl1);\n }}\n >\n <img\n src={lang === 'zh-CN' ? saveAudioDeviceZhUrl1 : saveAudioDeviceEnUrl1}\n alt=\"the first step to save default audio device\"\n style={{ width: '100%', height: 'auto' }}\n />\n </a>\n </div>\n <div style={{ flex: 1, minWidth: 0 }}>\n <a\n href=\"#\"\n onClick={(e) => {\n e.preventDefault();\n openDataImageInNewTab(lang === 'zh-CN' ? saveAudioDeviceZhUrl2 : saveAudioDeviceEnUrl2);\n }}\n >\n <img\n src={lang === 'zh-CN' ? saveAudioDeviceZhUrl2 : saveAudioDeviceEnUrl2}\n alt=\"the second step to save default audio device\"\n style={{ width: '100%', height: 'auto' }}\n />\n </a>\n </div>\n </Flex>\n </div>\n )}\n </Form>\n );\n}\n\nfunction generatePcmCaptureProcessorModule() {\n const workletCode = `\nclass PcmCaptureProcessor extends AudioWorkletProcessor {\n process(inputs, outputs, parameters) {\n const channelsIn = inputs[0];\n if (channelsIn && channelsIn[0]) {\n const channels = channelsIn.map((ch) => {\n const copy = new Float32Array(ch.length);\n copy.set(ch);\n return copy;\n });\n this.port.postMessage({ type: 'pcm', channels }, channels.map(ch => ch.buffer));\n }\n return true;\n }\n}\nregisterProcessor('pcm-capture', PcmCaptureProcessor);\n`;\n\n // Create a Blob from the worklet code and return its URL\n const blob = new Blob([workletCode], { type: 'application/javascript' });\n const blobUrl = URL.createObjectURL(blob);\n return blobUrl;\n}\n\nfunction fallbackScriptProcessor(options: {\n ctx: AudioContext;\n sourceNode: MediaStreamAudioSourceNode;\n streamSlicer: StreamTimeSlicerClass;\n}) {\n const { ctx, sourceNode, streamSlicer } = options;\n const bufferSize = 128;\n const processor = ctx.createScriptProcessor(bufferSize, 1, 1);\n processor.onaudioprocess = (ev) => {\n const channels = [];\n for (let i = 0; i < ev.inputBuffer.numberOfChannels; i++) {\n const input = ev.inputBuffer.getChannelData(i);\n const copy = new Float32Array(input.length);\n copy.set(input);\n channels.push(copy);\n }\n streamSlicer.push(channels);\n };\n sourceNode.connect(processor);\n // 可不输出:processor.connect(ctx!.destination);不连接 destination 在部分浏览器会被自动 GC,可连到 destination 或 gain(0)\n const gain = ctx.createGain();\n gain.gain.value = 0;\n processor.connect(gain).connect(ctx.destination);\n}\n\nexport default useUserMedia;\n"],"mappings":"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"}
|
package/es/locales/index.d.ts
CHANGED
|
@@ -28,6 +28,23 @@ export declare const resources: {
|
|
|
28
28
|
readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
|
|
29
29
|
readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
|
|
30
30
|
readonly 'validation.rule.buildRule.token.number': "number";
|
|
31
|
+
readonly 'hooks.useUserMedia.microphone': "Microphone";
|
|
32
|
+
readonly 'hooks.useUserMedia.camera': "Camera";
|
|
33
|
+
readonly 'hooks.featureName.microphone': "Speech";
|
|
34
|
+
readonly 'hooks.featureName.camera': "Video";
|
|
35
|
+
readonly 'hooks.useUserMedia.disabledWarning': "User media is disabled";
|
|
36
|
+
readonly 'hooks.useUserMedia.isRecordingNow': "User media is currently recording and cannot be operated on";
|
|
37
|
+
readonly 'hooks.useUserMedia.devicePermission': "{{deviceType}} Permission";
|
|
38
|
+
readonly 'hooks.useUserMedia.requestTip1': "The browser is requesting {{deviceType}} permission. Please click the \"Allow\" button in the pop-up window that appears later.";
|
|
39
|
+
readonly 'hooks.useUserMedia.requestTip2': "Please do not click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.";
|
|
40
|
+
readonly 'hooks.useUserMedia.deniedPermission': "You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!";
|
|
41
|
+
readonly 'hooks.useUserMedia.reopenPermissionGuide': "Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.";
|
|
42
|
+
readonly 'hooks.useUserMedia.notSupport': "Current browser does not support audio recording";
|
|
43
|
+
readonly 'hooks.useUserMedia.soundDetectTitle': "Sound Issue Detected";
|
|
44
|
+
readonly 'hooks.useUserMedia.soundDetectDescription': "No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.";
|
|
45
|
+
readonly 'hooks.useUserMedia.chooseMicrophoneDevice': "Please reselect the audio device";
|
|
46
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDevice': "Remember default device?";
|
|
47
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': "Please follow these steps to save the default audio device for automatic selection next time.";
|
|
31
48
|
};
|
|
32
49
|
};
|
|
33
50
|
readonly 'en-US': {
|
|
@@ -56,6 +73,23 @@ export declare const resources: {
|
|
|
56
73
|
readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
|
|
57
74
|
readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
|
|
58
75
|
readonly 'validation.rule.buildRule.token.number': "number";
|
|
76
|
+
readonly 'hooks.useUserMedia.microphone': "Microphone";
|
|
77
|
+
readonly 'hooks.useUserMedia.camera': "Camera";
|
|
78
|
+
readonly 'hooks.featureName.microphone': "Speech";
|
|
79
|
+
readonly 'hooks.featureName.camera': "Video";
|
|
80
|
+
readonly 'hooks.useUserMedia.disabledWarning': "User media is disabled";
|
|
81
|
+
readonly 'hooks.useUserMedia.isRecordingNow': "User media is currently recording and cannot be operated on";
|
|
82
|
+
readonly 'hooks.useUserMedia.devicePermission': "{{deviceType}} Permission";
|
|
83
|
+
readonly 'hooks.useUserMedia.requestTip1': "The browser is requesting {{deviceType}} permission. Please click the \"Allow\" button in the pop-up window that appears later.";
|
|
84
|
+
readonly 'hooks.useUserMedia.requestTip2': "Please do not click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.";
|
|
85
|
+
readonly 'hooks.useUserMedia.deniedPermission': "You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!";
|
|
86
|
+
readonly 'hooks.useUserMedia.reopenPermissionGuide': "Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.";
|
|
87
|
+
readonly 'hooks.useUserMedia.notSupport': "Current browser does not support audio recording";
|
|
88
|
+
readonly 'hooks.useUserMedia.soundDetectTitle': "Sound Issue Detected";
|
|
89
|
+
readonly 'hooks.useUserMedia.soundDetectDescription': "No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.";
|
|
90
|
+
readonly 'hooks.useUserMedia.chooseMicrophoneDevice': "Please reselect the audio device";
|
|
91
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDevice': "Remember default device?";
|
|
92
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': "Please follow these steps to save the default audio device for automatic selection next time.";
|
|
59
93
|
};
|
|
60
94
|
};
|
|
61
95
|
readonly 'zh-CN': {
|
|
@@ -84,6 +118,23 @@ export declare const resources: {
|
|
|
84
118
|
readonly 'validation.rule.buildRule.token.lowerLetter': "小写字母";
|
|
85
119
|
readonly 'validation.rule.buildRule.token.upperLetter': "大写字母";
|
|
86
120
|
readonly 'validation.rule.buildRule.token.number': "数字";
|
|
121
|
+
readonly 'hooks.useUserMedia.microphone': "麦克风";
|
|
122
|
+
readonly 'hooks.useUserMedia.camera': "摄像头";
|
|
123
|
+
readonly 'hooks.featureName.microphone': "语音";
|
|
124
|
+
readonly 'hooks.featureName.camera': "视频";
|
|
125
|
+
readonly 'hooks.useUserMedia.disabledWarning': "用户媒体已禁用";
|
|
126
|
+
readonly 'hooks.useUserMedia.isRecordingNow': "用户媒体正在录制,不可操作";
|
|
127
|
+
readonly 'hooks.useUserMedia.devicePermission': "{{deviceType}}权限";
|
|
128
|
+
readonly 'hooks.useUserMedia.requestTip1': "浏览器正在申请{{deviceType}}权限,请在稍后弹出的弹窗中点击“访问该网站时允许”按钮。";
|
|
129
|
+
readonly 'hooks.useUserMedia.requestTip2': "请不要点击“不允许”按钮,否则将无法使用{{featureName}}相关功能。";
|
|
130
|
+
readonly 'hooks.useUserMedia.deniedPermission': "您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!";
|
|
131
|
+
readonly 'hooks.useUserMedia.reopenPermissionGuide': "请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。";
|
|
132
|
+
readonly 'hooks.useUserMedia.notSupport': "当前浏览器不支持录制语音";
|
|
133
|
+
readonly 'hooks.useUserMedia.soundDetectTitle': "声音检测到问题";
|
|
134
|
+
readonly 'hooks.useUserMedia.soundDetectDescription': "似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。";
|
|
135
|
+
readonly 'hooks.useUserMedia.chooseMicrophoneDevice': "请重新选择音频设备";
|
|
136
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDevice': "记住默认设备?";
|
|
137
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': "请按照以下步骤保存默认音频设备,以便下次使用时自动选择。";
|
|
87
138
|
};
|
|
88
139
|
};
|
|
89
140
|
};
|
|
@@ -23,5 +23,22 @@ declare const enUS: {
|
|
|
23
23
|
readonly 'validation.rule.buildRule.token.lowerLetter': "lowercase letter";
|
|
24
24
|
readonly 'validation.rule.buildRule.token.upperLetter': "uppercase letter";
|
|
25
25
|
readonly 'validation.rule.buildRule.token.number': "number";
|
|
26
|
+
readonly 'hooks.useUserMedia.microphone': "Microphone";
|
|
27
|
+
readonly 'hooks.useUserMedia.camera': "Camera";
|
|
28
|
+
readonly 'hooks.featureName.microphone': "Speech";
|
|
29
|
+
readonly 'hooks.featureName.camera': "Video";
|
|
30
|
+
readonly 'hooks.useUserMedia.disabledWarning': "User media is disabled";
|
|
31
|
+
readonly 'hooks.useUserMedia.isRecordingNow': "User media is currently recording and cannot be operated on";
|
|
32
|
+
readonly 'hooks.useUserMedia.devicePermission': "{{deviceType}} Permission";
|
|
33
|
+
readonly 'hooks.useUserMedia.requestTip1': "The browser is requesting {{deviceType}} permission. Please click the \"Allow\" button in the pop-up window that appears later.";
|
|
34
|
+
readonly 'hooks.useUserMedia.requestTip2': "Please do not click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.";
|
|
35
|
+
readonly 'hooks.useUserMedia.deniedPermission': "You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!";
|
|
36
|
+
readonly 'hooks.useUserMedia.reopenPermissionGuide': "Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.";
|
|
37
|
+
readonly 'hooks.useUserMedia.notSupport': "Current browser does not support audio recording";
|
|
38
|
+
readonly 'hooks.useUserMedia.soundDetectTitle': "Sound Issue Detected";
|
|
39
|
+
readonly 'hooks.useUserMedia.soundDetectDescription': "No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.";
|
|
40
|
+
readonly 'hooks.useUserMedia.chooseMicrophoneDevice': "Please reselect the audio device";
|
|
41
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDevice': "Remember default device?";
|
|
42
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': "Please follow these steps to save the default audio device for automatic selection next time.";
|
|
26
43
|
};
|
|
27
44
|
export default enUS;
|
|
@@ -22,7 +22,24 @@ var enUS = {
|
|
|
22
22
|
'validation.rule.buildRule.token.letter': 'letter',
|
|
23
23
|
'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',
|
|
24
24
|
'validation.rule.buildRule.token.upperLetter': 'uppercase letter',
|
|
25
|
-
'validation.rule.buildRule.token.number': 'number'
|
|
25
|
+
'validation.rule.buildRule.token.number': 'number',
|
|
26
|
+
'hooks.useUserMedia.microphone': 'Microphone',
|
|
27
|
+
'hooks.useUserMedia.camera': 'Camera',
|
|
28
|
+
'hooks.featureName.microphone': 'Speech',
|
|
29
|
+
'hooks.featureName.camera': 'Video',
|
|
30
|
+
'hooks.useUserMedia.disabledWarning': 'User media is disabled',
|
|
31
|
+
'hooks.useUserMedia.isRecordingNow': 'User media is currently recording and cannot be operated on',
|
|
32
|
+
'hooks.useUserMedia.devicePermission': '{{deviceType}} Permission',
|
|
33
|
+
'hooks.useUserMedia.requestTip1': 'The browser is requesting {{deviceType}} permission. Please click the "Allow" button in the pop-up window that appears later.',
|
|
34
|
+
'hooks.useUserMedia.requestTip2': 'Please do not click the "Deny" button, otherwise you will not be able to use the {{featureName}} related feature.',
|
|
35
|
+
'hooks.useUserMedia.deniedPermission': 'You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!',
|
|
36
|
+
'hooks.useUserMedia.reopenPermissionGuide': 'Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.',
|
|
37
|
+
'hooks.useUserMedia.notSupport': 'Current browser does not support audio recording',
|
|
38
|
+
'hooks.useUserMedia.soundDetectTitle': 'Sound Issue Detected',
|
|
39
|
+
'hooks.useUserMedia.soundDetectDescription': 'No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.',
|
|
40
|
+
'hooks.useUserMedia.chooseMicrophoneDevice': 'Please reselect the audio device',
|
|
41
|
+
'hooks.useUserMedia.rememberDefaultAudioDevice': 'Remember default device?',
|
|
42
|
+
'hooks.useUserMedia.rememberDefaultAudioDeviceTip': 'Please follow these steps to save the default audio device for automatic selection next time.'
|
|
26
43
|
};
|
|
27
44
|
export default enUS;
|
|
28
45
|
//# sourceMappingURL=en-US.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["enUS"],"sources":["../../../src/locales/langs/en-US.ts"],"sourcesContent":["const enUS = {\n 'components.EditableText.requiredMsg': 'Please enter text content',\n 'components.EditableText.placeholder': 'Please input text content, press Enter or click the OK button',\n 'components.EditableText.edit': 'Edit',\n 'components.EditableText.save': 'Save',\n 'components.EditableText.cancel': 'Cancel',\n 'validation.rule.number.message': 'Please enter a number',\n 'validation.rule.floatNumber.message': 'Please enter a number',\n 'validation.rule.email.message': 'Please enter the correct email address',\n 'validation.rule.ip.message': 'Please enter the correct ip address',\n 'validation.rule.chineseMobile.message': 'Please enter the correct mobile number',\n 'validation.rule.password.message': '8-16 digit password, at least two of numbers, letters, and symbols',\n 'validation.rule.buildRule.includeMandatory': 'At least one field in the include option is true',\n 'validation.rule.buildRule.messageFormat': 'Allow {{content}}',\n 'validation.rule.buildRule.startsWithFormat': `, start with {{prefix}}`,\n 'validation.rule.buildRule.minLength': `, at least {{min}} characters`,\n 'validation.rule.buildRule.maxLength': `, up to {{max}} characters`,\n 'validation.rule.buildRule.rangeLength': `, {{min}}~{{max}} characters`,\n 'validation.rule.buildRule.token.separator': ', ',\n 'validation.rule.buildRule.token.chinese': 'Chinese characters',\n 'validation.rule.buildRule.token.chinesePunctuation': 'Chinese punctuation',\n 'validation.rule.buildRule.token.letter': 'letter',\n 'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',\n 'validation.rule.buildRule.token.upperLetter': 'uppercase letter',\n 'validation.rule.buildRule.token.number': 'number',\n} as const;\nexport default enUS;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,2BAA2B;EAClE,qCAAqC,EAAE,+DAA+D;EACtG,8BAA8B,EAAE,MAAM;EACtC,8BAA8B,EAAE,MAAM;EACtC,gCAAgC,EAAE,QAAQ;EAC1C,gCAAgC,EAAE,uBAAuB;EACzD,qCAAqC,EAAE,uBAAuB;EAC9D,+BAA+B,EAAE,wCAAwC;EACzE,4BAA4B,EAAE,qCAAqC;EACnE,uCAAuC,EAAE,wCAAwC;EACjF,kCAAkC,EAAE,oEAAoE;EACxG,4CAA4C,EAAE,kDAAkD;EAChG,yCAAyC,EAAE,mBAAmB;EAC9D,4CAA4C,2BAA2B;EACvE,qCAAqC,iCAAiC;EACtE,qCAAqC,8BAA8B;EACnE,uCAAuC,gCAAgC;EACvE,2CAA2C,EAAE,IAAI;EACjD,yCAAyC,EAAE,oBAAoB;EAC/D,oDAAoD,EAAE,qBAAqB;EAC3E,wCAAwC,EAAE,QAAQ;EAClD,6CAA6C,EAAE,kBAAkB;EACjE,6CAA6C,EAAE,kBAAkB;EACjE,wCAAwC,EAAE;
|
|
1
|
+
{"version":3,"names":["enUS"],"sources":["../../../src/locales/langs/en-US.ts"],"sourcesContent":["const enUS = {\n 'components.EditableText.requiredMsg': 'Please enter text content',\n 'components.EditableText.placeholder': 'Please input text content, press Enter or click the OK button',\n 'components.EditableText.edit': 'Edit',\n 'components.EditableText.save': 'Save',\n 'components.EditableText.cancel': 'Cancel',\n 'validation.rule.number.message': 'Please enter a number',\n 'validation.rule.floatNumber.message': 'Please enter a number',\n 'validation.rule.email.message': 'Please enter the correct email address',\n 'validation.rule.ip.message': 'Please enter the correct ip address',\n 'validation.rule.chineseMobile.message': 'Please enter the correct mobile number',\n 'validation.rule.password.message': '8-16 digit password, at least two of numbers, letters, and symbols',\n 'validation.rule.buildRule.includeMandatory': 'At least one field in the include option is true',\n 'validation.rule.buildRule.messageFormat': 'Allow {{content}}',\n 'validation.rule.buildRule.startsWithFormat': `, start with {{prefix}}`,\n 'validation.rule.buildRule.minLength': `, at least {{min}} characters`,\n 'validation.rule.buildRule.maxLength': `, up to {{max}} characters`,\n 'validation.rule.buildRule.rangeLength': `, {{min}}~{{max}} characters`,\n 'validation.rule.buildRule.token.separator': ', ',\n 'validation.rule.buildRule.token.chinese': 'Chinese characters',\n 'validation.rule.buildRule.token.chinesePunctuation': 'Chinese punctuation',\n 'validation.rule.buildRule.token.letter': 'letter',\n 'validation.rule.buildRule.token.lowerLetter': 'lowercase letter',\n 'validation.rule.buildRule.token.upperLetter': 'uppercase letter',\n 'validation.rule.buildRule.token.number': 'number',\n 'hooks.useUserMedia.microphone': 'Microphone',\n 'hooks.useUserMedia.camera': 'Camera',\n 'hooks.featureName.microphone': 'Speech',\n 'hooks.featureName.camera': 'Video',\n 'hooks.useUserMedia.disabledWarning': 'User media is disabled',\n 'hooks.useUserMedia.isRecordingNow': 'User media is currently recording and cannot be operated on',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}} Permission',\n 'hooks.useUserMedia.requestTip1':\n 'The browser is requesting {{deviceType}} permission. Please click the \"Allow\" button in the pop-up window that appears later.',\n 'hooks.useUserMedia.requestTip2':\n 'Please do not click the \"Deny\" button, otherwise you will not be able to use the {{featureName}} related feature.',\n 'hooks.useUserMedia.deniedPermission':\n 'You have denied the {{deviceType}} permission, which will prevent you from using the {{featureName}} related feature!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n 'Please click the site settings icon in the address bar, and then follow these steps to reopen {{deviceType}} permission.',\n 'hooks.useUserMedia.notSupport': 'Current browser does not support audio recording',\n 'hooks.useUserMedia.soundDetectTitle': 'Sound Issue Detected',\n 'hooks.useUserMedia.soundDetectDescription':\n 'No sound seems to be detected. Please check if the microphone is working properly or if the correct audio input device is selected.',\n 'hooks.useUserMedia.chooseMicrophoneDevice': 'Please reselect the audio device',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': 'Remember default device?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip':\n 'Please follow these steps to save the default audio device for automatic selection next time.',\n} as const;\nexport default enUS;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,2BAA2B;EAClE,qCAAqC,EAAE,+DAA+D;EACtG,8BAA8B,EAAE,MAAM;EACtC,8BAA8B,EAAE,MAAM;EACtC,gCAAgC,EAAE,QAAQ;EAC1C,gCAAgC,EAAE,uBAAuB;EACzD,qCAAqC,EAAE,uBAAuB;EAC9D,+BAA+B,EAAE,wCAAwC;EACzE,4BAA4B,EAAE,qCAAqC;EACnE,uCAAuC,EAAE,wCAAwC;EACjF,kCAAkC,EAAE,oEAAoE;EACxG,4CAA4C,EAAE,kDAAkD;EAChG,yCAAyC,EAAE,mBAAmB;EAC9D,4CAA4C,2BAA2B;EACvE,qCAAqC,iCAAiC;EACtE,qCAAqC,8BAA8B;EACnE,uCAAuC,gCAAgC;EACvE,2CAA2C,EAAE,IAAI;EACjD,yCAAyC,EAAE,oBAAoB;EAC/D,oDAAoD,EAAE,qBAAqB;EAC3E,wCAAwC,EAAE,QAAQ;EAClD,6CAA6C,EAAE,kBAAkB;EACjE,6CAA6C,EAAE,kBAAkB;EACjE,wCAAwC,EAAE,QAAQ;EAClD,+BAA+B,EAAE,YAAY;EAC7C,2BAA2B,EAAE,QAAQ;EACrC,8BAA8B,EAAE,QAAQ;EACxC,0BAA0B,EAAE,OAAO;EACnC,oCAAoC,EAAE,wBAAwB;EAC9D,mCAAmC,EAAE,6DAA6D;EAClG,qCAAqC,EAAE,2BAA2B;EAClE,gCAAgC,EAC9B,+HAA+H;EACjI,gCAAgC,EAC9B,mHAAmH;EACrH,qCAAqC,EACnC,uHAAuH;EACzH,0CAA0C,EACxC,0HAA0H;EAC5H,+BAA+B,EAAE,kDAAkD;EACnF,qCAAqC,EAAE,sBAAsB;EAC7D,2CAA2C,EACzC,qIAAqI;EACvI,2CAA2C,EAAE,kCAAkC;EAC/E,+CAA+C,EAAE,0BAA0B;EAC3E,kDAAkD,EAChD;AACJ,CAAU;AACV,eAAeA,IAAI"}
|
|
@@ -23,5 +23,22 @@ declare const zhCN: {
|
|
|
23
23
|
readonly 'validation.rule.buildRule.token.lowerLetter': "小写字母";
|
|
24
24
|
readonly 'validation.rule.buildRule.token.upperLetter': "大写字母";
|
|
25
25
|
readonly 'validation.rule.buildRule.token.number': "数字";
|
|
26
|
+
readonly 'hooks.useUserMedia.microphone': "麦克风";
|
|
27
|
+
readonly 'hooks.useUserMedia.camera': "摄像头";
|
|
28
|
+
readonly 'hooks.featureName.microphone': "语音";
|
|
29
|
+
readonly 'hooks.featureName.camera': "视频";
|
|
30
|
+
readonly 'hooks.useUserMedia.disabledWarning': "用户媒体已禁用";
|
|
31
|
+
readonly 'hooks.useUserMedia.isRecordingNow': "用户媒体正在录制,不可操作";
|
|
32
|
+
readonly 'hooks.useUserMedia.devicePermission': "{{deviceType}}权限";
|
|
33
|
+
readonly 'hooks.useUserMedia.requestTip1': "浏览器正在申请{{deviceType}}权限,请在稍后弹出的弹窗中点击“访问该网站时允许”按钮。";
|
|
34
|
+
readonly 'hooks.useUserMedia.requestTip2': "请不要点击“不允许”按钮,否则将无法使用{{featureName}}相关功能。";
|
|
35
|
+
readonly 'hooks.useUserMedia.deniedPermission': "您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!";
|
|
36
|
+
readonly 'hooks.useUserMedia.reopenPermissionGuide': "请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。";
|
|
37
|
+
readonly 'hooks.useUserMedia.notSupport': "当前浏览器不支持录制语音";
|
|
38
|
+
readonly 'hooks.useUserMedia.soundDetectTitle': "声音检测到问题";
|
|
39
|
+
readonly 'hooks.useUserMedia.soundDetectDescription': "似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。";
|
|
40
|
+
readonly 'hooks.useUserMedia.chooseMicrophoneDevice': "请重新选择音频设备";
|
|
41
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDevice': "记住默认设备?";
|
|
42
|
+
readonly 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': "请按照以下步骤保存默认音频设备,以便下次使用时自动选择。";
|
|
26
43
|
};
|
|
27
44
|
export default zhCN;
|
|
@@ -22,7 +22,24 @@ var zhCN = {
|
|
|
22
22
|
'validation.rule.buildRule.token.letter': '字母',
|
|
23
23
|
'validation.rule.buildRule.token.lowerLetter': '小写字母',
|
|
24
24
|
'validation.rule.buildRule.token.upperLetter': '大写字母',
|
|
25
|
-
'validation.rule.buildRule.token.number': '数字'
|
|
25
|
+
'validation.rule.buildRule.token.number': '数字',
|
|
26
|
+
'hooks.useUserMedia.microphone': '麦克风',
|
|
27
|
+
'hooks.useUserMedia.camera': '摄像头',
|
|
28
|
+
'hooks.featureName.microphone': '语音',
|
|
29
|
+
'hooks.featureName.camera': '视频',
|
|
30
|
+
'hooks.useUserMedia.disabledWarning': '用户媒体已禁用',
|
|
31
|
+
'hooks.useUserMedia.isRecordingNow': '用户媒体正在录制,不可操作',
|
|
32
|
+
'hooks.useUserMedia.devicePermission': '{{deviceType}}权限',
|
|
33
|
+
'hooks.useUserMedia.requestTip1': '浏览器正在申请{{deviceType}}权限,请在稍后弹出的弹窗中点击“访问该网站时允许”按钮。',
|
|
34
|
+
'hooks.useUserMedia.requestTip2': '请不要点击“不允许”按钮,否则将无法使用{{featureName}}相关功能。',
|
|
35
|
+
'hooks.useUserMedia.deniedPermission': '您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!',
|
|
36
|
+
'hooks.useUserMedia.reopenPermissionGuide': '请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。',
|
|
37
|
+
'hooks.useUserMedia.notSupport': '当前浏览器不支持录制语音',
|
|
38
|
+
'hooks.useUserMedia.soundDetectTitle': '声音检测到问题',
|
|
39
|
+
'hooks.useUserMedia.soundDetectDescription': '似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。',
|
|
40
|
+
'hooks.useUserMedia.chooseMicrophoneDevice': '请重新选择音频设备',
|
|
41
|
+
'hooks.useUserMedia.rememberDefaultAudioDevice': '记住默认设备?',
|
|
42
|
+
'hooks.useUserMedia.rememberDefaultAudioDeviceTip': '请按照以下步骤保存默认音频设备,以便下次使用时自动选择。'
|
|
26
43
|
};
|
|
27
44
|
export default zhCN;
|
|
28
45
|
//# sourceMappingURL=zh-CN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["zhCN"],"sources":["../../../src/locales/langs/zh-CN.ts"],"sourcesContent":["const zhCN = {\n 'components.EditableText.requiredMsg': '请输入文本内容',\n 'components.EditableText.placeholder': '输入文本内容,按回车或点击确定按钮',\n 'components.EditableText.edit': '编辑',\n 'components.EditableText.save': '保存',\n 'components.EditableText.cancel': '取消',\n 'validation.rule.number.message': '请输入数字',\n 'validation.rule.floatNumber.message': '请输入数字',\n 'validation.rule.email.message': '请输入正确的邮箱地址',\n 'validation.rule.ip.message': '请输入正确的ip地址',\n 'validation.rule.chineseMobile.message': '请输入正确的手机号',\n 'validation.rule.password.message': '8-16位密码,数字、字母、符号至少包含两种',\n 'validation.rule.buildRule.includeMandatory': 'include选项中至少有一个字段为true',\n 'validation.rule.buildRule.messageFormat': '支持{{content}}',\n 'validation.rule.buildRule.startsWithFormat': `,以{{prefix}}开头`,\n 'validation.rule.buildRule.minLength': `,至少{{min}}字符`,\n 'validation.rule.buildRule.maxLength': `,{{max}}字符以内`,\n 'validation.rule.buildRule.rangeLength': `,{{min}}~{{max}}个字符`,\n 'validation.rule.buildRule.token.separator': '、',\n 'validation.rule.buildRule.token.chinese': '汉字',\n 'validation.rule.buildRule.token.chinesePunctuation': '中文标点',\n 'validation.rule.buildRule.token.letter': '字母',\n 'validation.rule.buildRule.token.lowerLetter': '小写字母',\n 'validation.rule.buildRule.token.upperLetter': '大写字母',\n 'validation.rule.buildRule.token.number': '数字',\n} as const;\nexport default zhCN;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,SAAS;EAChD,qCAAqC,EAAE,mBAAmB;EAC1D,8BAA8B,EAAE,IAAI;EACpC,8BAA8B,EAAE,IAAI;EACpC,gCAAgC,EAAE,IAAI;EACtC,gCAAgC,EAAE,OAAO;EACzC,qCAAqC,EAAE,OAAO;EAC9C,+BAA+B,EAAE,YAAY;EAC7C,4BAA4B,EAAE,YAAY;EAC1C,uCAAuC,EAAE,WAAW;EACpD,kCAAkC,EAAE,wBAAwB;EAC5D,4CAA4C,EAAE,wBAAwB;EACtE,yCAAyC,EAAE,eAAe;EAC1D,4CAA4C,sCAAkB;EAC9D,qCAAqC,yCAAgB;EACrD,qCAAqC,yCAAgB;EACrD,uCAAuC,2CAAuB;EAC9D,2CAA2C,EAAE,GAAG;EAChD,yCAAyC,EAAE,IAAI;EAC/C,oDAAoD,EAAE,MAAM;EAC5D,wCAAwC,EAAE,IAAI;EAC9C,6CAA6C,EAAE,MAAM;EACrD,6CAA6C,EAAE,MAAM;EACrD,wCAAwC,EAAE;
|
|
1
|
+
{"version":3,"names":["zhCN"],"sources":["../../../src/locales/langs/zh-CN.ts"],"sourcesContent":["const zhCN = {\n 'components.EditableText.requiredMsg': '请输入文本内容',\n 'components.EditableText.placeholder': '输入文本内容,按回车或点击确定按钮',\n 'components.EditableText.edit': '编辑',\n 'components.EditableText.save': '保存',\n 'components.EditableText.cancel': '取消',\n 'validation.rule.number.message': '请输入数字',\n 'validation.rule.floatNumber.message': '请输入数字',\n 'validation.rule.email.message': '请输入正确的邮箱地址',\n 'validation.rule.ip.message': '请输入正确的ip地址',\n 'validation.rule.chineseMobile.message': '请输入正确的手机号',\n 'validation.rule.password.message': '8-16位密码,数字、字母、符号至少包含两种',\n 'validation.rule.buildRule.includeMandatory': 'include选项中至少有一个字段为true',\n 'validation.rule.buildRule.messageFormat': '支持{{content}}',\n 'validation.rule.buildRule.startsWithFormat': `,以{{prefix}}开头`,\n 'validation.rule.buildRule.minLength': `,至少{{min}}字符`,\n 'validation.rule.buildRule.maxLength': `,{{max}}字符以内`,\n 'validation.rule.buildRule.rangeLength': `,{{min}}~{{max}}个字符`,\n 'validation.rule.buildRule.token.separator': '、',\n 'validation.rule.buildRule.token.chinese': '汉字',\n 'validation.rule.buildRule.token.chinesePunctuation': '中文标点',\n 'validation.rule.buildRule.token.letter': '字母',\n 'validation.rule.buildRule.token.lowerLetter': '小写字母',\n 'validation.rule.buildRule.token.upperLetter': '大写字母',\n 'validation.rule.buildRule.token.number': '数字',\n 'hooks.useUserMedia.microphone': '麦克风',\n 'hooks.useUserMedia.camera': '摄像头',\n 'hooks.featureName.microphone': '语音',\n 'hooks.featureName.camera': '视频',\n 'hooks.useUserMedia.disabledWarning': '用户媒体已禁用',\n 'hooks.useUserMedia.isRecordingNow': '用户媒体正在录制,不可操作',\n 'hooks.useUserMedia.devicePermission': '{{deviceType}}权限',\n 'hooks.useUserMedia.requestTip1':\n '浏览器正在申请{{deviceType}}权限,请在稍后弹出的弹窗中点击“访问该网站时允许”按钮。',\n 'hooks.useUserMedia.requestTip2': '请不要点击“不允许”按钮,否则将无法使用{{featureName}}相关功能。',\n 'hooks.useUserMedia.deniedPermission': '您已经拒绝了{{deviceType}}权限,将无法使用{{featureName}}相关功能!',\n 'hooks.useUserMedia.reopenPermissionGuide':\n '请点击地址栏的站点设置图标,然后按照以下步骤重新打开{{deviceType}}权限。',\n 'hooks.useUserMedia.notSupport': '当前浏览器不支持录制语音',\n 'hooks.useUserMedia.soundDetectTitle': '声音检测到问题',\n 'hooks.useUserMedia.soundDetectDescription':\n '似乎没有检测到声音,请检查麦克风是否正常工作,或者可能没有选择正确的音频输入设备。',\n 'hooks.useUserMedia.chooseMicrophoneDevice': '请重新选择音频设备',\n 'hooks.useUserMedia.rememberDefaultAudioDevice': '记住默认设备?',\n 'hooks.useUserMedia.rememberDefaultAudioDeviceTip': '请按照以下步骤保存默认音频设备,以便下次使用时自动选择。',\n} as const;\nexport default zhCN;\n"],"mappings":"AAAA,IAAMA,IAAI,GAAG;EACX,qCAAqC,EAAE,SAAS;EAChD,qCAAqC,EAAE,mBAAmB;EAC1D,8BAA8B,EAAE,IAAI;EACpC,8BAA8B,EAAE,IAAI;EACpC,gCAAgC,EAAE,IAAI;EACtC,gCAAgC,EAAE,OAAO;EACzC,qCAAqC,EAAE,OAAO;EAC9C,+BAA+B,EAAE,YAAY;EAC7C,4BAA4B,EAAE,YAAY;EAC1C,uCAAuC,EAAE,WAAW;EACpD,kCAAkC,EAAE,wBAAwB;EAC5D,4CAA4C,EAAE,wBAAwB;EACtE,yCAAyC,EAAE,eAAe;EAC1D,4CAA4C,sCAAkB;EAC9D,qCAAqC,yCAAgB;EACrD,qCAAqC,yCAAgB;EACrD,uCAAuC,2CAAuB;EAC9D,2CAA2C,EAAE,GAAG;EAChD,yCAAyC,EAAE,IAAI;EAC/C,oDAAoD,EAAE,MAAM;EAC5D,wCAAwC,EAAE,IAAI;EAC9C,6CAA6C,EAAE,MAAM;EACrD,6CAA6C,EAAE,MAAM;EACrD,wCAAwC,EAAE,IAAI;EAC9C,+BAA+B,EAAE,KAAK;EACtC,2BAA2B,EAAE,KAAK;EAClC,8BAA8B,EAAE,IAAI;EACpC,0BAA0B,EAAE,IAAI;EAChC,oCAAoC,EAAE,SAAS;EAC/C,mCAAmC,EAAE,eAAe;EACpD,qCAAqC,EAAE,kBAAkB;EACzD,gCAAgC,EAC9B,mDAAmD;EACrD,gCAAgC,EAAE,0CAA0C;EAC5E,qCAAqC,EAAE,kDAAkD;EACzF,0CAA0C,EACxC,6CAA6C;EAC/C,+BAA+B,EAAE,cAAc;EAC/C,qCAAqC,EAAE,SAAS;EAChD,2CAA2C,EACzC,2CAA2C;EAC7C,2CAA2C,EAAE,WAAW;EACxD,+CAA+C,EAAE,SAAS;EAC1D,kDAAkD,EAAE;AACtD,CAAU;AACV,eAAeA,IAAI"}
|
package/es/utils/math.js
CHANGED
|
@@ -9,9 +9,57 @@
|
|
|
9
9
|
* @returns The generated random number | 生成的随机数
|
|
10
10
|
*/
|
|
11
11
|
export function random(min, max) {
|
|
12
|
-
var
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
var _process$versions, _nodeCrypto, _nodeCrypto2;
|
|
13
|
+
if (!Number.isFinite(min) || !Number.isFinite(max)) {
|
|
14
|
+
throw new TypeError('min and max must be finite numbers');
|
|
15
|
+
}
|
|
16
|
+
if (Math.floor(min) !== min || Math.floor(max) !== max) {
|
|
17
|
+
throw new TypeError('min and max must be integers');
|
|
18
|
+
}
|
|
19
|
+
if (min > max) {
|
|
20
|
+
var _ref = [max, min];
|
|
21
|
+
min = _ref[0];
|
|
22
|
+
max = _ref[1];
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Try to require Node.js crypto
|
|
26
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
27
|
+
var nodeCrypto;
|
|
28
|
+
if (typeof process !== 'undefined' && (_process$versions = process.versions) !== null && _process$versions !== void 0 && _process$versions.node) {
|
|
29
|
+
try {
|
|
30
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
31
|
+
nodeCrypto = require('crypto');
|
|
32
|
+
} catch (_unused) {
|
|
33
|
+
// ignore
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// 1. Node.js crypto.randomInt
|
|
38
|
+
if ((_nodeCrypto = nodeCrypto) !== null && _nodeCrypto !== void 0 && _nodeCrypto.randomInt) {
|
|
39
|
+
return nodeCrypto.randomInt(min, max + 1);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
// 2. Web Crypto (Browsers or Node 19+ webcrypto)
|
|
43
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
44
|
+
var webCrypto = globalThis.crypto || ((_nodeCrypto2 = nodeCrypto) === null || _nodeCrypto2 === void 0 ? void 0 : _nodeCrypto2.webcrypto);
|
|
45
|
+
if (webCrypto !== null && webCrypto !== void 0 && webCrypto.getRandomValues) {
|
|
46
|
+
var range = max - min + 1;
|
|
47
|
+
if (range <= 0) return min;
|
|
48
|
+
|
|
49
|
+
// 使用拒绝采样避免 (2^32 % range) 造成的微小偏差
|
|
50
|
+
var maxUint32 = 0xffffffff;
|
|
51
|
+
var limit = Math.floor((maxUint32 + 1) / range) * range;
|
|
52
|
+
var arr = new Uint32Array(1);
|
|
53
|
+
var v;
|
|
54
|
+
do {
|
|
55
|
+
webCrypto.getRandomValues(arr);
|
|
56
|
+
v = arr[0];
|
|
57
|
+
} while (v >= limit);
|
|
58
|
+
return min + v % range;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// 3. Fallback, should not be used for cryptographic purposes
|
|
62
|
+
var _math = Math;
|
|
63
|
+
return Math.floor(_math.random() * (max - min + 1)) + min;
|
|
16
64
|
}
|
|
17
65
|
//# sourceMappingURL=math.js.map
|
package/es/utils/math.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["random","min","max","
|
|
1
|
+
{"version":3,"names":["random","min","max","_process$versions","_nodeCrypto","_nodeCrypto2","Number","isFinite","TypeError","Math","floor","_ref","nodeCrypto","process","versions","node","require","_unused","randomInt","webCrypto","globalThis","crypto","webcrypto","getRandomValues","range","maxUint32","limit","arr","Uint32Array","v","_math"],"sources":["../../src/utils/math.ts"],"sourcesContent":["/**\n * **EN**: Generate a random number within a specified range (inclusive on both ends)\n *\n * **CN**: 生成指定范围(两端包含)内的随机数\n *\n * @param min The minimum value (inclusive) | 最小值(包含)\n * @param max The maximum value (inclusive) | 最大值(包含)\n *\n * @returns The generated random number | 生成的随机数\n */\nexport function random(min: number, max: number): number {\n if (!Number.isFinite(min) || !Number.isFinite(max)) {\n throw new TypeError('min and max must be finite numbers');\n }\n if (Math.floor(min) !== min || Math.floor(max) !== max) {\n throw new TypeError('min and max must be integers');\n }\n if (min > max) {\n [min, max] = [max, min];\n }\n\n // Try to require Node.js crypto\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n let nodeCrypto: any;\n if (typeof process !== 'undefined' && process.versions?.node) {\n try {\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n nodeCrypto = require('crypto');\n } catch {\n // ignore\n }\n }\n\n // 1. Node.js crypto.randomInt\n if (nodeCrypto?.randomInt) {\n return nodeCrypto.randomInt(min, max + 1);\n }\n\n // 2. Web Crypto (Browsers or Node 19+ webcrypto)\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const webCrypto: Crypto | undefined = (globalThis as any).crypto || nodeCrypto?.webcrypto;\n\n if (webCrypto?.getRandomValues) {\n const range = max - min + 1;\n if (range <= 0) return min;\n\n // 使用拒绝采样避免 (2^32 % range) 造成的微小偏差\n const maxUint32 = 0xffffffff;\n const limit = Math.floor((maxUint32 + 1) / range) * range;\n const arr = new Uint32Array(1);\n let v: number;\n do {\n webCrypto.getRandomValues(arr);\n v = arr[0];\n } while (v >= limit);\n return min + (v % range);\n }\n\n // 3. Fallback, should not be used for cryptographic purposes\n const _math = Math;\n return Math.floor(_math.random() * (max - min + 1)) + min;\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,SAASA,MAAMA,CAACC,GAAW,EAAEC,GAAW,EAAU;EAAA,IAAAC,iBAAA,EAAAC,WAAA,EAAAC,YAAA;EACvD,IAAI,CAACC,MAAM,CAACC,QAAQ,CAACN,GAAG,CAAC,IAAI,CAACK,MAAM,CAACC,QAAQ,CAACL,GAAG,CAAC,EAAE;IAClD,MAAM,IAAIM,SAAS,CAAC,oCAAoC,CAAC;EAC3D;EACA,IAAIC,IAAI,CAACC,KAAK,CAACT,GAAG,CAAC,KAAKA,GAAG,IAAIQ,IAAI,CAACC,KAAK,CAACR,GAAG,CAAC,KAAKA,GAAG,EAAE;IACtD,MAAM,IAAIM,SAAS,CAAC,8BAA8B,CAAC;EACrD;EACA,IAAIP,GAAG,GAAGC,GAAG,EAAE;IAAA,IAAAS,IAAA,GACA,CAACT,GAAG,EAAED,GAAG,CAAC;IAAtBA,GAAG,GAAAU,IAAA;IAAET,GAAG,GAAAS,IAAA;EACX;;EAEA;EACA;EACA,IAAIC,UAAe;EACnB,IAAI,OAAOC,OAAO,KAAK,WAAW,KAAAV,iBAAA,GAAIU,OAAO,CAACC,QAAQ,cAAAX,iBAAA,eAAhBA,iBAAA,CAAkBY,IAAI,EAAE;IAC5D,IAAI;MACF;MACAH,UAAU,GAAGI,OAAO,CAAC,QAAQ,CAAC;IAChC,CAAC,CAAC,OAAAC,OAAA,EAAM;MACN;IAAA;EAEJ;;EAEA;EACA,KAAAb,WAAA,GAAIQ,UAAU,cAAAR,WAAA,eAAVA,WAAA,CAAYc,SAAS,EAAE;IACzB,OAAON,UAAU,CAACM,SAAS,CAACjB,GAAG,EAAEC,GAAG,GAAG,CAAC,CAAC;EAC3C;;EAEA;EACA;EACA,IAAMiB,SAA6B,GAAIC,UAAU,CAASC,MAAM,MAAAhB,YAAA,GAAIO,UAAU,cAAAP,YAAA,uBAAVA,YAAA,CAAYiB,SAAS;EAEzF,IAAIH,SAAS,aAATA,SAAS,eAATA,SAAS,CAAEI,eAAe,EAAE;IAC9B,IAAMC,KAAK,GAAGtB,GAAG,GAAGD,GAAG,GAAG,CAAC;IAC3B,IAAIuB,KAAK,IAAI,CAAC,EAAE,OAAOvB,GAAG;;IAE1B;IACA,IAAMwB,SAAS,GAAG,UAAU;IAC5B,IAAMC,KAAK,GAAGjB,IAAI,CAACC,KAAK,CAAC,CAACe,SAAS,GAAG,CAAC,IAAID,KAAK,CAAC,GAAGA,KAAK;IACzD,IAAMG,GAAG,GAAG,IAAIC,WAAW,CAAC,CAAC,CAAC;IAC9B,IAAIC,CAAS;IACb,GAAG;MACDV,SAAS,CAACI,eAAe,CAACI,GAAG,CAAC;MAC9BE,CAAC,GAAGF,GAAG,CAAC,CAAC,CAAC;IACZ,CAAC,QAAQE,CAAC,IAAIH,KAAK;IACnB,OAAOzB,GAAG,GAAI4B,CAAC,GAAGL,KAAM;EAC1B;;EAEA;EACA,IAAMM,KAAK,GAAGrB,IAAI;EAClB,OAAOA,IAAI,CAACC,KAAK,CAACoB,KAAK,CAAC9B,MAAM,CAAC,CAAC,IAAIE,GAAG,GAAGD,GAAG,GAAG,CAAC,CAAC,CAAC,GAAGA,GAAG;AAC3D"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* - **EN:** A stream time slicer for splitting audio streams into fixed time segments
|
|
3
|
+
* - **CN:** 一个数据流时间切片器,用于将音频流分成固定时间段
|
|
4
|
+
*/
|
|
5
|
+
export declare class StreamTimeSlicerClass implements StreamTimeSlicer {
|
|
6
|
+
timeSlice: number;
|
|
7
|
+
private readonly onSlice;
|
|
8
|
+
private channelChunks;
|
|
9
|
+
private startTs;
|
|
10
|
+
constructor(options: StreamTimeSlicerOptions);
|
|
11
|
+
private now;
|
|
12
|
+
private shouldEmit;
|
|
13
|
+
private emit;
|
|
14
|
+
push(channels: Float32Array[]): void;
|
|
15
|
+
flush(): void;
|
|
16
|
+
reset(): void;
|
|
17
|
+
duration(): number;
|
|
18
|
+
}
|
|
19
|
+
export interface StreamTimeSlicerOptions {
|
|
20
|
+
/**
|
|
21
|
+
* - **EN:** Duration of each slice (ms)
|
|
22
|
+
* - **CN:** 分片时长(ms)
|
|
23
|
+
*/
|
|
24
|
+
timeSlice: number;
|
|
25
|
+
/**
|
|
26
|
+
* - **EN:** Callback when a slice is reached
|
|
27
|
+
* - **CN:** 达到分片时回调
|
|
28
|
+
*
|
|
29
|
+
* @param channels - Multi-channel data, each channel is a Float32Array | 多通道数据,每个通道是一个
|
|
30
|
+
* Float32Array
|
|
31
|
+
* @param sliceDuration - Duration of the slice (ms) | 分片时长(ms)
|
|
32
|
+
*/
|
|
33
|
+
onSlice: (channels: Float32Array[], sliceDuration: number) => void;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* - **EN:** stream time slicer
|
|
37
|
+
* - **CN:** 数据流时间切片器
|
|
38
|
+
*/
|
|
39
|
+
export interface StreamTimeSlicer {
|
|
40
|
+
/**
|
|
41
|
+
* - **EN:** Duration of each slice (ms)
|
|
42
|
+
* - **CN:** 每个分片的时长(毫秒)
|
|
43
|
+
*/
|
|
44
|
+
timeSlice: number;
|
|
45
|
+
/**
|
|
46
|
+
* - **EN:** Push a frame (multi-channel data obtained from the same callback)
|
|
47
|
+
* - **CN:** 推入一帧(同一次回调得到的多通道)
|
|
48
|
+
*
|
|
49
|
+
* @param channels - Multi-channel data, each channel is a Float32Array | 多通道数据,每个通道是一个
|
|
50
|
+
* Float32Array
|
|
51
|
+
*/
|
|
52
|
+
push: (channels: Float32Array[]) => void;
|
|
53
|
+
/**
|
|
54
|
+
* - **EN:** Force output the current accumulation (output even if not enough timeSlice)
|
|
55
|
+
* - **CN:** 强制输出当前累积(不足 timeSlice 也输出)
|
|
56
|
+
*/
|
|
57
|
+
flush: () => void;
|
|
58
|
+
/**
|
|
59
|
+
* - **EN:** Clear the cache (do not output)
|
|
60
|
+
* - **CN:** 清空缓存(不输出)
|
|
61
|
+
*/
|
|
62
|
+
reset: () => void;
|
|
63
|
+
/**
|
|
64
|
+
* - **EN:** Get the accumulated duration from start to current (ms)
|
|
65
|
+
* - **CN:** 获取从开始到当前已累计的时长(ms)
|
|
66
|
+
*/
|
|
67
|
+
duration: () => number;
|
|
68
|
+
}
|