@tiny-codes/react-easy 1.4.9 → 1.4.10
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 +30 -0
- package/es/hooks/useUserMedia.d.ts +11 -4
- package/es/hooks/useUserMedia.js +10 -8
- package/es/hooks/useUserMedia.js.map +1 -1
- package/es/utils/AudioPlayer.d.ts +32 -25
- package/es/utils/AudioPlayer.js +103 -79
- package/es/utils/AudioPlayer.js.map +1 -1
- package/es/utils/stream.d.ts +17 -10
- package/es/utils/stream.js +13 -5
- package/es/utils/stream.js.map +1 -1
- package/lib/hooks/useUserMedia.d.ts +11 -4
- package/lib/hooks/useUserMedia.js +9 -7
- package/lib/hooks/useUserMedia.js.map +2 -2
- package/lib/utils/AudioPlayer.d.ts +32 -25
- package/lib/utils/AudioPlayer.js +81 -60
- package/lib/utils/AudioPlayer.js.map +2 -2
- package/lib/utils/stream.d.ts +17 -10
- package/lib/utils/stream.js +9 -4
- package/lib/utils/stream.js.map +2 -2
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,36 @@
|
|
|
2
2
|
|
|
3
3
|
# Changelog
|
|
4
4
|
|
|
5
|
+
## 1.4.10
|
|
6
|
+
|
|
7
|
+
2025-9-3
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
#### `AudioPlayer`
|
|
12
|
+
|
|
13
|
+
- ✨ audio source is extended to support `ArrayBuffer`, `Uint8Array`, and `Blob` types
|
|
14
|
+
- ✨ add `seekForward` and `seekBackward` methods for seeking audio playback
|
|
15
|
+
- ✨ add `seek` method for setting the current playback time
|
|
16
|
+
|
|
17
|
+
#### `useUserMedia`
|
|
18
|
+
|
|
19
|
+
- ✨ add `streamSliceMode` and `streamSliceValue` options for controlling the slicing behavior of the media stream.
|
|
20
|
+
|
|
21
|
+
### Notable Changes
|
|
22
|
+
|
|
23
|
+
#### `AudioPlayer`
|
|
24
|
+
|
|
25
|
+
- 👀 `getVolume` method is renamed to `volume` getter
|
|
26
|
+
- 👀 `getCurrentTime` method is renamed to `currentTime` getter
|
|
27
|
+
- 👀 `getDuration` method is renamed to `duration` getter
|
|
28
|
+
- 👀 `gotoTime` method is removed
|
|
29
|
+
- 👀 `gotoPercent` method is removed
|
|
30
|
+
|
|
31
|
+
#### `useUserMedia`
|
|
32
|
+
|
|
33
|
+
- 👀 `streamSliceMs` is removed, please use `streamSliceMode` and `streamSliceValue` instead.
|
|
34
|
+
|
|
5
35
|
## 1.4.9
|
|
6
36
|
|
|
7
37
|
2025-9-2
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type StreamTimeSlicerOptions } from '../utils/stream';
|
|
1
2
|
export interface UseUserMediaProps {
|
|
2
3
|
/**
|
|
3
4
|
* - **EN:** The media constraints for the audio and video stream.
|
|
@@ -58,11 +59,17 @@ export interface UseUserMediaProps {
|
|
|
58
59
|
*/
|
|
59
60
|
disabled?: boolean;
|
|
60
61
|
/**
|
|
61
|
-
* - **EN:** The slicing
|
|
62
|
-
*
|
|
63
|
-
* - **CN:** 媒体流每个分片的切片时间段(毫秒),每个时间分片会触发一次 `onStreamChunk` 回调,默认值为 `500`。
|
|
62
|
+
* - **EN:** The slicing mode for the audio and video stream.
|
|
63
|
+
* - **CN:** 媒体流的切片模式。
|
|
64
64
|
*/
|
|
65
|
-
|
|
65
|
+
streamSliceMode?: StreamTimeSlicerOptions['sliceMode'];
|
|
66
|
+
/**
|
|
67
|
+
* - **EN:** The slicing value (milliseconds or bytes) for the audio and video stream, when
|
|
68
|
+
* `streamSliceMode` is `time`, it represents milliseconds, and when it is `size`, it represents
|
|
69
|
+
* bytes.
|
|
70
|
+
* - **CN:** 媒体流切片的切片值(毫秒或字节),当 `streamSliceMode` 为 `time` 时表示毫秒,为 `size` 时表示字节。
|
|
71
|
+
*/
|
|
72
|
+
streamSliceValue?: StreamTimeSlicerOptions['value'];
|
|
66
73
|
/**
|
|
67
74
|
* - **EN:** The silence detection threshold (0-1) for the audio stream, below which the audio is
|
|
68
75
|
* considered silent. Default is `0`.
|
package/es/hooks/useUserMedia.js
CHANGED
|
@@ -29,8 +29,9 @@ var useUserMedia = function useUserMedia(props) {
|
|
|
29
29
|
var media = props.media,
|
|
30
30
|
pcmAudioOptions = props.pcmAudioOptions,
|
|
31
31
|
disabled = props.disabled,
|
|
32
|
-
_props$
|
|
33
|
-
|
|
32
|
+
_props$streamSliceMod = props.streamSliceMode,
|
|
33
|
+
streamSliceMode = _props$streamSliceMod === void 0 ? 'time' : _props$streamSliceMod,
|
|
34
|
+
streamSliceValue = props.streamSliceValue,
|
|
34
35
|
_props$soundDetection = props.soundDetectionThreshold,
|
|
35
36
|
soundDetectionThreshold = _props$soundDetection === void 0 ? 0 : _props$soundDetection,
|
|
36
37
|
_props$soundDetection2 = props.soundDetectionTimeout,
|
|
@@ -103,7 +104,8 @@ var useUserMedia = function useUserMedia(props) {
|
|
|
103
104
|
var pcmSampleRateRef = useRef(0);
|
|
104
105
|
var onPcmStreamChunkRef = useRefValue(onPcmStreamChunk);
|
|
105
106
|
var pcmStreamSlicerRef = useRef(new StreamTimeSlicerClass({
|
|
106
|
-
|
|
107
|
+
sliceMode: streamSliceMode,
|
|
108
|
+
value: streamSliceValue || 0,
|
|
107
109
|
onSlice: function onSlice(channels) {
|
|
108
110
|
var _onPcmStreamChunkRef$;
|
|
109
111
|
(_onPcmStreamChunkRef$ = onPcmStreamChunkRef.current) === null || _onPcmStreamChunkRef$ === void 0 || _onPcmStreamChunkRef$.call(onPcmStreamChunkRef, channels, pcmSampleRateRef.current);
|
|
@@ -184,8 +186,8 @@ var useUserMedia = function useUserMedia(props) {
|
|
|
184
186
|
onStreamChunk === null || onStreamChunk === void 0 || onStreamChunk(event.data);
|
|
185
187
|
}
|
|
186
188
|
};
|
|
187
|
-
if (
|
|
188
|
-
recorder.start(
|
|
189
|
+
if (streamSliceMode === 'time' && streamSliceValue) {
|
|
190
|
+
recorder.start(streamSliceValue);
|
|
189
191
|
} else {
|
|
190
192
|
recorder.start();
|
|
191
193
|
}
|
|
@@ -541,10 +543,10 @@ var useUserMedia = function useUserMedia(props) {
|
|
|
541
543
|
|
|
542
544
|
// Update PCM stream slicer time slice when input sample rate changes
|
|
543
545
|
useEffect(function () {
|
|
544
|
-
if (
|
|
545
|
-
pcmStreamSlicerRef.current.
|
|
546
|
+
if (streamSliceValue && pcmStreamSlicerRef.current.value !== streamSliceValue) {
|
|
547
|
+
pcmStreamSlicerRef.current.value = streamSliceValue;
|
|
546
548
|
}
|
|
547
|
-
}, [
|
|
549
|
+
}, [streamSliceValue]);
|
|
548
550
|
|
|
549
551
|
// Detect sound activity (only for audio or media with audio)
|
|
550
552
|
useEffect(function () {
|
|
@@ -1 +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","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\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 import('../assets/request-microphone-en.js').then((module) => {\n setRequestMicrophoneEnUrl(module.default);\n });\n import('../assets/request-microphone-zh.js').then((module) => {\n setRequestMicrophoneZhUrl(module.default);\n });\n import('../assets/reset-microphone-en.js').then((module) => {\n setResetMicrophoneEnUrl(module.default);\n });\n import('../assets/reset-microphone-zh.js').then((module) => {\n setResetMicrophoneZhUrl(module.default);\n });\n import('../assets/request-camera-en.js').then((module) => {\n setRequestCameraEnUrl(module.default);\n });\n import('../assets/request-camera-zh.js').then((module) => {\n setRequestCameraZhUrl(module.default);\n });\n import('../assets/reset-camera-en.js').then((module) => {\n setResetCameraEnUrl(module.default);\n });\n import('../assets/reset-camera-zh.js').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 import('../assets/save-default-audio1-en.js').then((module) => {\n setSaveAudioDeviceEnUrl1(module.default);\n });\n import('../assets/save-default-audio2-en.js').then((module) => {\n setSaveAudioDeviceEnUrl2(module.default);\n });\n import('../assets/save-default-audio1-zh.js').then((module) => {\n setSaveAudioDeviceZhUrl1(module.default);\n });\n import('../assets/save-default-audio2-zh.js').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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"}
|
|
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","useUserMedia","props","_app$modal","media","pcmAudioOptions","disabled","_props$streamSliceMod","streamSliceMode","streamSliceValue","_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","sliceMode","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, type StreamTimeSlicerOptions } from '../utils/stream';\nimport useRefFunction from './useRefFunction';\nimport useRefValue from './useRefValue';\nimport useT from './useT';\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 mode for the audio and video stream.\n * - **CN:** 媒体流的切片模式。\n */\n streamSliceMode?: StreamTimeSlicerOptions['sliceMode'];\n /**\n * - **EN:** The slicing value (milliseconds or bytes) for the audio and video stream, when\n * `streamSliceMode` is `time`, it represents milliseconds, and when it is `size`, it represents\n * bytes.\n * - **CN:** 媒体流切片的切片值(毫秒或字节),当 `streamSliceMode` 为 `time` 时表示毫秒,为 `size` 时表示字节。\n */\n streamSliceValue?: StreamTimeSlicerOptions['value'];\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 streamSliceMode = 'time',\n streamSliceValue,\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 sliceMode: streamSliceMode,\n value: streamSliceValue || 0,\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 (streamSliceMode === 'time' && streamSliceValue) {\n recorder.start(streamSliceValue);\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 (streamSliceValue && pcmStreamSlicerRef.current.value !== streamSliceValue) {\n pcmStreamSlicerRef.current.value = streamSliceValue;\n }\n }, [streamSliceValue]);\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 import('../assets/request-microphone-en.js').then((module) => {\n setRequestMicrophoneEnUrl(module.default);\n });\n import('../assets/request-microphone-zh.js').then((module) => {\n setRequestMicrophoneZhUrl(module.default);\n });\n import('../assets/reset-microphone-en.js').then((module) => {\n setResetMicrophoneEnUrl(module.default);\n });\n import('../assets/reset-microphone-zh.js').then((module) => {\n setResetMicrophoneZhUrl(module.default);\n });\n import('../assets/request-camera-en.js').then((module) => {\n setRequestCameraEnUrl(module.default);\n });\n import('../assets/request-camera-zh.js').then((module) => {\n setRequestCameraZhUrl(module.default);\n });\n import('../assets/reset-camera-en.js').then((module) => {\n setResetCameraEnUrl(module.default);\n });\n import('../assets/reset-camera-zh.js').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 import('../assets/save-default-audio1-en.js').then((module) => {\n setSaveAudioDeviceEnUrl1(module.default);\n });\n import('../assets/save-default-audio2-en.js').then((module) => {\n setSaveAudioDeviceEnUrl2(module.default);\n });\n import('../assets/save-default-audio1-zh.js').then((module) => {\n setSaveAudioDeviceZhUrl1(module.default);\n });\n import('../assets/save-default-audio2-zh.js').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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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type AudioSource = string | ReadableStreamDefaultReader<Uint8Array
|
|
1
|
+
export type AudioSource = string | ReadableStreamDefaultReader<Uint8Array> | ArrayBuffer | Uint8Array | Blob;
|
|
2
2
|
export interface AudioPlayerInit {
|
|
3
3
|
/**
|
|
4
4
|
* - **EN:** Audio source (URL or streaming data)
|
|
@@ -42,7 +42,7 @@ export interface AudioPlayerInit {
|
|
|
42
42
|
*/
|
|
43
43
|
declare class AudioPlayer {
|
|
44
44
|
private audio;
|
|
45
|
-
private
|
|
45
|
+
private _volume;
|
|
46
46
|
private audioContext;
|
|
47
47
|
private gainNode;
|
|
48
48
|
private sourceNode;
|
|
@@ -61,25 +61,47 @@ declare class AudioPlayer {
|
|
|
61
61
|
* - **CN:** 检查音频是否正在播放
|
|
62
62
|
*/
|
|
63
63
|
get isPlaying(): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* - **EN:** Get current playback time (seconds)
|
|
66
|
+
* - **CN:** 获取当前播放时间(秒)
|
|
67
|
+
*/
|
|
68
|
+
get currentTime(): number;
|
|
69
|
+
/**
|
|
70
|
+
* - **EN:** Get total audio duration (seconds)
|
|
71
|
+
* - **CN:** 获取音频总时长(秒)
|
|
72
|
+
*/
|
|
73
|
+
get duration(): number;
|
|
74
|
+
/**
|
|
75
|
+
* - **EN:** Get current volume value (0-1)
|
|
76
|
+
* - **CN:** 获取当前音量值(0-1)
|
|
77
|
+
*/
|
|
78
|
+
get volume(): number;
|
|
64
79
|
/**
|
|
65
80
|
* - **EN:** Play audio. If previously paused, will resume from the pause position
|
|
66
81
|
* - **CN:** 播放音频 如果之前暂停过,将从暂停位置继续播放
|
|
67
82
|
*/
|
|
68
83
|
play(): Promise<void>;
|
|
69
84
|
/**
|
|
70
|
-
* - **EN:**
|
|
71
|
-
* - **CN:**
|
|
85
|
+
* - **EN:** Seek forward by a certain number of seconds
|
|
86
|
+
* - **CN:** 向前跳转一定秒数
|
|
72
87
|
*
|
|
73
|
-
* @param
|
|
88
|
+
* @param seconds - number of seconds to seek forward | 要向前跳转的秒数
|
|
74
89
|
*/
|
|
75
|
-
|
|
90
|
+
seekForward(seconds: number): void;
|
|
76
91
|
/**
|
|
77
|
-
* - **EN:**
|
|
78
|
-
* - **CN:**
|
|
92
|
+
* - **EN:** Seek backward by a certain number of seconds
|
|
93
|
+
* - **CN:** 向后跳转一定秒数
|
|
79
94
|
*
|
|
80
|
-
* @param
|
|
95
|
+
* @param seconds - number of seconds to seek backward | 要向后跳转的秒数
|
|
81
96
|
*/
|
|
82
|
-
|
|
97
|
+
seekBackward(seconds: number): void;
|
|
98
|
+
/**
|
|
99
|
+
* - **EN:** Set current playback time (in seconds)
|
|
100
|
+
* - **CN:** 设置当前播放时间(以秒为单位)
|
|
101
|
+
*
|
|
102
|
+
* @param time - time in seconds | 时间(秒)
|
|
103
|
+
*/
|
|
104
|
+
seek(time: number): void;
|
|
83
105
|
/**
|
|
84
106
|
* - **EN:** Pause audio playback. When played again, will continue from current position
|
|
85
107
|
* - **CN:** 暂停音频播放 再次播放时将从当前位置继续
|
|
@@ -119,21 +141,6 @@ declare class AudioPlayer {
|
|
|
119
141
|
* @param value - new volume value (0-1) | 新的音量值(0-1)
|
|
120
142
|
*/
|
|
121
143
|
setVolume(value: number): void;
|
|
122
|
-
/**
|
|
123
|
-
* - **EN:** Get current volume value (0-1)
|
|
124
|
-
* - **CN:** 获取当前音量值(0-1)
|
|
125
|
-
*/
|
|
126
|
-
getVolume(): number;
|
|
127
|
-
/**
|
|
128
|
-
* - **EN:** Get current playback time (seconds)
|
|
129
|
-
* - **CN:** 获取当前播放时间(秒)
|
|
130
|
-
*/
|
|
131
|
-
getCurrentTime(): number;
|
|
132
|
-
/**
|
|
133
|
-
* - **EN:** Get total audio duration (seconds)
|
|
134
|
-
* - **CN:** 获取音频总时长(秒)
|
|
135
|
-
*/
|
|
136
|
-
getDuration(): number;
|
|
137
144
|
/**
|
|
138
145
|
* - **EN:** Add audio event listener
|
|
139
146
|
* - **CN:** 添加音频事件监听器
|