-
Notifications
You must be signed in to change notification settings - Fork 100
/
BenzAMRRecorder.d.ts
278 lines (233 loc) · 6.07 KB
/
BenzAMRRecorder.d.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
/**
* @fileOverview 描述文件
* @author BenzLeung(https://github.com/BenzLeung)
* @date 2019/11/30
*
* 每位工程师都有保持代码优雅的义务
* each engineer has a duty to keep the code elegant
*/
export type AMREvent = null|(() => void);
export default class BenzAMRRecorder {
constructor();
private _isInit: boolean;
private _isInitRecorder: boolean;
private _recorderControl: RecorderControl;
private _samples: Float32Array;
private _rawData: Uint8Array;
private _blob: null|Blob;
private _onEnded: null|(() => void);
private _onAutoEnded: null|(() => void);
private _onPlay: null|(() => void);
private _onPause: null|(() => void);
private _onResume: null|(() => void);
private _onStop: null|(() => void);
private _onStartRecord: null|(() => void);
private _onCancelRecord: null|(() => void);
private _onFinishRecord: null|(() => void);
private _isPlaying: boolean;
private _isPaused: boolean;
private _startCtxTime: Number;
private _pauseTime: Number;
private _playEmpty: (() => void);
private _onEndCallback: (() => void);
private _runAMRWorker: Function;
private on(action: string, fn: AMREvent): void;
private throwAlreadyInitialized: (() => void);
/**
* 是否已经初始化
*/
public isInit(): boolean;
/**
* 使用浮点数据初始化
* @param array
*/
public initWithArrayBuffer(array: Float32Array): Promise<void>;
/**
* 使用 Blob 对象初始化( <input type="file">)
* @param blob
*/
public initWithBlob(blob: Blob): Promise<void>;
/**
* 使用 url 初始化
* @param url
*/
public initWithUrl(url: string): Promise<void>;
/**
* 初始化录音
*/
public initWithRecord(): Promise<void>;
/**
* 播放(重新开始,无视暂停状态)
* @param startTime 可指定开始位置
*/
public play(startTime?: number|string): void;
/**
* 停止
*/
public stop(): void;
/**
* 暂停
*/
public pause(): void;
/**
* 从暂停处继续
*/
public resume(): void;
/**
* 整合 play() 和 resume(),若在暂停状态则继续,否则从头播放
*/
public playOrResume(): void;
/**
* 整合 resume() 和 pause()
*/
public pauseOrResume(): void;
/**
* 整合 play() 和 resume() 和 pause()
*/
public playOrPauseOrResume(): void;
/**
* 跳转到音频指定位置,不改变播放状态
* @param time 指定位置(秒,浮点数)
*/
public setPosition(time: number|string): void;
/**
* 获取当前播放位置(秒)
* @return 位置,秒,浮点数
*/
public getCurrentPosition(): number;
/**
* 是否正在播放
*/
public isPlaying(): boolean;
/**
* 是否暂停中
*/
public isPaused(): boolean;
/**
* 开始录音
*/
public startRecord(): void;
/**
* 结束录音,并把录制的音频转换成 AMR
*/
public finishRecord(): Promise<void>;
/**
* 放弃录音
*/
public cancelRecord(): void;
/**
* 是否正在录音
* @return {boolean}
*/
public isRecording(): boolean;
/**
* 播放事件
* @param fn
*/
public onPlay(fn: AMREvent): void;
/**
* 停止事件(包括播放结束)
* @param fn
*/
public onStop(fn: AMREvent): void;
/**
* 暂停事件
* @param fn
*/
public onPause(fn: AMREvent): void;
/**
* 继续播放事件
* @param fn
*/
public onResume(fn: AMREvent): void;
/**
* 播放结束事件
* @param fn
*/
public onEnded(fn: AMREvent): void;
/**
* 播放完毕自动结束事件
* @param fn
*/
public onAutoEnded(fn: AMREvent): void;
/**
* 开始录音事件
* @param fn
*/
public onStartRecord(fn: AMREvent): void;
/**
* 结束录音事件
* @param fn
*/
public onFinishRecord(fn: AMREvent): void;
/**
* 放弃录音事件
* @param fn
*/
public onCancelRecord(fn: AMREvent): void;
/**
* 获取音频的时间长度(单位:秒)
*/
public getDuration(): number;
/**
* 获取 AMR 文件的 Blob 对象
*/
public getBlob(): Blob | null;
/**
* 注销,清理内部存储
*/
public destroy(): void;
/**
* 编码 AMR
* @param samples
* @param sampleRate
*/
public encodeAMRAsync(samples: Float32Array, sampleRate: number): Promise<Uint8Array>;
/**
* 解码 AMR
* @param u8Array
*/
public decodeAMRAsync(u8Array: Uint8Array): Promise<Float32Array>;
/**
* AMR 数据转换成 Blob
* @param data
*/
public static rawAMRData2Blob(data: Uint8Array): Blob;
/**
* 判断浏览器是否支持播放
*/
public static isPlaySupported(): boolean;
/**
* 判断浏览器是否支持录音
*/
public static isRecordSupported(): boolean;
}
declare class RecorderControl {
private _recorderStream;
private _recorderStreamSourceNode;
private _recorder;
private _isRecording;
private _curSourceNode;
public playPcm(samples: Float32Array, sampleRate: number, onEnded: (() => void), startPos: number): void;
public stopPcm(): void;
public stopPcmSilently(): void;
public initRecorder(): Promise<void>;
public isRecording(): boolean;
public startRecord(): void;
public generateRecordSamples(): Promise<Float32Array>;
public releaseRecord(): void;
public static isPlaySupported(): boolean;
public static isRecordSupported(): boolean;
public static getCtxSampleRate(): number;
public static getCtxTime(): number;
public static decodeAudioArrayBufferByContext(array: ArrayBuffer): Promise<Float32Array>;
}
interface EncodeWorkerMsg {
command: 'encode',
samples: Float32Array,
sampleRate: number,
}
interface DecodeWorkerMsg {
command: 'decode',
buffer: Uint8Array,
}