speechrecorderng 3.10.13 → 3.11.0
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/README.md +1 -1
- package/fesm2022/speechrecorderng.mjs +204 -201
- package/fesm2022/speechrecorderng.mjs.map +1 -1
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/responsive_component.d.ts +1 -1
- package/package.json +13 -15
- package/esm2022/lib/action/action.mjs +0 -73
- package/esm2022/lib/audio/array_audio_buffer.mjs +0 -164
- package/esm2022/lib/audio/array_audio_buffer_input_stream.mjs +0 -86
- package/esm2022/lib/audio/array_audio_buffer_random_access_stream.mjs +0 -16
- package/esm2022/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2022/lib/audio/audio_display.mjs +0 -118
- package/esm2022/lib/audio/audio_player.mjs +0 -238
- package/esm2022/lib/audio/capture/capture.mjs +0 -855
- package/esm2022/lib/audio/context.mjs +0 -79
- package/esm2022/lib/audio/dsp/level_measure.mjs +0 -517
- package/esm2022/lib/audio/format.mjs +0 -20
- package/esm2022/lib/audio/impl/wavformat.mjs +0 -7
- package/esm2022/lib/audio/impl/wavreader.mjs +0 -144
- package/esm2022/lib/audio/impl/wavwriter.mjs +0 -191
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2022/lib/audio/io/stream.mjs +0 -59
- package/esm2022/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2022/lib/audio/persistor.mjs +0 -81
- package/esm2022/lib/audio/playback/array_audio_buffer_source_node.mjs +0 -126
- package/esm2022/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2022/lib/audio/playback/inddb_audio_buffer_source_node.mjs +0 -167
- package/esm2022/lib/audio/playback/net_audio_buffer_source_node.mjs +0 -218
- package/esm2022/lib/audio/playback/player.mjs +0 -402
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2022/lib/audio/ui/audio_display_control.mjs +0 -150
- package/esm2022/lib/audio/ui/audio_display_scroll_pane.mjs +0 -146
- package/esm2022/lib/audio/ui/audiosignal.mjs +0 -533
- package/esm2022/lib/audio/ui/common.mjs +0 -19
- package/esm2022/lib/audio/ui/container.mjs +0 -414
- package/esm2022/lib/audio/ui/livelevel.mjs +0 -361
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2022/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2022/lib/db/inddb.mjs +0 -120
- package/esm2022/lib/dsp/utils.mjs +0 -48
- package/esm2022/lib/environment/environment.defaults.mjs +0 -9
- package/esm2022/lib/io/BinaryReader.mjs +0 -93
- package/esm2022/lib/io/BinaryWriter.mjs +0 -80
- package/esm2022/lib/io/stream.mjs +0 -259
- package/esm2022/lib/math/2d/geometry.mjs +0 -28
- package/esm2022/lib/math/complex.mjs +0 -58
- package/esm2022/lib/math/dft.mjs +0 -196
- package/esm2022/lib/media/utils.mjs +0 -14
- package/esm2022/lib/net/uploader.mjs +0 -367
- package/esm2022/lib/recorder_component.mjs +0 -65
- package/esm2022/lib/speechrecorder/project/project.mjs +0 -54
- package/esm2022/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2022/lib/speechrecorder/recording.mjs +0 -124
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -221
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2022/lib/speechrecorder/script/script.mjs +0 -114
- package/esm2022/lib/speechrecorder/script/script.service.mjs +0 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +0 -676
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +0 -416
- package/esm2022/lib/speechrecorder/session/item.mjs +0 -30
- package/esm2022/lib/speechrecorder/session/progress.mjs +0 -135
- package/esm2022/lib/speechrecorder/session/prompting.mjs +0 -639
- package/esm2022/lib/speechrecorder/session/recorder_combi_pane.mjs +0 -88
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2022/lib/speechrecorder/session/recording_list.mjs +0 -188
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +0 -128
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +0 -114
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +0 -146
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +0 -424
- package/esm2022/lib/speechrecorder/session/recordingfile/recording-file.mjs +0 -68
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2022/lib/speechrecorder/session/session.mjs +0 -2
- package/esm2022/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2022/lib/speechrecorder/session/session_finished_dialog.mjs +0 -46
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +0 -1385
- package/esm2022/lib/speechrecorder/session/warning_bar.mjs +0 -33
- package/esm2022/lib/speechrecorder/spruploader.mjs +0 -22
- package/esm2022/lib/speechrecorder/startstopsignal/startstopsignal.mjs +0 -2
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2022/lib/speechrecorderng.component.mjs +0 -392
- package/esm2022/lib/speechrecorderng.module.mjs +0 -97
- package/esm2022/lib/spr.config.mjs +0 -27
- package/esm2022/lib/spr.module.version.mjs +0 -2
- package/esm2022/lib/ui/canvas_layer_comp.mjs +0 -38
- package/esm2022/lib/ui/intersection-observer.directive.mjs +0 -32
- package/esm2022/lib/ui/message_dialog.mjs +0 -51
- package/esm2022/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2022/lib/ui/responsive_component.mjs +0 -24
- package/esm2022/lib/utils/scrollIntoViewToBottom.mjs +0 -23
- package/esm2022/lib/utils/ua-parser.mjs +0 -190
- package/esm2022/lib/utils/utils.mjs +0 -132
- package/esm2022/lib/utils/wake_lock.mjs +0 -114
- package/esm2022/lib/utils/wake_lock_media.mjs +0 -2
- package/esm2022/public-api.mjs +0 -35
- package/esm2022/speechrecorderng.mjs +0 -5
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
import { ArrayAudioBufferInputStream } from "../array_audio_buffer_input_stream";
|
|
2
|
-
import { EditFloat32ArrayInputStream } from "../../io/stream";
|
|
3
|
-
import { AudioSourceNode } from "./audio_source_node";
|
|
4
|
-
export class ArrayAudioBufferSourceNode extends AudioSourceNode {
|
|
5
|
-
constructor(context) {
|
|
6
|
-
super(context, 'audio-source-worklet');
|
|
7
|
-
this._bufferFillSeconds = AudioSourceNode.DEFAULT_BUFFER_FILL_SECONDS;
|
|
8
|
-
this.bufferFillFrames = 0;
|
|
9
|
-
this._arrayAudioBuffer = null;
|
|
10
|
-
this._audioInputStream = null;
|
|
11
|
-
this._aisBufs = null;
|
|
12
|
-
this.filledFrames = 0;
|
|
13
|
-
this.channelCountMode = 'explicit';
|
|
14
|
-
this.port.onmessage = (msgEv) => {
|
|
15
|
-
if (msgEv.data) {
|
|
16
|
-
let evType = msgEv.data.eventType;
|
|
17
|
-
if (evType) {
|
|
18
|
-
if ('bufferNotification' === evType) {
|
|
19
|
-
this.filledFrames = msgEv.data.filledFrames;
|
|
20
|
-
//console.debug("Buffer notification: filled frames: " + this.filledFrames);
|
|
21
|
-
this.fillBuffer();
|
|
22
|
-
}
|
|
23
|
-
else if ('ended' === evType) {
|
|
24
|
-
let drainTime = 0;
|
|
25
|
-
if (this._arrayAudioBuffer?.sampleRate) {
|
|
26
|
-
drainTime = ArrayAudioBufferSourceNode.QUANTUM_FRAME_LEN / this._arrayAudioBuffer.sampleRate;
|
|
27
|
-
}
|
|
28
|
-
//let dstAny:any=this.context.destination;
|
|
29
|
-
//console.debug('Destination node tail-time: '+dstAny['tail-time']);
|
|
30
|
-
window.setTimeout(() => {
|
|
31
|
-
this.onended?.call(this);
|
|
32
|
-
}, drainTime * 1000);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
fillBuffer() {
|
|
39
|
-
if (this._arrayAudioBuffer && this._audioInputStream && this._aisBufs) {
|
|
40
|
-
let filled = this.filledFrames;
|
|
41
|
-
let bufLen = 0;
|
|
42
|
-
while (filled < this.bufferFillFrames) {
|
|
43
|
-
let read = this._audioInputStream.read(this._aisBufs);
|
|
44
|
-
//console.log("ArrayAudioBufferSourceNode: read: "+read)
|
|
45
|
-
if (read) {
|
|
46
|
-
let trBuffers = new Array(this.channelCount);
|
|
47
|
-
for (let ch = 0; ch < this.channelCount; ch++) {
|
|
48
|
-
let adCh = this._aisBufs[ch];
|
|
49
|
-
let adChCopy = new Float32Array(adCh.length);
|
|
50
|
-
bufLen = adChCopy.length;
|
|
51
|
-
adChCopy.set(adCh);
|
|
52
|
-
trBuffers[ch] = adChCopy.buffer;
|
|
53
|
-
}
|
|
54
|
-
this.port.postMessage({
|
|
55
|
-
cmd: 'data',
|
|
56
|
-
chs: this.channelCount,
|
|
57
|
-
audioData: trBuffers
|
|
58
|
-
}, trBuffers);
|
|
59
|
-
filled += read;
|
|
60
|
-
}
|
|
61
|
-
else {
|
|
62
|
-
this.port.postMessage({
|
|
63
|
-
cmd: 'endOfStream'
|
|
64
|
-
});
|
|
65
|
-
break;
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
get arrayAudioBuffer() {
|
|
71
|
-
return this._arrayAudioBuffer;
|
|
72
|
-
}
|
|
73
|
-
set arrayAudioBuffer(value) {
|
|
74
|
-
this._arrayAudioBuffer = value;
|
|
75
|
-
if (this._arrayAudioBuffer?.channelCount) {
|
|
76
|
-
this.channelCount = this._arrayAudioBuffer?.channelCount;
|
|
77
|
-
this.bufferFillFrames = this._arrayAudioBuffer.sampleRate * this._bufferFillSeconds;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
get bufferFillSeconds() {
|
|
81
|
-
return this._bufferFillSeconds;
|
|
82
|
-
}
|
|
83
|
-
set bufferFillSeconds(value) {
|
|
84
|
-
this._bufferFillSeconds = value;
|
|
85
|
-
}
|
|
86
|
-
start(when, offset, duration) {
|
|
87
|
-
if (when) {
|
|
88
|
-
throw Error("when parameter currently not supported by ArrayAudioBufferSourceNode class");
|
|
89
|
-
}
|
|
90
|
-
if (this._arrayAudioBuffer) {
|
|
91
|
-
let arrAis = new ArrayAudioBufferInputStream(this._arrayAudioBuffer);
|
|
92
|
-
if (offset === undefined && duration === undefined) {
|
|
93
|
-
this._audioInputStream = arrAis;
|
|
94
|
-
}
|
|
95
|
-
else {
|
|
96
|
-
let offsetFrames = 0;
|
|
97
|
-
let durationFrames = undefined;
|
|
98
|
-
if (offset !== undefined) {
|
|
99
|
-
offsetFrames = Math.floor(offset * this._arrayAudioBuffer.sampleRate);
|
|
100
|
-
}
|
|
101
|
-
if (duration !== undefined) {
|
|
102
|
-
durationFrames = Math.floor(duration * this._arrayAudioBuffer.sampleRate);
|
|
103
|
-
}
|
|
104
|
-
this._audioInputStream = new EditFloat32ArrayInputStream(arrAis, offsetFrames, durationFrames);
|
|
105
|
-
}
|
|
106
|
-
let chs = this._arrayAudioBuffer.channelCount;
|
|
107
|
-
this._aisBufs = new Array(chs);
|
|
108
|
-
for (let ch = 0; ch < chs; ch++) {
|
|
109
|
-
this._aisBufs[ch] = new Float32Array(ArrayAudioBufferSourceNode.DEFAULT_STREAM_READ_FRAME_LEN);
|
|
110
|
-
}
|
|
111
|
-
this.fillBuffer();
|
|
112
|
-
this.port.postMessage({ cmd: 'start' });
|
|
113
|
-
if (offset) {
|
|
114
|
-
this._playStartTime = this.context.currentTime - offset;
|
|
115
|
-
}
|
|
116
|
-
else {
|
|
117
|
-
this._playStartTime = this.context.currentTime;
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
stop() {
|
|
122
|
-
this.port.postMessage({ cmd: 'stop' });
|
|
123
|
-
this.onended?.call(this);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BsYXliYWNrL2FycmF5X2F1ZGlvX2J1ZmZlcl9zb3VyY2Vfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxvQ0FBb0MsQ0FBQztBQUMvRSxPQUFPLEVBQUMsMkJBQTJCLEVBQTBCLE1BQU0saUJBQWlCLENBQUM7QUFDckYsT0FBTyxFQUFDLGVBQWUsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXBELE1BQU0sT0FBTywwQkFBMkIsU0FBUSxlQUFlO0lBVTdELFlBQVksT0FBcUI7UUFFL0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxzQkFBc0IsQ0FBQyxDQUFDO1FBVmpDLHVCQUFrQixHQUFHLGVBQWUsQ0FBQywyQkFBMkIsQ0FBQztRQUNqRSxxQkFBZ0IsR0FBRyxDQUFDLENBQUM7UUFDckIsc0JBQWlCLEdBQTRCLElBQUksQ0FBQztRQUNsRCxzQkFBaUIsR0FBOEIsSUFBSSxDQUFDO1FBQ3BELGFBQVEsR0FBcUIsSUFBSSxDQUFDO1FBRWxDLGlCQUFZLEdBQUcsQ0FBQyxDQUFDO1FBS3ZCLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxVQUFVLENBQUM7UUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxLQUFtQixFQUFFLEVBQUU7WUFDNUMsSUFBSSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7Z0JBQ2YsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ2xDLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQ1gsSUFBSSxvQkFBb0IsS0FBSyxNQUFNLEVBQUUsQ0FBQzt3QkFDcEMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMs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LGlCQUFpQixHQUFDLElBQUksMkJBQTJCLENBQUMsTUFBTSxFQUFDLFlBQVksRUFBQyxjQUFjLENBQUMsQ0FBQztZQUM3RixDQUFDO1lBRUgsSUFBSSxHQUFHLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQztZQUM1QyxJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksS0FBSyxDQUFlLEdBQUcsQ0FBQyxDQUFDO1lBQzNDLEtBQUksSUFBSSxFQUFFLEdBQUMsQ0FBQyxFQUFDLEVBQUUsR0FBQyxHQUFHLEVBQUMsRUFBRSxFQUFFLEVBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsR0FBQyxJQUFJLFlBQVksQ0FBQywwQkFBMEIsQ0FBQyw2QkFBNkIsQ0FBQyxDQUFDO1lBQy9GLENBQUM7WUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDbEIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBQyxHQUFHLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQztZQUNwQyxJQUFHLE1BQU0sRUFBRSxDQUFDO2dCQUNWLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsTUFBTSxDQUFDO1lBQzFELENBQUM7aUJBQUksQ0FBQztnQkFDSixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ2pELENBQUM7UUFDTCxDQUFDO0lBQ0QsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFDLEdBQUcsRUFBRSxNQUFNLEVBQUMsQ0FBQyxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzNCLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXJyYXlBdWRpb0J1ZmZlcn0gZnJvbSBcIi4uL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbX0gZnJvbSBcIi4uL2FycmF5X2F1ZGlvX2J1ZmZlcl9pbnB1dF9zdHJlYW1cIjtcclxuaW1wb3J0IHtFZGl0RmxvYXQzMkFycmF5SW5wdXRTdHJlYW0sIEZsb2F0MzJBcnJheUlucHV0U3RyZWFtfSBmcm9tIFwiLi4vLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7QXVkaW9Tb3VyY2VOb2RlfSBmcm9tIFwiLi9hdWRpb19zb3VyY2Vfbm9kZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFycmF5QXVkaW9CdWZmZXJTb3VyY2VOb2RlIGV4dGVuZHMgQXVkaW9Tb3VyY2VOb2RlIHtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyRmlsbFNlY29uZHMgPSBBdWRpb1NvdXJjZU5vZGUuREVGQVVMVF9CVUZGRVJfRklMTF9TRUNPTkRTO1xyXG4gIHByaXZhdGUgYnVmZmVyRmlsbEZyYW1lcyA9IDA7XHJcbiAgcHJpdmF0ZSBfYXJyYXlBdWRpb0J1ZmZlcjogQXJyYXlBdWRpb0J1ZmZlciB8IG51bGwgPSBudWxsO1xyXG4gIHByaXZhdGUgX2F1ZGlvSW5wdXRTdHJlYW06RmxvYXQzMkFycmF5SW5wdXRTdHJlYW18bnVsbD1udWxsO1xyXG4gIHByaXZhdGUgX2Fpc0J1ZnM6RmxvYXQzMkFycmF5W118bnVsbD1udWxsO1xyXG5cclxuICBwcml2YXRlIGZpbGxlZEZyYW1lcyA9IDA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKGNvbnRleHQ6IEF1ZGlvQ29udGV4dCkge1xyXG5cclxuICAgIHN1cGVyKGNvbnRleHQsICdhdWRpby1zb3VyY2Utd29ya2xldCcpO1xyXG4gICAgdGhpcy5jaGFubmVsQ291bnRNb2RlID0gJ2V4cGxpY2l0JztcclxuICAgIHRoaXMucG9ydC5vbm1lc3NhZ2UgPSAobXNnRXY6IE1lc3NhZ2VFdmVudCkgPT4ge1xyXG4gICAgICBpZiAobXNnRXYuZGF0YSkge1xyXG4gICAgICAgIGxldCBldlR5cGUgPSBtc2dFdi5kYXRhLmV2ZW50VHlwZTtcclxuICAgICAgICBpZiAoZXZUeXBlKSB7XHJcbiAgICAgICAgICBpZiAoJ2J1ZmZlck5vdGlmaWNhdGlvbicgPT09IGV2VHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbGxlZEZyYW1lcyA9IG1zZ0V2LmRhdGEuZmlsbGVkRnJhbWVzO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJCdWZmZXIgbm90aWZpY2F0aW9uOiBmaWxsZWQgZnJhbWVzOiBcIiArIHRoaXMuZmlsbGVkRnJhbWVzKTtcclxuICAgICAgICAgICAgdGhpcy5maWxsQnVmZmVyKCk7XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKCdlbmRlZCcgPT09IGV2VHlwZSkge1xyXG4gICAgICAgICAgICBsZXQgZHJhaW5UaW1lID0gMDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2FycmF5QXVkaW9CdWZmZXI/LnNhbXBsZVJhdGUpIHtcclxuICAgICAgICAgICAgICBkcmFpblRpbWUgPSBBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZS5RVUFOVFVNX0ZSQU1FX0xFTiAvIHRoaXMuX2FycmF5QXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2xldCBkc3RBbnk6YW55PXRoaXMuY29udGV4dC5kZXN0aW5hdGlvbjtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdEZXN0aW5hdGlvbiBub2RlIHRhaWwtdGltZTogJytkc3RBbnlbJ3RhaWwtdGltZSddKTtcclxuICAgICAgICAgICAgd2luZG93LnNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgIHRoaXMub25lbmRlZD8uY2FsbCh0aGlzKTtcclxuICAgICAgICAgICAgfSwgZHJhaW5UaW1lICogMTAwMCk7XHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWxsQnVmZmVyKCkge1xyXG4gICAgaWYgKHRoaXMuX2FycmF5QXVkaW9CdWZmZXIgJiYgdGhpcy5fYXVkaW9JbnB1dFN0cmVhbSAmJiB0aGlzLl9haXNCdWZzKSB7XHJcbiAgICAgIGxldCBmaWxsZWQgPSB0aGlzLmZpbGxlZEZyYW1lcztcclxuICAgICAgbGV0IGJ1ZkxlbiA9IDA7XHJcblxyXG4gICAgICB3aGlsZShmaWxsZWQ8IHRoaXMuYnVmZmVyRmlsbEZyYW1lcykge1xyXG4gICAgICAgIGxldCByZWFkID0gdGhpcy5fYXVkaW9JbnB1dFN0cmVhbS5yZWFkKHRoaXMuX2Fpc0J1ZnMpO1xyXG4gICAgICAgIC8vY29uc29sZS5sb2coXCJBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZTogcmVhZDogXCIrcmVhZClcclxuICAgICAgICBpZiAocmVhZCkge1xyXG4gICAgICAgICAgbGV0IHRyQnVmZmVycyA9IG5ldyBBcnJheTxhbnk+KHRoaXMuY2hhbm5lbENvdW50KTtcclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCB0aGlzLmNoYW5uZWxDb3VudDsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgYWRDaCA9IHRoaXMuX2Fpc0J1ZnNbY2hdO1xyXG4gICAgICAgICAgICBsZXQgYWRDaENvcHkgPSBuZXcgRmxvYXQzMkFycmF5KGFkQ2gubGVuZ3RoKTtcclxuICAgICAgICAgICAgYnVmTGVuID0gYWRDaENvcHkubGVuZ3RoO1xyXG4gICAgICAgICAgICBhZENoQ29weS5zZXQoYWRDaCk7XHJcbiAgICAgICAgICAgIHRyQnVmZmVyc1tjaF0gPSBhZENoQ29weS5idWZmZXI7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBjbWQ6ICdkYXRhJyxcclxuICAgICAgICAgICAgY2hzOiB0aGlzLmNoYW5uZWxDb3VudCxcclxuICAgICAgICAgICAgYXVkaW9EYXRhOiB0ckJ1ZmZlcnNcclxuICAgICAgICAgIH0sIHRyQnVmZmVycyk7XHJcbiAgICAgICAgICBmaWxsZWQrPXJlYWQ7XHJcbiAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2Uoe1xyXG4gICAgICAgICAgICBjbWQ6ICdlbmRPZlN0cmVhbSdcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGFycmF5QXVkaW9CdWZmZXIoKTogQXJyYXlBdWRpb0J1ZmZlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2FycmF5QXVkaW9CdWZmZXI7XHJcbiAgfVxyXG5cclxuICBzZXQgYXJyYXlBdWRpb0J1ZmZlcih2YWx1ZTogQXJyYXlBdWRpb0J1ZmZlciB8IG51bGwpIHtcclxuICAgIHRoaXMuX2FycmF5QXVkaW9CdWZmZXIgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9hcnJheUF1ZGlvQnVmZmVyPy5jaGFubmVsQ291bnQpIHtcclxuICAgICAgdGhpcy5jaGFubmVsQ291bnQgPSB0aGlzLl9hcnJheUF1ZGlvQnVmZmVyPy5jaGFubmVsQ291bnQ7XHJcbiAgICAgIHRoaXMuYnVmZmVyRmlsbEZyYW1lcyA9IHRoaXMuX2FycmF5QXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSAqIHRoaXMuX2J1ZmZlckZpbGxTZWNvbmRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGJ1ZmZlckZpbGxTZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyRmlsbFNlY29uZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgYnVmZmVyRmlsbFNlY29uZHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fYnVmZmVyRmlsbFNlY29uZHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHN0YXJ0KHdoZW4/OiBudW1iZXIgfCB1bmRlZmluZWQsb2Zmc2V0PzogbnVtYmVyIHwgdW5kZWZpbmVkLGR1cmF0aW9uPzogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAod2hlbikge1xyXG4gICAgICB0aHJvdyBFcnJvcihcIndoZW4gcGFyYW1ldGVyIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJ5IEFycmF5QXVkaW9CdWZmZXJTb3VyY2VOb2RlIGNsYXNzXCIpXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX2FycmF5QXVkaW9CdWZmZXIpIHtcclxuICAgICAgbGV0IGFyckFpcz1uZXcgQXJyYXlBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2FycmF5QXVkaW9CdWZmZXIpO1xyXG4gICAgICBpZihvZmZzZXQ9PT11bmRlZmluZWQgJiYgZHVyYXRpb249PT11bmRlZmluZWQpe1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvSW5wdXRTdHJlYW0gPSBhcnJBaXM7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIGxldCBvZmZzZXRGcmFtZXM9MDtcclxuICAgICAgICBsZXQgZHVyYXRpb25GcmFtZXM9dW5kZWZpbmVkO1xyXG4gICAgICAgIGlmKG9mZnNldCE9PXVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgb2Zmc2V0RnJhbWVzPU1hdGguZmxvb3Iob2Zmc2V0ICogdGhpcy5fYXJyYXlBdWRpb0J1ZmZlci5zYW1wbGVSYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYoZHVyYXRpb24hPT11bmRlZmluZWQpe1xyXG4gICAgICAgICAgZHVyYXRpb25GcmFtZXM9TWF0aC5mbG9vcihkdXJhdGlvbiAqIHRoaXMuX2FycmF5QXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX2F1ZGlvSW5wdXRTdHJlYW09bmV3IEVkaXRGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbShhcnJBaXMsb2Zmc2V0RnJhbWVzLGR1cmF0aW9uRnJhbWVzKTtcclxuICAgICAgfVxyXG5cclxuICAgIGxldCBjaHM9dGhpcy5fYXJyYXlBdWRpb0J1ZmZlci5jaGFubmVsQ291bnQ7XHJcbiAgICB0aGlzLl9haXNCdWZzPW5ldyBBcnJheTxGbG9hdDMyQXJyYXk+KGNocyk7XHJcbiAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspe1xyXG4gICAgICB0aGlzLl9haXNCdWZzW2NoXT1uZXcgRmxvYXQzMkFycmF5KEFycmF5QXVkaW9CdWZmZXJTb3VyY2VOb2RlLkRFRkFVTFRfU1RSRUFNX1JFQURfRlJBTUVfTEVOKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmZpbGxCdWZmZXIoKTtcclxuICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7Y21kOiAnc3RhcnQnfSk7XHJcbiAgICAgIGlmKG9mZnNldCkge1xyXG4gICAgICAgIHRoaXMuX3BsYXlTdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSBvZmZzZXQ7XHJcbiAgICAgIH1lbHNle1xyXG4gICAgICAgIHRoaXMuX3BsYXlTdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XHJcbiAgICAgIH1cclxuICB9XHJcbiAgfVxyXG5cclxuICBzdG9wKCkge1xyXG4gICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHtjbWQ6ICdzdG9wJ30pO1xyXG4gICAgdGhpcy5vbmVuZGVkPy5jYWxsKHRoaXMpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
export class AudioSourceNode extends AudioWorkletNode {
|
|
2
|
-
constructor() {
|
|
3
|
-
super(...arguments);
|
|
4
|
-
this._playStartTime = null;
|
|
5
|
-
this.onended = null;
|
|
6
|
-
}
|
|
7
|
-
static { this.DEFAULT_BUFFER_FILL_SECONDS = 10; }
|
|
8
|
-
static { this.DEFAULT_STREAM_READ_FRAME_LEN = 1024; }
|
|
9
|
-
static { this.QUANTUM_FRAME_LEN = 128; }
|
|
10
|
-
get playPositionTime() {
|
|
11
|
-
let ppt = null;
|
|
12
|
-
if (this._playStartTime !== null) {
|
|
13
|
-
ppt = this.context.currentTime - this._playStartTime;
|
|
14
|
-
}
|
|
15
|
-
return ppt;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fc291cmNlX25vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vcGxheWJhY2svYXVkaW9fc291cmNlX25vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFnQixlQUFnQixTQUFRLGdCQUFnQjtJQUE5RDs7UUFJWSxtQkFBYyxHQUFhLElBQUksQ0FBQztRQVcxQyxZQUFPLEdBQXdCLElBQUksQ0FBQztJQUN0QyxDQUFDO2FBZmlCLGdDQUEyQixHQUFHLEVBQUUsQUFBTCxDQUFNO2FBQ2pDLGtDQUE2QixHQUFDLElBQUksQUFBTCxDQUFNO2FBQ25DLHNCQUFpQixHQUFHLEdBQUcsQUFBTixDQUFPO0lBS3hDLElBQUksZ0JBQWdCO1FBQ2xCLElBQUksR0FBRyxHQUFDLElBQUksQ0FBQztRQUNiLElBQUcsSUFBSSxDQUFDLGNBQWMsS0FBRyxJQUFJLEVBQUUsQ0FBQztZQUM5QixHQUFHLEdBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGFic3RyYWN0IGNsYXNzIEF1ZGlvU291cmNlTm9kZSBleHRlbmRzIEF1ZGlvV29ya2xldE5vZGUge1xyXG4gIHN0YXRpYyByZWFkb25seSBERUZBVUxUX0JVRkZFUl9GSUxMX1NFQ09ORFMgPSAxMDtcclxuICBzdGF0aWMgcmVhZG9ubHkgREVGQVVMVF9TVFJFQU1fUkVBRF9GUkFNRV9MRU49MTAyNDtcclxuICBzdGF0aWMgcmVhZG9ubHkgUVVBTlRVTV9GUkFNRV9MRU4gPSAxMjg7XHJcbiAgcHJvdGVjdGVkIF9wbGF5U3RhcnRUaW1lOm51bWJlcnxudWxsPW51bGw7XHJcbiAgcHVibGljIGFic3RyYWN0IHN0YXJ0KHdoZW4/OiBudW1iZXIgfCB1bmRlZmluZWQsb2Zmc2V0PzogbnVtYmVyIHwgdW5kZWZpbmVkLGR1cmF0aW9uPzogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZDtcclxuICBwdWJsaWMgYWJzdHJhY3Qgc3RvcCgpOnZvaWQ7XHJcblxyXG4gIGdldCBwbGF5UG9zaXRpb25UaW1lKCk6bnVtYmVyfG51bGwge1xyXG4gICAgbGV0IHBwdD1udWxsO1xyXG4gICAgaWYodGhpcy5fcGxheVN0YXJ0VGltZSE9PW51bGwpIHtcclxuICAgICAgcHB0PSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWUgLSB0aGlzLl9wbGF5U3RhcnRUaW1lO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIHBwdDtcclxuICB9XHJcbiAgb25lbmRlZDogKCgpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XHJcbn1cclxuIl19
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
// Code from audio_source_worklet.js as string constant to be loaded as module
|
|
2
|
-
// Changes in audio_source_worklet.js must be copied and pasted to this string constant
|
|
3
|
-
const aswpStr = "\n" +
|
|
4
|
-
"// Important note: Changes in audio_source_worklet.js must be copied and pasted to the string constant aswpStr in audio_source_worklet_module_loader.ts\n" +
|
|
5
|
-
"\n" +
|
|
6
|
-
"\n" +
|
|
7
|
-
"class AudioSourceProcessor extends AudioWorkletProcessor{\n" +
|
|
8
|
-
"\n" +
|
|
9
|
-
" filledFrames=0;\n" +
|
|
10
|
-
" audioBuffers=new Array();\n" +
|
|
11
|
-
" currentAudioBuffer=null;\n" +
|
|
12
|
-
" currentAudioBufferFramePos=0;\n" +
|
|
13
|
-
" currentAudioBufferAvail=0;\n" +
|
|
14
|
-
" running=false;\n" +
|
|
15
|
-
" stalled=false;\n" +
|
|
16
|
-
" stopped=false;\n" +
|
|
17
|
-
" endOfStream=false;\n" +
|
|
18
|
-
" ended=false;\n" +
|
|
19
|
-
"\n" +
|
|
20
|
-
" constructor() {\n" +
|
|
21
|
-
" super({numberOfInputs:0,numberOfOutputs:1});\n" +
|
|
22
|
-
" this.port.onmessage=(msgEv)=>{\n" +
|
|
23
|
-
" // received audio playback data from application\n" +
|
|
24
|
-
" //console.debug(\"Audio source worklet msg: Received.\");\n" +
|
|
25
|
-
"\n" +
|
|
26
|
-
" if(msgEv.data.cmd){\n" +
|
|
27
|
-
" if('data'===msgEv.data.cmd) {\n" +
|
|
28
|
-
" let chs = msgEv.data.chs;\n" +
|
|
29
|
-
"\n" +
|
|
30
|
-
" let audioData = new Array(chs);\n" +
|
|
31
|
-
" for (let ch = 0; ch < chs; ch++) {\n" +
|
|
32
|
-
" audioData[ch] = new Float32Array(msgEv.data.audioData[ch]);\n" +
|
|
33
|
-
" }\n" +
|
|
34
|
-
" let msgChBufLen=audioData[0].length;\n" +
|
|
35
|
-
" this.audioBuffers.push(audioData);\n" +
|
|
36
|
-
" this.filledFrames += msgChBufLen;\n" +
|
|
37
|
-
" //console.debug(\"Audio source worklet msg: Filled \" + this.filledFrames+ \" in \"+this.audioBuffers.length+\" buffers.\");\n" +
|
|
38
|
-
"\n" +
|
|
39
|
-
" }else if('start'===msgEv.data.cmd){\n" +
|
|
40
|
-
" this.running=true;\n" +
|
|
41
|
-
" }else if('stop'===msgEv.data.cmd){\n" +
|
|
42
|
-
" //console.debug(\"Stop...\");\n" +
|
|
43
|
-
" this.running=false;\n" +
|
|
44
|
-
" this.stopped=true;\n" +
|
|
45
|
-
" // clear buffers\n" +
|
|
46
|
-
" this.filledFrames=0;\n" +
|
|
47
|
-
" while(this.audioBuffers.length > 0) {\n" +
|
|
48
|
-
" this.audioBuffers.pop();\n" +
|
|
49
|
-
" }\n" +
|
|
50
|
-
" this.currentAudioBuffer=new Float32Array(0);\n" +
|
|
51
|
-
" }else if('endOfStream'===msgEv.data.cmd){\n" +
|
|
52
|
-
" this.endOfStream=true;\n" +
|
|
53
|
-
" }else if('continue'===msgEv.data.cmd){\n" +
|
|
54
|
-
" console.debug(\"Continue after stalled...\");\n" +
|
|
55
|
-
" this.stalled=false;\n" +
|
|
56
|
-
" this.port.postMessage({eventType: 'resumed'});\n" +
|
|
57
|
-
" }\n" +
|
|
58
|
-
" }\n" +
|
|
59
|
-
" }\n" +
|
|
60
|
-
" }\n" +
|
|
61
|
-
"\n" +
|
|
62
|
-
" process(\n" +
|
|
63
|
-
" inputs,\n" +
|
|
64
|
-
" outputs,\n" +
|
|
65
|
-
" parameters\n" +
|
|
66
|
-
" ){\n" +
|
|
67
|
-
" //console.debug(\"Audio source worklet: process \"+outputs.length+ \" output buffers.\");\n" +
|
|
68
|
-
" // copy ring buffer data to outputs\n" +
|
|
69
|
-
" if(!this.running || this.stalled){\n" +
|
|
70
|
-
" if(this.endOfStream) {\n" +
|
|
71
|
-
" this.ended = true;\n" +
|
|
72
|
-
" this.port.postMessage({eventType: 'ended'});\n" +
|
|
73
|
-
" }\n" +
|
|
74
|
-
" return !this.ended && !this.stopped;\n" +
|
|
75
|
-
" }\n" +
|
|
76
|
-
"\n" +
|
|
77
|
-
" let output=outputs[0];\n" +
|
|
78
|
-
" let chs=output.length;\n" +
|
|
79
|
-
" //console.debug(\"Audio source worklet: Output channels: \"+chs);\n" +
|
|
80
|
-
" if(chs>0) {\n" +
|
|
81
|
-
"\n" +
|
|
82
|
-
" let outCh0 = output[0];\n" +
|
|
83
|
-
" let outChLen = outCh0.length;\n" +
|
|
84
|
-
"\n" +
|
|
85
|
-
" if(!this.currentAudioBuffer){\n" +
|
|
86
|
-
" // get first buffer\n" +
|
|
87
|
-
" let nxtBuff=this.audioBuffers.shift();\n" +
|
|
88
|
-
" if(nxtBuff) {\n" +
|
|
89
|
-
" this.currentAudioBuffer = nxtBuff;\n" +
|
|
90
|
-
" this.currentAudioBufferFramePos=0;\n" +
|
|
91
|
-
" this.currentAudioBufferAvail=this.currentAudioBuffer[0].length;\n" +
|
|
92
|
-
" }else{\n" +
|
|
93
|
-
" return true;\n" +
|
|
94
|
-
" }\n" +
|
|
95
|
-
" }\n" +
|
|
96
|
-
"\n" +
|
|
97
|
-
" let copied=0;\n" +
|
|
98
|
-
" do{\n" +
|
|
99
|
-
" if(this.currentAudioBufferAvail===0){\n" +
|
|
100
|
-
" let nxtBuff=this.audioBuffers.shift();\n" +
|
|
101
|
-
" if(nxtBuff){\n" +
|
|
102
|
-
" this.currentAudioBuffer=nxtBuff;\n" +
|
|
103
|
-
" this.currentAudioBufferFramePos=0;\n" +
|
|
104
|
-
" this.currentAudioBufferAvail=this.currentAudioBuffer[0].length;\n" +
|
|
105
|
-
" //console.debug(\"Next buffer with \"+this.currentAudioBufferAvail+ \" frames\");\n" +
|
|
106
|
-
" this.port.postMessage({eventType:'bufferNotification',filledFrames:this.filledFrames});\n" +
|
|
107
|
-
" }else{\n" +
|
|
108
|
-
" if(this.endOfStream) {\n" +
|
|
109
|
-
" this.ended = true;\n" +
|
|
110
|
-
" this.port.postMessage({eventType: 'ended'});\n" +
|
|
111
|
-
" //console.debug(\"Stream ended\");\n" +
|
|
112
|
-
" }else{\n" +
|
|
113
|
-
" if(!this.stalled) {\n" +
|
|
114
|
-
" this.stalled = true;\n" +
|
|
115
|
-
" this.port.postMessage({eventType: 'stalled'});\n" +
|
|
116
|
-
" }\n" +
|
|
117
|
-
" }\n" +
|
|
118
|
-
" break;\n" +
|
|
119
|
-
" }\n" +
|
|
120
|
-
" }\n" +
|
|
121
|
-
" //console.debug(\"outChLen: \"+outChLen+\", copied: \"+copied+\", current avail: \"+this.currentAudioBufferAvail);\n" +
|
|
122
|
-
" let toCopy=outChLen-copied;\n" +
|
|
123
|
-
" if(toCopy>this.currentAudioBufferAvail){\n" +
|
|
124
|
-
" toCopy=this.currentAudioBufferAvail;\n" +
|
|
125
|
-
" }\n" +
|
|
126
|
-
" //console.debug(\"Copy \"+toCopy+\" frames...\");\n" +
|
|
127
|
-
" for(let ch=0;ch<chs;ch++) {\n" +
|
|
128
|
-
" let outCh=output[ch];\n" +
|
|
129
|
-
" for (let i = 0; i < toCopy; i++) {\n" +
|
|
130
|
-
" outCh[copied+i]=this.currentAudioBuffer[ch][this.currentAudioBufferFramePos+i];\n" +
|
|
131
|
-
" }\n" +
|
|
132
|
-
" }\n" +
|
|
133
|
-
" copied+=toCopy;\n" +
|
|
134
|
-
" this.currentAudioBufferFramePos+=toCopy;\n" +
|
|
135
|
-
" this.currentAudioBufferAvail-=toCopy;\n" +
|
|
136
|
-
"\n" +
|
|
137
|
-
" }while(copied<outChLen);\n" +
|
|
138
|
-
" this.filledFrames-=copied;\n" +
|
|
139
|
-
" //console.debug(\"Copied \"+copied+\" frames.\");\n" +
|
|
140
|
-
" }\n" +
|
|
141
|
-
" return !this.ended;\n" +
|
|
142
|
-
" }\n" +
|
|
143
|
-
"}\n" +
|
|
144
|
-
"\n" +
|
|
145
|
-
"registerProcessor('audio-source-worklet',AudioSourceProcessor);\n";
|
|
146
|
-
export class AudioSourceWorkletModuleLoader {
|
|
147
|
-
static { this.moduleLoaded = false; }
|
|
148
|
-
static loadModule(context) {
|
|
149
|
-
return new Promise((resolve, reject) => {
|
|
150
|
-
if (AudioSourceWorkletModuleLoader.moduleLoaded) {
|
|
151
|
-
resolve.call(self);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
const audioWorkletModuleBlob = new Blob([aswpStr], { type: 'text/javascript' });
|
|
155
|
-
const audioWorkletModuleBlobUrl = window.URL.createObjectURL(audioWorkletModuleBlob);
|
|
156
|
-
context.audioWorklet.addModule(audioWorkletModuleBlobUrl).then(() => {
|
|
157
|
-
AudioSourceWorkletModuleLoader.moduleLoaded = true;
|
|
158
|
-
resolve.call(self);
|
|
159
|
-
}).catch((reason) => {
|
|
160
|
-
console.error(reason);
|
|
161
|
-
reject.call(reason);
|
|
162
|
-
});
|
|
163
|
-
}
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fc291cmNlX3dvcmtsZXRfbW9kdWxlX2xvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9wbGF5YmFjay9hdWRpb19zb3VyY2Vfd29ya2xldF9tb2R1bGVfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDhFQUE4RTtBQUM5RSx1RkFBdUY7QUFFdkYsTUFBTSxPQUFPLEdBQUcsSUFBSTtJQUNsQiwySkFBMko7SUFDM0osSUFBSTtJQUNKLElBQUk7SUFDSiw2REFBNkQ7SUFDN0QsSUFBSTtJQUNKLHVCQUF1QjtJQUN2QixpQ0FBaUM7SUFDakMsZ0NBQWdDO0lBQ2hDLHFDQUFxQztJQUNyQyxrQ0FBa0M7SUFDbEMsc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsMEJBQTBCO0lBQzFCLG9CQUFvQjtJQUNwQixJQUFJO0lBQ0osdUJBQXVCO0lBQ3ZCLHdEQUF3RDtJQUN4RCwwQ0FBMEM7SUFDMUMsOERBQThEO0lBQzlELHVFQUF1RTtJQUN2RSxJQUFJO0lBQ0osaUNBQWlDO0lBQ2pDLDZDQUE2QztJQUM3QywyQ0FBMkM7SUFDM0MsSUFBSTtJQUNKLGlEQUFpRDtJQUNqRCxvREFBb0Q7SUFDcEQsK0VBQStFO0lBQy9FLG1CQUFtQjtJQUNuQixzREFBc0Q7SUFDdEQsb0RBQW9EO0lBQ3BELG1EQUFtRDtJQUNuRCw4SUFBOEk7SUFDOUksSUFBSTtJQUNKLG1EQUFtRDtJQUNuRCxvQ0FBb0M7SUFDcEMsa0RBQWtEO0lBQ2xELCtDQUErQztJQUMvQyxxQ0FBcUM7SUFDckMsb0NBQW9DO0lBQ3BDLGtDQUFrQztJQUNsQyxzQ0FBc0M7SUFDdEMsdURBQXVEO0lBQ3ZELDRDQUE0QztJQUM1QyxtQkFBbUI7SUFDbkIsOERBQThEO0lBQzlELHlEQUF5RDtJQUN6RCx3Q0FBd0M7SUFDeEMsc0RBQXNEO0lB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QUM7b0JBQ3RCLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3RCLENBQUMsQ0FBQyxDQUFDO1lBRUwsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvZGUgZnJvbSBhdWRpb19zb3VyY2Vfd29ya2xldC5qcyBhcyBzdHJpbmcgY29uc3RhbnQgdG8gYmUgbG9hZGVkIGFzIG1vZHVsZVxyXG4vLyBDaGFuZ2VzIGluIGF1ZGlvX3NvdXJjZV93b3JrbGV0LmpzIG11c3QgYmUgY29waWVkIGFuZCBwYXN0ZWQgdG8gdGhpcyBzdHJpbmcgY29uc3RhbnRcclxuXHJcbmNvbnN0IGFzd3BTdHIgPSBcIlxcblwiICtcclxuICBcIi8vIEltcG9ydGFudCBub3RlOiBDaGFuZ2VzIGluIGF1ZGlvX3NvdXJjZV93b3JrbGV0LmpzIG11c3QgYmUgY29waWVkIGFuZCBwYXN0ZWQgdG8gdGhlIHN0cmluZyBjb25zdGFudCBhc3dwU3RyIGluIGF1ZGlvX3NvdXJjZV93b3JrbGV0X21vZHVsZV9sb2FkZXIudHNcXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCJjbGFzcyBBdWRpb1NvdXJjZVByb2Nlc3NvciBleHRlbmRzIEF1ZGlvV29ya2xldFByb2Nlc3NvcntcXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCIgICAgZmlsbGVkRnJhbWVzPTA7XFxuXCIgK1xyXG4gIFwiICAgIGF1ZGlvQnVmZmVycz1uZXcgQXJyYXkoKTtcXG5cIiArXHJcbiAgXCIgICAgY3VycmVudEF1ZGlvQnVmZmVyPW51bGw7XFxuXCIgK1xyXG4gIFwiICAgIGN1cnJlbnRBdWRpb0J1ZmZlckZyYW1lUG9zPTA7XFxuXCIgK1xyXG4gIFwiICAgIGN1cnJlbnRBdWRpb0J1ZmZlckF2YWlsPTA7XFxuXCIgK1xyXG4gIFwiICAgIHJ1bm5pbmc9ZmFsc2U7XFxuXCIgK1xyXG4gIFwiICAgIHN0YWxsZWQ9ZmFsc2U7XFxuXCIgK1xyXG4gIFwiICAgIHN0b3BwZWQ9ZmFsc2U7XFxuXCIgK1xyXG4gIFwiICAgIGVuZE9mU3RyZWFtPWZhbHNlO1xcblwiICtcclxuICBcIiAgICBlbmRlZD1mYWxzZTtcXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCIgICAgY29uc3RydWN0b3IoKSB7XFxuXCIgK1xyXG4gIFwiICAgICAgICBzdXBlcih7bnVtYmVyT2ZJbnB1dHM6MCxudW1iZXJPZk91dHB1dHM6MX0pO1xcblwiICtcclxuICBcIiAgICAgICAgdGhpcy5wb3J0Lm9ubWVzc2FnZT0obXNnRXYpPT57XFxuXCIgK1xyXG4gIFwiICAgICAgICAgIC8vIHJlY2VpdmVkIGF1ZGlvIHBsYXliYWNrIGRhdGEgZnJvbSBhcHBsaWNhdGlvblxcblwiICtcclxuICBcIiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXFxcIkF1ZGlvIHNvdXJjZSB3b3JrbGV0IG1zZzogUmVjZWl2ZWQuXFxcIik7XFxuXCIgK1xyXG4gIFwiXFxuXCIgK1xyXG4gIFwiICAgICAgICAgIGlmKG1zZ0V2LmRhdGEuY21kKXtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICBpZignZGF0YSc9PT1tc2dFdi5kYXRhLmNtZCkge1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgbGV0IGNocyA9IG1zZ0V2LmRhdGEuY2hzO1xcblwiICtcclxuICBcIlxcblwiICtcclxuICBcIiAgICAgICAgICAgICAgbGV0IGF1ZGlvRGF0YSA9IG5ldyBBcnJheShjaHMpO1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IGNoczsgY2grKykge1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgICBhdWRpb0RhdGFbY2hdID0gbmV3IEZsb2F0MzJBcnJheShtc2dFdi5kYXRhLmF1ZGlvRGF0YVtjaF0pO1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgfVxcblwiICtcclxuICBcIiAgICAgICAgICAgICAgbGV0IG1zZ0NoQnVmTGVuPWF1ZGlvRGF0YVswXS5sZW5ndGg7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLmF1ZGlvQnVmZmVycy5wdXNoKGF1ZGlvRGF0YSk7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLmZpbGxlZEZyYW1lcyArPSBtc2dDaEJ1ZkxlbjtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcXFwiQXVkaW8gc291cmNlIHdvcmtsZXQgbXNnOiBGaWxsZWQgXFxcIiArIHRoaXMuZmlsbGVkRnJhbWVzKyBcXFwiIGluIFxcXCIrdGhpcy5hdWRpb0J1ZmZlcnMubGVuZ3RoK1xcXCIgYnVmZmVycy5cXFwiKTtcXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICB9ZWxzZSBpZignc3RhcnQnPT09bXNnRXYuZGF0YS5jbWQpe1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgdGhpcy5ydW5uaW5nPXRydWU7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgfWVsc2UgaWYoJ3N0b3AnPT09bXNnRXYuZGF0YS5jbWQpe1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFxcXCJTdG9wLi4uXFxcIik7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLnJ1bm5pbmc9ZmFsc2U7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLnN0b3BwZWQ9dHJ1ZTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgIC8vIGNsZWFyIGJ1ZmZlcnNcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgIHRoaXMuZmlsbGVkRnJhbWVzPTA7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB3aGlsZSh0aGlzLmF1ZGlvQnVmZmVycy5sZW5ndGggPiAwKSB7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICAgIHRoaXMuYXVkaW9CdWZmZXJzLnBvcCgpO1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgfVxcblwiICtcclxuICBcIiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXVkaW9CdWZmZXI9bmV3IEZsb2F0MzJBcnJheSgwKTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICB9ZWxzZSBpZignZW5kT2ZTdHJlYW0nPT09bXNnRXYuZGF0YS5jbWQpe1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgdGhpcy5lbmRPZlN0cmVhbT10cnVlO1xcblwiICtcclxuICBcIiAgICAgICAgICAgIH1lbHNlIGlmKCdjb250aW51ZSc9PT1tc2dFdi5kYXRhLmNtZCl7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICBjb25zb2xlLmRlYnVnKFxcXCJDb250aW51ZSBhZnRlciBzdGFsbGVkLi4uXFxcIik7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLnN0YWxsZWQ9ZmFsc2U7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2Uoe2V2ZW50VHlwZTogJ3Jlc3VtZWQnfSk7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgfVxcblwiICtcclxuICBcIiAgICAgICAgICB9XFxuXCIgK1xyXG4gIFwiICAgICAgICB9XFxuXCIgK1xyXG4gIFwiICAgIH1cXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCIgcHJvY2VzcyhcXG5cIiArXHJcbiAgXCIgICAgICBpbnB1dHMsXFxuXCIgK1xyXG4gIFwiICAgICAgb3V0cHV0cyxcXG5cIiArXHJcbiAgXCIgICAgICBwYXJhbWV0ZXJzXFxuXCIgK1xyXG4gIFwiICApe1xcblwiICtcclxuICBcIiAgICAgIC8vY29uc29sZS5kZWJ1ZyhcXFwiQXVkaW8gc291cmNlIHdvcmtsZXQ6IHByb2Nlc3MgXFxcIitvdXRwdXRzLmxlbmd0aCsgXFxcIiBvdXRwdXQgYnVmZmVycy5cXFwiKTtcXG5cIiArXHJcbiAgXCIgICAgICAvLyBjb3B5IHJpbmcgYnVmZmVyIGRhdGEgdG8gb3V0cHV0c1xcblwiICtcclxuICBcIiAgICAgICAgaWYoIXRoaXMucnVubmluZyB8fCB0aGlzLnN0YWxsZWQpe1xcblwiICtcclxuICBcIiAgICAgICAgICAgIGlmKHRoaXMuZW5kT2ZTdHJlYW0pIHtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgdGhpcy5lbmRlZCA9IHRydWU7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7ZXZlbnRUeXBlOiAnZW5kZWQnfSk7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgfVxcblwiICtcclxuICBcIiAgICAgICAgICByZXR1cm4gIXRoaXMuZW5kZWQgJiYgIXRoaXMuc3RvcHBlZDtcXG5cIiArXHJcbiAgXCIgICAgICAgIH1cXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCIgICAgICAgIGxldCBvdXRwdXQ9b3V0cHV0c1swXTtcXG5cIiArXHJcbiAgXCIgICAgICAgIGxldCBjaHM9b3V0cHV0Lmxlbmd0aDtcXG5cIiArXHJcbiAgXCIgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcXFwiQXVkaW8gc291cmNlIHdvcmtsZXQ6IE91dHB1dCBjaGFubmVsczogXFxcIitjaHMpO1xcblwiICtcclxuICBcIiAgICAgICAgaWYoY2hzPjApIHtcXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCIgICAgICAgICAgbGV0IG91dENoMCA9IG91dHB1dFswXTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgbGV0IG91dENoTGVuID0gb3V0Q2gwLmxlbmd0aDtcXG5cIiArXHJcbiAgXCJcXG5cIiArXHJcbiAgXCIgICAgICAgICAgaWYoIXRoaXMuY3VycmVudEF1ZGlvQnVmZmVyKXtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAvLyBnZXQgZmlyc3QgYnVmZmVyXFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgbGV0IG54dEJ1ZmY9dGhpcy5hdWRpb0J1ZmZlcnMuc2hpZnQoKTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICBpZihueHRCdWZmKSB7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdWRpb0J1ZmZlciA9IG54dEJ1ZmY7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdWRpb0J1ZmZlckZyYW1lUG9zPTA7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdWRpb0J1ZmZlckF2YWlsPXRoaXMuY3VycmVudEF1ZGlvQnVmZmVyWzBdLmxlbmd0aDtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICB9ZWxzZXtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xcblwiICtcclxuICBcIiAgICAgICAgICAgIH1cXG5cIiArXHJcbiAgXCIgICAgICAgICAgfVxcblwiICtcclxuICBcIlxcblwiICtcclxuICBcIiAgICAgICAgICBsZXQgY29waWVkPTA7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgIGRve1xcblwiICtcclxuICBcIiAgICAgICAgICAgIGlmKHRoaXMuY3VycmVudEF1ZGlvQnVmZmVyQXZhaWw9PT0wKXtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgIGxldCBueHRCdWZmPXRoaXMuYXVkaW9CdWZmZXJzLnNoaWZ0KCk7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICBpZihueHRCdWZmKXtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXVkaW9CdWZmZXI9bnh0QnVmZjtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50QXVkaW9CdWZmZXJGcmFtZVBvcz0wO1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdWRpb0J1ZmZlckF2YWlsPXRoaXMuY3VycmVudEF1ZGlvQnVmZmVyWzBdLmxlbmd0aDtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFxcXCJOZXh0IGJ1ZmZlciB3aXRoIFxcXCIrdGhpcy5jdXJyZW50QXVkaW9CdWZmZXJBdmFpbCsgXFxcIiBmcmFtZXNcXFwiKTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHtldmVudFR5cGU6J2J1ZmZlck5vdGlmaWNhdGlvbicsZmlsbGVkRnJhbWVzOnRoaXMuZmlsbGVkRnJhbWVzfSk7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB9ZWxzZXtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgaWYodGhpcy5lbmRPZlN0cmVhbSkge1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgICAgIHRoaXMuZW5kZWQgPSB0cnVlO1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7ZXZlbnRUeXBlOiAnZW5kZWQnfSk7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFxcXCJTdHJlYW0gZW5kZWRcXFwiKTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgfWVsc2V7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICAgICAgaWYoIXRoaXMuc3RhbGxlZCkge1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgICAgICAgdGhpcy5zdGFsbGVkID0gdHJ1ZTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7ZXZlbnRUeXBlOiAnc3RhbGxlZCd9KTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgICB9XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICAgIH1cXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgICAgYnJlYWs7XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB9XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgfVxcblwiICtcclxuICBcIiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcXFwib3V0Q2hMZW46IFxcXCIrb3V0Q2hMZW4rXFxcIiwgY29waWVkOiBcXFwiK2NvcGllZCtcXFwiLCBjdXJyZW50IGF2YWlsOiBcXFwiK3RoaXMuY3VycmVudEF1ZGlvQnVmZmVyQXZhaWwpO1xcblwiICtcclxuICBcIiAgICAgICAgICAgIGxldCB0b0NvcHk9b3V0Q2hMZW4tY29waWVkO1xcblwiICtcclxuICBcIiAgICAgICAgICAgIGlmKHRvQ29weT50aGlzLmN1cnJlbnRBdWRpb0J1ZmZlckF2YWlsKXtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgIHRvQ29weT10aGlzLmN1cnJlbnRBdWRpb0J1ZmZlckF2YWlsO1xcblwiICtcclxuICBcIiAgICAgICAgICAgIH1cXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXFxcIkNvcHkgXFxcIit0b0NvcHkrXFxcIiBmcmFtZXMuLi5cXFwiKTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICAgIGxldCBvdXRDaD1vdXRwdXRbY2hdO1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b0NvcHk7IGkrKykge1xcblwiICtcclxuICBcIiAgICAgICAgICAgICAgICBvdXRDaFtjb3BpZWQraV09dGhpcy5jdXJyZW50QXVkaW9CdWZmZXJbY2hdW3RoaXMuY3VycmVudEF1ZGlvQnVmZmVyRnJhbWVQb3MraV07XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgICB9XFxuXCIgK1xyXG4gIFwiICAgICAgICAgICAgfVxcblwiICtcclxuICBcIiAgICAgICAgICAgIGNvcGllZCs9dG9Db3B5O1xcblwiICtcclxuICBcIiAgICAgICAgICAgIHRoaXMuY3VycmVudEF1ZGlvQnVmZmVyRnJhbWVQb3MrPXRvQ29weTtcXG5cIiArXHJcbiAgXCIgICAgICAgICAgICB0aGlzLmN1cnJlbnRBdWRpb0J1ZmZlckF2YWlsLT10b0NvcHk7XFxuXCIgK1xyXG4gIFwiXFxuXCIgK1xyXG4gIFwiICAgICAgICAgIH13aGlsZShjb3BpZWQ8b3V0Q2hMZW4pO1xcblwiICtcclxuICBcIiAgICAgICAgICB0aGlzLmZpbGxlZEZyYW1lcy09Y29waWVkO1xcblwiICtcclxuICBcIiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXFxcIkNvcGllZCBcXFwiK2NvcGllZCtcXFwiIGZyYW1lcy5cXFwiKTtcXG5cIiArXHJcbiAgXCIgICAgICAgIH1cXG5cIiArXHJcbiAgXCIgICAgIHJldHVybiAhdGhpcy5lbmRlZDtcXG5cIiArXHJcbiAgXCIgIH1cXG5cIiArXHJcbiAgXCJ9XFxuXCIgK1xyXG4gIFwiXFxuXCIgK1xyXG4gIFwicmVnaXN0ZXJQcm9jZXNzb3IoJ2F1ZGlvLXNvdXJjZS13b3JrbGV0JyxBdWRpb1NvdXJjZVByb2Nlc3Nvcik7XFxuXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXVkaW9Tb3VyY2VXb3JrbGV0TW9kdWxlTG9hZGVye1xyXG5cclxuICBwcml2YXRlIHN0YXRpYyBtb2R1bGVMb2FkZWQ9ZmFsc2U7XHJcblxyXG4gIHN0YXRpYyBsb2FkTW9kdWxlKGNvbnRleHQ6IEF1ZGlvQ29udGV4dCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgaWYgKEF1ZGlvU291cmNlV29ya2xldE1vZHVsZUxvYWRlci5tb2R1bGVMb2FkZWQpIHtcclxuICAgICAgICByZXNvbHZlLmNhbGwoc2VsZik7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgYXVkaW9Xb3JrbGV0TW9kdWxlQmxvYiA9IG5ldyBCbG9iKFthc3dwU3RyXSwge3R5cGU6ICd0ZXh0L2phdmFzY3JpcHQnfSk7XHJcbiAgICAgICAgY29uc3QgYXVkaW9Xb3JrbGV0TW9kdWxlQmxvYlVybCA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGF1ZGlvV29ya2xldE1vZHVsZUJsb2IpO1xyXG4gICAgICAgIGNvbnRleHQuYXVkaW9Xb3JrbGV0LmFkZE1vZHVsZShhdWRpb1dvcmtsZXRNb2R1bGVCbG9iVXJsKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgIEF1ZGlvU291cmNlV29ya2xldE1vZHVsZUxvYWRlci5tb2R1bGVMb2FkZWQgPSB0cnVlO1xyXG4gICAgICAgICAgcmVzb2x2ZS5jYWxsKHNlbGYpO1xyXG4gICAgICAgIH0pLmNhdGNoKChyZWFzb24pID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVhc29uKTtcclxuICAgICAgICAgIHJlamVjdC5jYWxsKHJlYXNvbik7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { AsyncEditFloat32ArrayInputStream } from "../../io/stream";
|
|
2
|
-
import { IndexedDbAudioInputStream } from "../inddb_audio_buffer";
|
|
3
|
-
import { ArrayAudioBufferSourceNode } from "./array_audio_buffer_source_node";
|
|
4
|
-
import { EMPTY, expand, Observable } from "rxjs";
|
|
5
|
-
import { AudioSourceNode } from "./audio_source_node";
|
|
6
|
-
export class IndexedDbAudioBufferSourceNode extends AudioSourceNode {
|
|
7
|
-
constructor(context) {
|
|
8
|
-
super(context, 'audio-source-worklet');
|
|
9
|
-
this._bufferFillSeconds = AudioSourceNode.DEFAULT_BUFFER_FILL_SECONDS;
|
|
10
|
-
this.bufferFillFrames = 0;
|
|
11
|
-
this._streamReadFrameLen = AudioSourceNode.DEFAULT_STREAM_READ_FRAME_LEN * 8; // Much overhead fetching small buffers from indexed db, use larger buffer (8192).
|
|
12
|
-
this._inddbAudioBuffer = null;
|
|
13
|
-
this._audioInputStream = null;
|
|
14
|
-
this._aisBufs = null;
|
|
15
|
-
this._active = false;
|
|
16
|
-
this._endOfStream = false;
|
|
17
|
-
this.filledFrames = 0;
|
|
18
|
-
this.channelCountMode = 'explicit';
|
|
19
|
-
this.port.onmessage = (msgEv) => {
|
|
20
|
-
if (msgEv.data) {
|
|
21
|
-
let evType = msgEv.data.eventType;
|
|
22
|
-
if (evType) {
|
|
23
|
-
if ('bufferNotification' === evType) {
|
|
24
|
-
this.filledFrames = msgEv.data.filledFrames;
|
|
25
|
-
if (!this._endOfStream) {
|
|
26
|
-
this.fillBufferObs().subscribe();
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
else if ('ended' === evType) {
|
|
30
|
-
//console.debug("Inddb audio source ended playback.");
|
|
31
|
-
let drainTime = 0;
|
|
32
|
-
if (this._inddbAudioBuffer?.sampleRate) {
|
|
33
|
-
drainTime = ArrayAudioBufferSourceNode.QUANTUM_FRAME_LEN / this._inddbAudioBuffer.sampleRate;
|
|
34
|
-
}
|
|
35
|
-
//let dstAny:any=this.context.destination;
|
|
36
|
-
//console.debug('Destination node tail-time: '+dstAny['tail-time']);
|
|
37
|
-
window.setTimeout(() => {
|
|
38
|
-
this.onended?.call(this);
|
|
39
|
-
}, drainTime * 1000);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
fillBufferObs(frameOffset) {
|
|
46
|
-
let obs = new Observable(subscriber => {
|
|
47
|
-
if (frameOffset) {
|
|
48
|
-
subscriber.error(new Error("Starting playback from position not equal zero not supported yet."));
|
|
49
|
-
}
|
|
50
|
-
else {
|
|
51
|
-
let filled = this.filledFrames;
|
|
52
|
-
let bufLen = 0;
|
|
53
|
-
if (this._audioInputStream && this._aisBufs) {
|
|
54
|
-
this._audioInputStream.readObs(this._aisBufs).pipe(expand((read) => {
|
|
55
|
-
if (read && this._aisBufs) {
|
|
56
|
-
let trBuffers = new Array(this.channelCount);
|
|
57
|
-
for (let ch = 0; ch < this.channelCount; ch++) {
|
|
58
|
-
let adCh = this._aisBufs[ch];
|
|
59
|
-
let adChCopy = new Float32Array(read);
|
|
60
|
-
bufLen = adChCopy.length;
|
|
61
|
-
if (read === adCh.length) {
|
|
62
|
-
adChCopy.set(adCh);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
// Note: slice() does not work here, since it returns a shallow copy.
|
|
66
|
-
for (let i = 0; i < read; i++) {
|
|
67
|
-
adChCopy[i] = adCh[i];
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
trBuffers[ch] = adChCopy.buffer;
|
|
71
|
-
}
|
|
72
|
-
this.port.postMessage({
|
|
73
|
-
cmd: 'data',
|
|
74
|
-
chs: this.channelCount,
|
|
75
|
-
audioData: trBuffers
|
|
76
|
-
}, trBuffers);
|
|
77
|
-
filled += read;
|
|
78
|
-
//console.debug("IndexedDbAudioBufferSourceNode::fillBufferObs: Sent "+read+" frames to audio source worklet. Filled: "+filled+", to fill: "+this.bufferFillFrames);
|
|
79
|
-
if (this._audioInputStream && filled < this.bufferFillFrames) {
|
|
80
|
-
//console.debug("IndexedDbAudioBufferSourceNode::fillBufferObs: Next inddb audio input stream readObs");
|
|
81
|
-
return this._audioInputStream.readObs(this._aisBufs);
|
|
82
|
-
}
|
|
83
|
-
else {
|
|
84
|
-
//console.debug("Return EMPTY");
|
|
85
|
-
return EMPTY;
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
else {
|
|
89
|
-
//console.debug("IndexedDbAudioBufferSourceNode::fillBufferObs: Return EMPTY (read: "+read+")");
|
|
90
|
-
this._endOfStream = true;
|
|
91
|
-
this.port.postMessage({
|
|
92
|
-
cmd: 'endOfStream'
|
|
93
|
-
});
|
|
94
|
-
return EMPTY;
|
|
95
|
-
}
|
|
96
|
-
})).subscribe(subscriber);
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
});
|
|
100
|
-
return obs;
|
|
101
|
-
}
|
|
102
|
-
get inddbAudioBuffer() {
|
|
103
|
-
return this._inddbAudioBuffer;
|
|
104
|
-
}
|
|
105
|
-
set inddbAudioBuffer(value) {
|
|
106
|
-
this._inddbAudioBuffer = value;
|
|
107
|
-
if (this._inddbAudioBuffer?.channelCount) {
|
|
108
|
-
this.channelCount = this._inddbAudioBuffer?.channelCount;
|
|
109
|
-
this.bufferFillFrames = this._inddbAudioBuffer.sampleRate * this._bufferFillSeconds;
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
get bufferFillSeconds() {
|
|
113
|
-
return this._bufferFillSeconds;
|
|
114
|
-
}
|
|
115
|
-
set bufferFillSeconds(value) {
|
|
116
|
-
this._bufferFillSeconds = value;
|
|
117
|
-
}
|
|
118
|
-
start(when, offset, duration) {
|
|
119
|
-
if (when) {
|
|
120
|
-
throw Error("when parameter currently not supported by IndexedDbAudioBufferSourceNode class");
|
|
121
|
-
}
|
|
122
|
-
if (this._inddbAudioBuffer) {
|
|
123
|
-
let arrAis = new IndexedDbAudioInputStream(this._inddbAudioBuffer);
|
|
124
|
-
if (offset === undefined && duration === undefined) {
|
|
125
|
-
this._audioInputStream = arrAis;
|
|
126
|
-
}
|
|
127
|
-
else {
|
|
128
|
-
let offsetFrames = 0;
|
|
129
|
-
let durationFrames = undefined;
|
|
130
|
-
if (offset !== undefined) {
|
|
131
|
-
offsetFrames = Math.floor(offset * this._inddbAudioBuffer.sampleRate);
|
|
132
|
-
}
|
|
133
|
-
if (duration !== undefined) {
|
|
134
|
-
durationFrames = Math.floor(duration * this._inddbAudioBuffer.sampleRate);
|
|
135
|
-
}
|
|
136
|
-
//console.debug("Create AsyncEditFloat32ArrayInputStream: offsetFrames:"+offsetFrames+", durationFrames:"+durationFrames);
|
|
137
|
-
this._audioInputStream = new AsyncEditFloat32ArrayInputStream(arrAis, offsetFrames, durationFrames);
|
|
138
|
-
}
|
|
139
|
-
let chs = this._inddbAudioBuffer.channelCount;
|
|
140
|
-
this._aisBufs = new Array(chs);
|
|
141
|
-
for (let ch = 0; ch < chs; ch++) {
|
|
142
|
-
this._aisBufs[ch] = new Float32Array(this._streamReadFrameLen);
|
|
143
|
-
}
|
|
144
|
-
this.fillBufferObs().subscribe({
|
|
145
|
-
complete: () => {
|
|
146
|
-
//console.debug("IndexedDbAudioBufferSourceNode::start: Async play buffer fill completed. Sending start command to audio worklet.");
|
|
147
|
-
if (this._active) {
|
|
148
|
-
this.port.postMessage({ cmd: 'start' });
|
|
149
|
-
if (offset) {
|
|
150
|
-
this._playStartTime = this.context.currentTime - offset;
|
|
151
|
-
}
|
|
152
|
-
else {
|
|
153
|
-
this._playStartTime = this.context.currentTime;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
}
|
|
157
|
-
});
|
|
158
|
-
this._active = true;
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
stop() {
|
|
162
|
-
this._active = false;
|
|
163
|
-
this.port.postMessage({ cmd: 'stop' });
|
|
164
|
-
this.onended?.call(this);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZGJfYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BsYXliYWNrL2luZGRiX2F1ZGlvX2J1ZmZlcl9zb3VyY2Vfbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0NBQWdDLEVBQStCLE1BQU0saUJBQWlCLENBQUM7QUFDL0YsT0FBTyxFQUF1Qix5QkFBeUIsRUFBQyxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBQywwQkFBMEIsRUFBQyxNQUFNLGtDQUFrQyxDQUFDO0FBQzVFLE9BQU8sRUFBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUMvQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0scUJBQXFCLENBQUM7QUFFcEQsTUFBTSxPQUFPLDhCQUErQixTQUFRLGVBQWU7SUFZakUsWUFBWSxPQUFxQjtRQUUvQixLQUFLLENBQUMsT0FBTyxFQUFFLHNCQUFzQixDQUFDLENBQUM7UUFaakMsdUJBQWtCLEdBQUcsZUFBZSxDQUFDLDJCQUEyQixDQUFDO1FBQ2pFLHFCQUFnQixHQUFHLENBQUMsQ0FBQztRQUNyQix3QkFBbUIsR0FBQyxlQUFlLENBQUMsNkJBQTZCLEdBQUcsQ0FBQyxDQUFDLENBQUUsa0ZBQWtGO1FBQzFKLHNCQUFpQixHQUEyQixJQUFJLENBQUM7UUFDakQsc0JBQWlCLEdBQW1DLElBQUksQ0FBQztRQUN6RCxhQUFRLEdBQXFCLElBQUksQ0FBQztRQUNsQyxZQUFPLEdBQUMsS0FBSyxDQUFDO1FBQ2QsaUJBQVksR0FBQyxLQUFLLENBQUM7UUFDbkIsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFLdkIsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQztRQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFD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QkFDSCxDQUFDO2FBQ0YsQ0FBQyxDQUFBO1lBQ0osSUFBSSxDQUFDLE9BQU8sR0FBQyxJQUFJLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBQyxLQUFLLENBQUM7UUFDbkIsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBQyxHQUFHLEVBQUUsTUFBTSxFQUFDLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jRWRpdEZsb2F0MzJBcnJheUlucHV0U3RyZWFtLCBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtfSBmcm9tIFwiLi4vLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7SW5kZXhlZERiQXVkaW9CdWZmZXIsIEluZGV4ZWREYkF1ZGlvSW5wdXRTdHJlYW19IGZyb20gXCIuLi9pbmRkYl9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyU291cmNlTm9kZX0gZnJvbSBcIi4vYXJyYXlfYXVkaW9fYnVmZmVyX3NvdXJjZV9ub2RlXCI7XHJcbmltcG9ydCB7RU1QVFksIGV4cGFuZCwgT2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuaW1wb3J0IHtBdWRpb1NvdXJjZU5vZGV9IGZyb20gXCIuL2F1ZGlvX3NvdXJjZV9ub2RlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgSW5kZXhlZERiQXVkaW9CdWZmZXJTb3VyY2VOb2RlIGV4dGVuZHMgQXVkaW9Tb3VyY2VOb2RlIHtcclxuXHJcbiAgcHJpdmF0ZSBfYnVmZmVyRmlsbFNlY29uZHMgPSBBdWRpb1NvdXJjZU5vZGUuREVGQVVMVF9CVUZGRVJfRklMTF9TRUNPTkRTO1xyXG4gIHByaXZhdGUgYnVmZmVyRmlsbEZyYW1lcyA9IDA7XHJcbiAgcHJpdmF0ZSBfc3RyZWFtUmVhZEZyYW1lTGVuPUF1ZGlvU291cmNlTm9kZS5ERUZBVUxUX1NUUkVBTV9SRUFEX0ZSQU1FX0xFTiAqIDg7ICAvLyBNdWNoIG92ZXJoZWFkIGZldGNoaW5nIHNtYWxsIGJ1ZmZlcnMgZnJvbSBpbmRleGVkIGRiLCB1c2UgbGFyZ2VyIGJ1ZmZlciAoODE5MikuXHJcbiAgcHJpdmF0ZSBfaW5kZGJBdWRpb0J1ZmZlcjpJbmRleGVkRGJBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBfYXVkaW9JbnB1dFN0cmVhbTpBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtfG51bGw9bnVsbDtcclxuICBwcml2YXRlIF9haXNCdWZzOkZsb2F0MzJBcnJheVtdfG51bGw9bnVsbDtcclxuICBwcml2YXRlIF9hY3RpdmU9ZmFsc2U7XHJcbiAgcHJpdmF0ZSBfZW5kT2ZTdHJlYW09ZmFsc2U7XHJcbiAgcHJpdmF0ZSBmaWxsZWRGcmFtZXMgPSAwO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihjb250ZXh0OiBBdWRpb0NvbnRleHQpIHtcclxuXHJcbiAgICBzdXBlcihjb250ZXh0LCAnYXVkaW8tc291cmNlLXdvcmtsZXQnKTtcclxuICAgIHRoaXMuY2hhbm5lbENvdW50TW9kZSA9ICdleHBsaWNpdCc7XHJcbiAgICB0aGlzLnBvcnQub25tZXNzYWdlID0gKG1zZ0V2OiBNZXNzYWdlRXZlbnQpID0+IHtcclxuICAgICAgaWYgKG1zZ0V2LmRhdGEpIHtcclxuICAgICAgICBsZXQgZXZUeXBlID0gbXNnRXYuZGF0YS5ldmVudFR5cGU7XHJcbiAgICAgICAgaWYgKGV2VHlwZSkge1xyXG4gICAgICAgICAgaWYgKCdidWZmZXJOb3RpZmljYXRpb24nID09PSBldlR5cGUpIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsZWRGcmFtZXMgPSBtc2dFdi5kYXRhLmZpbGxlZEZyYW1lcztcclxuICAgICAgICAgICAgaWYoIXRoaXMuX2VuZE9mU3RyZWFtKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWxsQnVmZmVyT2JzKCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0gZWxzZSBpZiAoJ2VuZGVkJyA9PT0gZXZUeXBlKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkluZGRiIGF1ZGlvIHNvdXJjZSBlbmRlZCBwbGF5YmFjay5cIik7XHJcbiAgICAgICAgICAgIGxldCBkcmFpblRpbWUgPSAwO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5faW5kZGJBdWRpb0J1ZmZlcj8uc2FtcGxlUmF0ZSkge1xyXG4gICAgICAgICAgICAgIGRyYWluVGltZSA9IEFycmF5QXVkaW9CdWZmZXJTb3VyY2VOb2RlLlFVQU5UVU1fRlJBTUVfTEVOIC8gdGhpcy5faW5kZGJBdWRpb0J1ZmZlci5zYW1wbGVSYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIC8vbGV0IGRzdEFueTphbnk9dGhpcy5jb250ZXh0LmRlc3RpbmF0aW9uO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ0Rlc3RpbmF0aW9uIG5vZGUgdGFpbC10aW1lOiAnK2RzdEFueVsndGFpbC10aW1lJ10pO1xyXG4gICAgICAgICAgICB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5vbmVuZGVkPy5jYWxsKHRoaXMpO1xyXG4gICAgICAgICAgICB9LCBkcmFpblRpbWUgKiAxMDAwKTtcclxuXHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGZpbGxCdWZmZXJPYnMoZnJhbWVPZmZzZXQ/Om51bWJlcik6T2JzZXJ2YWJsZTxudW1iZXJ8bnVsbD4ge1xyXG5cclxuICAgICAgbGV0IG9icyA9IG5ldyBPYnNlcnZhYmxlPG51bWJlciB8IG51bGw+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICAgIGlmKGZyYW1lT2Zmc2V0KXtcclxuICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IobmV3IEVycm9yKFwiU3RhcnRpbmcgcGxheWJhY2sgZnJvbSBwb3NpdGlvbiBub3QgZXF1YWwgemVybyBub3Qgc3VwcG9ydGVkIHlldC5cIikpO1xyXG4gICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgIGxldCBmaWxsZWQgPSB0aGlzLmZpbGxlZEZyYW1lcztcclxuICAgICAgICAgIGxldCBidWZMZW4gPSAwO1xyXG4gICAgICAgICAgaWYgKHRoaXMuX2F1ZGlvSW5wdXRTdHJlYW0gJiYgdGhpcy5fYWlzQnVmcykge1xyXG4gICAgICAgICAgICB0aGlzLl9hdWRpb0lucHV0U3RyZWFtLnJlYWRPYnModGhpcy5fYWlzQnVmcykucGlwZShcclxuICAgICAgICAgICAgICBleHBhbmQoKHJlYWQpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHJlYWQgJiYgdGhpcy5fYWlzQnVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCB0ckJ1ZmZlcnMgPSBuZXcgQXJyYXk8YW55Pih0aGlzLmNoYW5uZWxDb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgY2ggPSAwOyBjaCA8IHRoaXMuY2hhbm5lbENvdW50OyBjaCsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBsZXQgYWRDaCA9IHRoaXMuX2Fpc0J1ZnNbY2hdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgbGV0IGFkQ2hDb3B5ID0gbmV3IEZsb2F0MzJBcnJheShyZWFkKTtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ1ZkxlbiA9IGFkQ2hDb3B5Lmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmKHJlYWQ9PT1hZENoLmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhZENoQ29weS5zZXQoYWRDaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gTm90ZTogc2xpY2UoKSBkb2VzIG5vdCB3b3JrIGhlcmUsIHNpbmNlIGl0IHJldHVybnMgYSBzaGFsbG93IGNvcHkuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaT0wO2k8cmVhZDtpKyspe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGFkQ2hDb3B5W2ldPWFkQ2hbaV07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIHRyQnVmZmVyc1tjaF0gPSBhZENoQ29weS5idWZmZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjbWQ6ICdkYXRhJyxcclxuICAgICAgICAgICAgICAgICAgICAgIGNoczogdGhpcy5jaGFubmVsQ291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICBhdWRpb0RhdGE6IHRyQnVmZmVyc1xyXG4gICAgICAgICAgICAgICAgICAgIH0sIHRyQnVmZmVycyk7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsbGVkICs9IHJlYWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiSW5kZXhlZERiQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpmaWxsQnVmZmVyT2JzOiBTZW50IFwiK3JlYWQrXCIgZnJhbWVzIHRvIGF1ZGlvIHNvdXJjZSB3b3JrbGV0LiBGaWxsZWQ6IFwiK2ZpbGxlZCtcIiwgdG8gZmlsbDogXCIrdGhpcy5idWZmZXJGaWxsRnJhbWVzKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fYXVkaW9JbnB1dFN0cmVhbSAmJiBmaWxsZWQgPCB0aGlzLmJ1ZmZlckZpbGxGcmFtZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkluZGV4ZWREYkF1ZGlvQnVmZmVyU291cmNlTm9kZTo6ZmlsbEJ1ZmZlck9iczogTmV4dCBpbmRkYiBhdWRpbyBpbnB1dCBzdHJlYW0gcmVhZE9ic1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0lucHV0U3RyZWFtLnJlYWRPYnModGhpcy5fYWlzQnVmcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIlJldHVybiBFTVBUWVwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiSW5kZXhlZERiQXVkaW9CdWZmZXJTb3VyY2VOb2RlOjpmaWxsQnVmZmVyT2JzOiBSZXR1cm4gRU1QVFkgKHJlYWQ6IFwiK3JlYWQrXCIpXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2VuZE9mU3RyZWFtPXRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5wb3J0LnBvc3RNZXNzYWdlKHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNtZDogJ2VuZE9mU3RyZWFtJ1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBFTVBUWTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgICAgcmV0dXJuIG9icztcclxuICB9XHJcblxyXG5cclxuICBnZXQgaW5kZGJBdWRpb0J1ZmZlcigpOiBJbmRleGVkRGJBdWRpb0J1ZmZlciB8IG51bGwge1xyXG4gICAgcmV0dXJuIHRoaXMuX2luZGRiQXVkaW9CdWZmZXJcclxuICB9XHJcblxyXG4gIHNldCBpbmRkYkF1ZGlvQnVmZmVyKHZhbHVlOiBJbmRleGVkRGJBdWRpb0J1ZmZlciB8IG51bGwpIHtcclxuICAgIHRoaXMuX2luZGRiQXVkaW9CdWZmZXIgPSB2YWx1ZTtcclxuICAgIGlmICh0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyPy5jaGFubmVsQ291bnQpIHtcclxuICAgICAgdGhpcy5jaGFubmVsQ291bnQgPSB0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyPy5jaGFubmVsQ291bnQ7XHJcbiAgICAgIHRoaXMuYnVmZmVyRmlsbEZyYW1lcyA9IHRoaXMuX2luZGRiQXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSAqIHRoaXMuX2J1ZmZlckZpbGxTZWNvbmRzO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0IGJ1ZmZlckZpbGxTZWNvbmRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyRmlsbFNlY29uZHM7XHJcbiAgfVxyXG5cclxuICBzZXQgYnVmZmVyRmlsbFNlY29uZHModmFsdWU6IG51bWJlcikge1xyXG4gICAgdGhpcy5fYnVmZmVyRmlsbFNlY29uZHMgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHN0YXJ0KHdoZW4/OiBudW1iZXIgfCB1bmRlZmluZWQsb2Zmc2V0PzogbnVtYmVyIHwgdW5kZWZpbmVkLGR1cmF0aW9uPzogbnVtYmVyIHwgdW5kZWZpbmVkKTogdm9pZCB7XHJcbiAgICBpZiAod2hlbikge1xyXG4gICAgICB0aHJvdyBFcnJvcihcIndoZW4gcGFyYW1ldGVyIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIGJ5IEluZGV4ZWREYkF1ZGlvQnVmZmVyU291cmNlTm9kZSBjbGFzc1wiKVxyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgIGxldCBhcnJBaXM9bmV3IEluZGV4ZWREYkF1ZGlvSW5wdXRTdHJlYW0odGhpcy5faW5kZGJBdWRpb0J1ZmZlcik7XHJcbiAgICAgIGlmKG9mZnNldD09PXVuZGVmaW5lZCAmJiBkdXJhdGlvbj09PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9JbnB1dFN0cmVhbSA9IGFyckFpcztcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgbGV0IG9mZnNldEZyYW1lcz0wO1xyXG4gICAgICAgIGxldCBkdXJhdGlvbkZyYW1lcz11bmRlZmluZWQ7XHJcbiAgICAgICAgaWYob2Zmc2V0IT09dW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICBvZmZzZXRGcmFtZXM9TWF0aC5mbG9vcihvZmZzZXQgKiB0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyLnNhbXBsZVJhdGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZihkdXJhdGlvbiE9PXVuZGVmaW5lZCl7XHJcbiAgICAgICAgICBkdXJhdGlvbkZyYW1lcz1NYXRoLmZsb29yKGR1cmF0aW9uICogdGhpcy5faW5kZGJBdWRpb0J1ZmZlci5zYW1wbGVSYXRlKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQ3JlYXRlIEFzeW5jRWRpdEZsb2F0MzJBcnJheUlucHV0U3RyZWFtOiBvZmZzZXRGcmFtZXM6XCIrb2Zmc2V0RnJhbWVzK1wiLCBkdXJhdGlvbkZyYW1lczpcIitkdXJhdGlvbkZyYW1lcyk7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9JbnB1dFN0cmVhbT1uZXcgQXN5bmNFZGl0RmxvYXQzMkFycmF5SW5wdXRTdHJlYW0oYXJyQWlzLG9mZnNldEZyYW1lcyxkdXJhdGlvbkZyYW1lcyk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGxldCBjaHM9dGhpcy5faW5kZGJBdWRpb0J1ZmZlci5jaGFubmVsQ291bnQ7XHJcbiAgICAgIHRoaXMuX2Fpc0J1ZnM9bmV3IEFycmF5PEZsb2F0MzJBcnJheT4oY2hzKTtcclxuICAgICAgZm9yKGxldCBjaD0wO2NoPGNocztjaCsrKXtcclxuICAgICAgICB0aGlzLl9haXNCdWZzW2NoXT1uZXcgRmxvYXQzMkFycmF5KHRoaXMuX3N0cmVhbVJlYWRGcmFtZUxlbik7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHRoaXMuZmlsbEJ1ZmZlck9icygpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgY29tcGxldGU6ICgpPT57XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJJbmRleGVkRGJBdWRpb0J1ZmZlclNvdXJjZU5vZGU6OnN0YXJ0OiBBc3luYyBwbGF5IGJ1ZmZlciBmaWxsIGNvbXBsZXRlZC4gU2VuZGluZyBzdGFydCBjb21tYW5kIHRvIGF1ZGlvIHdvcmtsZXQuXCIpO1xyXG4gICAgICAgICAgaWYodGhpcy5fYWN0aXZlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucG9ydC5wb3N0TWVzc2FnZSh7Y21kOiAnc3RhcnQnfSk7XHJcbiAgICAgICAgICAgIGlmIChvZmZzZXQpIHtcclxuICAgICAgICAgICAgICB0aGlzLl9wbGF5U3RhcnRUaW1lID0gdGhpcy5jb250ZXh0LmN1cnJlbnRUaW1lIC0gb2Zmc2V0O1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuX3BsYXlTdGFydFRpbWUgPSB0aGlzLmNvbnRleHQuY3VycmVudFRpbWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICB0aGlzLl9hY3RpdmU9dHJ1ZTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHN0b3AoKSB7XHJcbiAgICB0aGlzLl9hY3RpdmU9ZmFsc2U7XHJcbiAgICB0aGlzLnBvcnQucG9zdE1lc3NhZ2Uoe2NtZDogJ3N0b3AnfSk7XHJcbiAgICB0aGlzLm9uZW5kZWQ/LmNhbGwodGhpcyk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuIl19
|