quickvo-sdk-js 0.9.3 → 0.9.5

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.
@@ -0,0 +1,44 @@
1
+ export declare class NetworkQualityTester {
2
+ targetUrls: string[];
3
+ results: any[];
4
+ constructor(targetUrls?: string[]);
5
+ testAll(): Promise<{
6
+ overallSuccess: boolean;
7
+ message: string;
8
+ totalTests?: undefined;
9
+ successfulTests?: undefined;
10
+ averageDownloadSpeed?: undefined;
11
+ averageResponseTime?: undefined;
12
+ totalDataTransferred?: undefined;
13
+ detailedResults?: undefined;
14
+ } | {
15
+ overallSuccess: boolean;
16
+ totalTests: number;
17
+ successfulTests: number;
18
+ averageDownloadSpeed: string;
19
+ averageResponseTime: string;
20
+ totalDataTransferred: string;
21
+ detailedResults: any[];
22
+ message?: undefined;
23
+ }>;
24
+ testUrl(url: string): Promise<void>;
25
+ analyzeResults(): {
26
+ overallSuccess: boolean;
27
+ message: string;
28
+ totalTests?: undefined;
29
+ successfulTests?: undefined;
30
+ averageDownloadSpeed?: undefined;
31
+ averageResponseTime?: undefined;
32
+ totalDataTransferred?: undefined;
33
+ detailedResults?: undefined;
34
+ } | {
35
+ overallSuccess: boolean;
36
+ totalTests: number;
37
+ successfulTests: number;
38
+ averageDownloadSpeed: string;
39
+ averageResponseTime: string;
40
+ totalDataTransferred: string;
41
+ detailedResults: any[];
42
+ message?: undefined;
43
+ };
44
+ }
@@ -3,6 +3,8 @@ import { QuickOptions, Report_Log_Type, RoomOptions, RoomUser, UserTrack } from
3
3
  import { CallsWebSocket, CallsWebSocketOptions } from './CallsWebSocket';
4
4
  import { K_mediaType } from '../enums/mediaType';
5
5
  import { PrTaskQueue } from 'pr-task-queue';
6
+ import { NetworkQualityTester } from './NetworkQualityTester';
7
+ import { StreamRecorder } from './StreamRecorder';
6
8
  type Options = QuickOptions & RoomOptions & CallsWebSocketOptions & {
7
9
  earlyId?: string;
8
10
  };
@@ -12,15 +14,19 @@ export declare class RoomBase {
12
14
  prohibitNotify: boolean;
13
15
  isEarly: boolean;
14
16
  isInRoom: boolean;
15
- taskQueue: PrTaskQueue<"closeTrack" | "renegotiate" | "subscribe" | "publish" | "joinRoom" | "createWs" | "createSession" | "ice" | "createTrack">;
17
+ taskQueue: PrTaskQueue<"publish" | "subscribe" | "renegotiate" | "closeTrack" | "joinRoom" | "createWs" | "createSession" | "ice" | "createTrack">;
16
18
  roomState: K_roomState;
17
19
  createAt: number;
18
20
  cwsIns: CallsWebSocket;
19
21
  peerIns: RTCPeerConnection;
20
22
  transceiverMap: Map<"microphoneCamera_audio" | "microphoneCamera_video" | "screenSharing_video" | "screenSharing_audio", RTCRtpTransceiver>;
23
+ sendChannel: RTCDataChannel;
24
+ receiveChannel: RTCDataChannel;
21
25
  userMap: Map<string, RoomUser>;
22
26
  setLocalStreamActiveMap: Map<K_mediaType, Boolean>;
23
27
  phoneyStreams: Map<K_mediaType, MediaStream>;
28
+ recorder: StreamRecorder;
29
+ networkQualityTester: NetworkQualityTester;
24
30
  mediaDevicesErrInfo: {
25
31
  microphoneCamera_audio: string;
26
32
  microphoneCamera_video: string;
@@ -32,7 +38,7 @@ export declare class RoomBase {
32
38
  * reportLogs
33
39
  */
34
40
  reportLogs: (_type: Report_Log_Type, describe?: string) => void;
35
- initPhoneyStreams: (audioContext: AudioContext) => void;
41
+ initPhoneyStreams: (audioContext: AudioContext, mediaTypes?: K_mediaType[]) => void;
36
42
  getPhoneyStreams: (mediaType: K_mediaType) => MediaStream;
37
43
  /**
38
44
  * getRoomInfo
@@ -79,6 +85,10 @@ export declare class RoomBase {
79
85
  * getUserMediaKey
80
86
  */
81
87
  getUserMediaKey: (userId: string, mediaType: string) => string;
88
+ /**
89
+ * getCallAction
90
+ */
91
+ getCallAction: (tracks: UserTrack[]) => Promise<number>;
82
92
  /**
83
93
  * getCallActionMap
84
94
  */
@@ -89,13 +99,18 @@ export declare class RoomBase {
89
99
  screenSharing_audio: boolean;
90
100
  };
91
101
  /**
92
- * getAverageVolume
102
+ * getBanBehaviorMap
93
103
  */
94
- getAverageVolume: (analyser: AnalyserNode, dataArray: Uint8Array) => number;
104
+ getBanBehaviorMap: (num?: number) => {
105
+ microphoneCamera_audio: boolean;
106
+ microphoneCamera_video: boolean;
107
+ screenSharing_video: boolean;
108
+ screenSharing_audio: boolean;
109
+ };
95
110
  /**
96
- * getCallAction
111
+ * getAverageVolume
97
112
  */
98
- getCallAction: (tracks: UserTrack[]) => Promise<number>;
113
+ getAverageVolume: (analyser: AnalyserNode, dataArray: Uint8Array) => number;
99
114
  /**
100
115
  * getTrackNamesFormTracks
101
116
  * @param tracks
@@ -102,6 +102,21 @@ export declare class RoomCalls extends RoomPeer {
102
102
  * @example quickvo.inactiveTracks(['microphoneCamera_audio'], false)
103
103
  */
104
104
  inactiveTracks: (mediaTypes: K_mediaType[], enabled: boolean) => Promise<boolean>;
105
+ /**
106
+ * setBanBehaviors
107
+ */
108
+ setBanBehaviors: (usersBehaviors: Array<{
109
+ id: string;
110
+ banBehaviors: { [key in K_mediaType]?: boolean; };
111
+ }>) => Promise<unknown>;
112
+ /**
113
+ * pubChannel
114
+ */
115
+ pubChannel: () => Promise<Boolean>;
116
+ /**
117
+ * subChannel
118
+ */
119
+ subChannel: (userChannels?: any[]) => Promise<Boolean>;
105
120
  debugger: () => Promise<any>;
106
121
  shutdown: () => Promise<any>;
107
122
  initHeartbeat: () => void;
@@ -1,16 +1,22 @@
1
1
  import { K_mediaType } from '../enums/mediaType';
2
2
  import { QuickOptions, Streams } from '../types';
3
- import { AudioMediaContext } from './mediaStreams/AudioMediaContext';
4
- import { VideoMediaContext } from './mediaStreams/VideoMediaContext';
3
+ import { VideoMediaContext } from './VideoMediaContext';
5
4
  import { RoomBase } from './RoomBase';
5
+ import { PrAudioStream } from 'pr-audio-stream';
6
6
  export declare class RoomMedias extends RoomBase {
7
7
  #private;
8
8
  localStreamsActionMap: Map<K_mediaType, Boolean>;
9
+ audioContext: AudioContext;
9
10
  constructor(options: QuickOptions);
11
+ initMediaPhoneyStreams: (mediaTypes?: K_mediaType[]) => void;
10
12
  /**
11
- * resume
13
+ * initLocalStreamsFilter
12
14
  */
13
- resume: () => void;
15
+ initLocalStreamsFilter: () => void;
16
+ /**
17
+ * setFilterStream
18
+ */
19
+ setLocalFilterStream: (mediaType: K_mediaType, filterStreamFunc: (old_stream: MediaStream) => Promise<MediaStream>) => void;
14
20
  /**
15
21
  * emitNotifyUpdateUsersStreams
16
22
  */
@@ -25,15 +31,15 @@ export declare class RoomMedias extends RoomBase {
25
31
  /**
26
32
  * getUserMediaStreamContext
27
33
  */
28
- getUserMediaStreamContext: (userId: string, mediaType: K_mediaType) => AudioMediaContext | VideoMediaContext | undefined;
34
+ getUserMediaStreamContext: (userId: string, mediaType: K_mediaType) => VideoMediaContext | PrAudioStream | undefined;
29
35
  /**
30
36
  * getUserAudioMediaStreamContext
31
37
  */
32
- getUserAudioMediaStreamContext: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio") => AudioMediaContext;
38
+ getUserAudioMediaStreamContext: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio") => PrAudioStream | undefined;
33
39
  /**
34
40
  * removeUserMediaStreamContext
35
41
  */
36
- removeUserMediaStreamContext: (userId: string, mediaType: K_mediaType) => void;
42
+ removeUserMediaStreamContext: (userId: string, mediaType: K_mediaType) => boolean | VideoMediaContext | undefined;
37
43
  /**
38
44
  * getUserStream
39
45
  */
@@ -58,6 +64,11 @@ export declare class RoomMedias extends RoomBase {
58
64
  * stopLocalStreams
59
65
  */
60
66
  stopLocalStreams: (mediaTypes?: K_mediaType[]) => Promise<void>;
67
+ /**
68
+ * addLocalStream
69
+ * @param mediaType
70
+ * @param stream
71
+ */
61
72
  addLocalStream: (mediaType: K_mediaType, stream: MediaStream) => void;
62
73
  /**
63
74
  * initLocalStream
@@ -66,11 +77,11 @@ export declare class RoomMedias extends RoomBase {
66
77
  /**
67
78
  * getLocalStream
68
79
  */
69
- getLocalStream: (mediaType: K_mediaType) => MediaStream | undefined;
80
+ getLocalStream: (mediaType: K_mediaType) => Promise<MediaStream | undefined>;
70
81
  /**
71
82
  * getLocalStreams
72
83
  */
73
- getLocalStreams: (mediaTypes?: K_mediaType[]) => Streams;
84
+ getLocalStreams: (mediaTypes?: K_mediaType[]) => Promise<Streams>;
74
85
  /**
75
86
  * getMediaDeviceKind
76
87
  * @param mediaDeviceKind "audioinput" | "audiooutput" | "videoinput"
@@ -15,6 +15,14 @@ export declare class RoomPeer extends RoomUsers {
15
15
  };
16
16
  constructor(options: QuickOptions);
17
17
  initPeer: () => void;
18
+ /**
19
+ * initSendChannel
20
+ */
21
+ initSendChannel: (label: string | undefined, id: number) => void;
22
+ /**
23
+ * initReceiveChannel
24
+ */
25
+ initReceiveChannel: (label: string | undefined, id: number) => void;
18
26
  /**
19
27
  * replaceSenderStream
20
28
  */
@@ -1,7 +1,6 @@
1
1
  import { K_mediaType } from '../enums/mediaType';
2
- import { QuickOptions, RoomUser, UserTrack } from '../types';
2
+ import { QuickOptions, RoomUser, UserAudioFilterOptions, UserTrack } from '../types';
3
3
  import { RoomMedias } from './RoomMedias';
4
- import { UserAudioFilterOptions } from './mediaStreams/AudioMediaContext';
5
4
  export declare class RoomUsers extends RoomMedias {
6
5
  constructor(options: QuickOptions);
7
6
  /**
@@ -15,27 +14,66 @@ export declare class RoomUsers extends RoomMedias {
15
14
  * setAudioFilter
16
15
  */
17
16
  setAudioFilter: (options?: Partial<UserAudioFilterOptions>) => Promise<void>;
17
+ /**
18
+ * setVolume
19
+ * @param userId
20
+ * @param mediaType
21
+ * @param gain 0-1
22
+ */
23
+ setVolume: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", gain: number) => void;
18
24
  /**
19
25
  * setEnhanceGain
20
26
  * @param userId
21
27
  * @param mediaType
22
28
  * @param gain 0-100
23
29
  */
24
- setEnhanceGain: (userId: string, mediaType: K_mediaType, gain: number) => Promise<void>;
30
+ setEnhanceGain: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", gain: number) => Promise<void>;
25
31
  /**
26
- * setVolume
32
+ * setSpeaker
27
33
  * @param userId
28
34
  * @param mediaType
29
35
  * @param gain 0-1
30
36
  */
31
- setVolume: (userId: string, mediaType: K_mediaType, gain: number) => void;
37
+ setSpeaker: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", gain: number) => void;
38
+ /**
39
+ * 播放音效
40
+ */
41
+ playBgs: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", buffer: AudioBuffer | null) => Promise<unknown> | undefined;
42
+ /**
43
+ * 设置音效音量
44
+ */
45
+ setBgsGain: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", gain: number) => void;
46
+ /**
47
+ * 停止音效
48
+ */
49
+ stopBgs: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio") => void;
50
+ /**
51
+ * 播放音乐
52
+ */
53
+ playBgm: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", buffer: AudioBuffer | null) => Promise<unknown> | undefined;
54
+ /**
55
+ * 设置背景音乐音量
56
+ */
57
+ setBgmGain: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", gain: number) => void;
58
+ /**
59
+ * 停止音乐
60
+ */
61
+ stopBgm: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio") => void;
62
+ /**
63
+ * 开关音效融合
64
+ */
65
+ changBgsMix: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", state: boolean) => void;
66
+ /**
67
+ * 开关音乐融合
68
+ */
69
+ changBgmMix: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio", state: boolean) => void;
32
70
  /**
33
71
  * getVolume
34
72
  * @param userId
35
73
  * @param mediaType
36
74
  * @returns volume
37
75
  */
38
- getVolume: (userId: string, mediaType: K_mediaType) => number;
76
+ getVolume: (userId: string, mediaType: "microphoneCamera_audio" | "screenSharing_audio") => number | undefined;
39
77
  /**
40
78
  * clearUsers
41
79
  */
@@ -77,14 +115,18 @@ export declare class RoomUsers extends RoomMedias {
77
115
  */
78
116
  getUsersId: () => Promise<string[]>;
79
117
  /**
80
- * getCaller
118
+ * getSelfInfo
81
119
  */
82
- getCaller: () => Promise<RoomUser>;
120
+ getSelfInfo: () => Promise<RoomUser>;
83
121
  updateIsPublished: (userId: string, isPublished?: boolean) => Promise<void>;
84
122
  /**
85
123
  * setUserUpdateStreams
86
124
  */
87
125
  setUserUpdateStreams: (userId: string, mediaType: K_mediaType, state?: boolean) => Promise<void>;
126
+ /**
127
+ * updateUserChannels
128
+ */
129
+ updateUserChannels: (userId: string, channels: any[] | undefined, merge: Boolean) => Promise<void>;
88
130
  /**
89
131
  * updateUsertracks
90
132
  */
@@ -93,6 +135,10 @@ export declare class RoomUsers extends RoomMedias {
93
135
  * updateUserCallAction
94
136
  */
95
137
  updateUserCallAction: (userId: string, callAction?: number) => Promise<void>;
138
+ /**
139
+ * updateUserBehaviors
140
+ */
141
+ updateUserBehaviors: (userId: string, banBehavior?: number) => Promise<void>;
96
142
  /**
97
143
  * updateUserNetwork
98
144
  */
@@ -0,0 +1,36 @@
1
+ export declare class StreamRecorder {
2
+ #private;
3
+ onchange: (_e: any) => void;
4
+ onDurationChange: (_e: number) => void;
5
+ constructor();
6
+ /**
7
+ * start
8
+ */
9
+ start: (fileName?: string) => Promise<void>;
10
+ /**
11
+ * pause
12
+ */
13
+ pause: () => Promise<void>;
14
+ /**
15
+ * resume
16
+ */
17
+ resume: () => Promise<void>;
18
+ /**
19
+ * stop
20
+ */
21
+ stop: () => Promise<void>;
22
+ /**
23
+ * getDuration
24
+ */
25
+ getDuration: () => number;
26
+ /**
27
+ * getInfo
28
+ */
29
+ getInfo: () => {
30
+ active: boolean;
31
+ pause: boolean;
32
+ startTime: number;
33
+ endTime: number;
34
+ duration: number;
35
+ };
36
+ }
package/dist/types.d.ts CHANGED
@@ -54,6 +54,7 @@ export interface Message extends protos.com.quick.voice.proto.ICommonReq {
54
54
  * 格式化时间戳
55
55
  */
56
56
  timeStr?: string;
57
+ sn?: number;
57
58
  }
58
59
  /**
59
60
  * 用户轨道
@@ -100,6 +101,19 @@ export interface UserTrack {
100
101
  */
101
102
  settings?: MediaTrackSettings;
102
103
  }
104
+ /**
105
+ * 数据通道
106
+ */
107
+ export interface Channel {
108
+ /**
109
+ * dataChannelName
110
+ */
111
+ dataChannelName: string;
112
+ /**
113
+ * id
114
+ */
115
+ id: number;
116
+ }
103
117
  /**
104
118
  * 事件
105
119
  */
@@ -169,6 +183,14 @@ export interface RoomUser {
169
183
  callActionMap: {
170
184
  [key in K_mediaType]: boolean;
171
185
  };
186
+ /**
187
+ * 禁止行为
188
+ */
189
+ banBehavior: number;
190
+ banBehaviorStr: string;
191
+ banBehaviorMap: {
192
+ [key in K_mediaType]: boolean;
193
+ };
172
194
  /**
173
195
  * 通话行为
174
196
  */
@@ -181,6 +203,10 @@ export interface RoomUser {
181
203
  * 加入时间
182
204
  */
183
205
  joinTime: number;
206
+ /**
207
+ * 是否为房间所有者
208
+ */
209
+ isOwner: boolean;
184
210
  /**
185
211
  * 是否为自己
186
212
  */
@@ -208,6 +234,10 @@ export interface RoomUser {
208
234
  * 用户轨道
209
235
  */
210
236
  tracks: UserTrack[];
237
+ /**
238
+ * 用户数据通道
239
+ */
240
+ channels: Channel[];
211
241
  /**
212
242
  * 是否更新了流
213
243
  */
@@ -245,4 +275,9 @@ export interface RoomOptions {
245
275
  */
246
276
  newPublishAutoSubscribe?: boolean;
247
277
  }
278
+ export interface UserAudioFilterOptions {
279
+ autoGainControl: boolean;
280
+ noiseSuppression: boolean;
281
+ echoCancellation: boolean;
282
+ }
248
283
  export type Report_Log_Type = 'ws_c_timeout' | 'webrtc_c_timeout' | 'join_room_error' | 'publish_error' | 'subscribe_error' | 'close_track_error' | 'heartbeat_e_timeout' | 'heartbeat_i_timeout' | 'quit_room_error';
package/package.json CHANGED
@@ -1,44 +1,50 @@
1
- {
2
- "name": "quickvo-sdk-js",
3
- "description": "提供快捷接入单对单、单对多、群体会议、舞台会议等音视频功能。",
4
- "version": "0.9.3",
5
- "type": "module",
6
- "files": [
7
- "dist"
8
- ],
9
- "main": "./dist/index.umd.cjs",
10
- "module": "./dist/index.js",
11
- "types": "./dist/index.d.ts",
12
- "exports": {
13
- ".": {
14
- "import": "./dist/index.js",
15
- "require": "./dist/index.umd.cjs"
16
- }
17
- },
18
- "scripts": {
19
- "build": "tsc && vite build"
20
- },
21
- "dependencies": {
22
- "pako": "^2.1.0",
23
- "pr-task-queue": "^0.4.4",
24
- "pr-tools": "^1.5.7",
25
- "pr-ws": "^0.2.5",
26
- "sdp-transform": "^2.15.0"
27
- },
28
- "devDependencies": {
29
- "protobufjs": "^7.4.0",
30
- "typescript": "^5.8.2",
31
- "vite": "^6.2.2",
32
- "vite-plugin-bundle-obfuscator": "^1.6.0",
33
- "vite-plugin-dts": "^4.5.3"
34
- },
35
- "private": false,
36
- "author": "Breathe",
37
- "keywords": [
38
- "quickvo-sdk-js"
39
- ],
40
- "repository": {
41
- "type": "git",
42
- "url": "https://github.com/Breathe97/quickvo-sdk-js"
43
- }
44
- }
1
+ {
2
+ "name": "quickvo-sdk-js",
3
+ "description": "提供快捷接入单对单、单对多、群体会议、舞台会议等音视频功能。",
4
+ "version": "0.9.5",
5
+ "type": "module",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "main": "./dist/index.umd.cjs",
10
+ "module": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.umd.cjs"
16
+ }
17
+ },
18
+ "scripts": {
19
+ "build": "tsc && vite build"
20
+ },
21
+ "dependencies": {
22
+ "@timecat/player": "1.2.0-alpha.27",
23
+ "@timecat/recorder": "1.2.0-alpha.27",
24
+ "opus-decoder": "^0.7.10",
25
+ "pako": "^2.1.0",
26
+ "pr-audio-stream": "^0.1.0",
27
+ "pr-task-queue": "^0.4.4",
28
+ "pr-tools": "^1.5.7",
29
+ "pr-ws": "^0.2.5",
30
+ "sdp-transform": "^2.15.0",
31
+ "timecatjs": "1.2.0-alpha.27",
32
+ "webm-duration-fix": "^1.0.4"
33
+ },
34
+ "devDependencies": {
35
+ "protobufjs": "^7.4.0",
36
+ "typescript": "^5.8.2",
37
+ "vite": "^6.2.2",
38
+ "vite-plugin-bundle-obfuscator": "^1.6.0",
39
+ "vite-plugin-dts": "^4.5.3"
40
+ },
41
+ "private": false,
42
+ "author": "Breathe",
43
+ "keywords": [
44
+ "quickvo-sdk-js"
45
+ ],
46
+ "repository": {
47
+ "type": "git",
48
+ "url": "https://github.com/Breathe97/quickvo-sdk-js"
49
+ }
50
+ }
@@ -1,55 +0,0 @@
1
- export interface UserAudioFilterOptions {
2
- autoGainControl: boolean;
3
- noiseSuppression: boolean;
4
- echoCancellation: boolean;
5
- }
6
- export declare class AudioMediaContext {
7
- options: UserAudioFilterOptions;
8
- kind: "audio";
9
- stream: MediaStream;
10
- inputGain: number;
11
- outputGain: number;
12
- enhanceGain: number;
13
- audio: HTMLAudioElement;
14
- audioContext: AudioContext;
15
- sourceNode: MediaStreamAudioSourceNode;
16
- inputGainNode: GainNode;
17
- analyserNode: AnalyserNode;
18
- analyserArrayData: Uint8Array;
19
- outputGainNode: GainNode;
20
- destinationNode: MediaStreamAudioDestinationNode;
21
- constructor(track: MediaStreamTrack, audioContext: AudioContext);
22
- initNodes: () => void;
23
- /**
24
- * 停止
25
- */
26
- stop: () => void;
27
- /**
28
- * 替换媒体
29
- */
30
- replaceStream: (stream: MediaStream) => void;
31
- /**
32
- * 获取数据流
33
- */
34
- getStream: () => MediaStream;
35
- /**
36
- * 静音
37
- */
38
- setMute: (state?: boolean) => void;
39
- /**
40
- * 设置麦克风增强音量
41
- */
42
- setEnhanceGain: (gain: number) => Promise<void>;
43
- /**
44
- * 设置扬声器音量
45
- */
46
- setVolumeGain: (gain: number) => void;
47
- /**
48
- * 获取输入音量
49
- */
50
- getVolume: () => number;
51
- /**
52
- * 设置音频过滤
53
- */
54
- setFilter: (options?: Partial<UserAudioFilterOptions>) => Partial<UserAudioFilterOptions>;
55
- }