speechrecorderng 3.0.1 → 3.3.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/esm2020/lib/action/action.mjs +2 -1
- package/esm2020/lib/audio/array_audio_buffer.mjs +65 -2
- package/esm2020/lib/audio/array_audio_buffer_input_stream.mjs +2 -2
- package/esm2020/lib/audio/array_audio_buffer_random_access_stream.mjs +16 -0
- package/esm2020/lib/audio/audio_data_holder.mjs +203 -48
- package/esm2020/lib/audio/audio_display.mjs +10 -34
- package/esm2020/lib/audio/audio_player.mjs +18 -45
- package/esm2020/lib/audio/capture/capture.mjs +293 -69
- package/esm2020/lib/audio/dsp/level_measure.mjs +211 -88
- package/esm2020/lib/audio/impl/wavformat.mjs +1 -1
- package/esm2020/lib/audio/impl/wavreader.mjs +134 -0
- package/esm2020/lib/audio/impl/wavwriter.mjs +10 -9
- package/esm2020/lib/audio/inddb_audio_buffer.mjs +508 -0
- package/esm2020/lib/audio/net_audio_buffer.mjs +297 -0
- package/esm2020/lib/audio/persistor.mjs +8 -2
- package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +15 -154
- package/esm2020/lib/audio/playback/audio_source_node.mjs +18 -0
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
- package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +167 -0
- package/esm2020/lib/audio/playback/net_audio_buffer_source_node.mjs +218 -0
- package/esm2020/lib/audio/playback/player.mjs +190 -171
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +35 -76
- package/esm2020/lib/audio/ui/audio_display_control.mjs +12 -24
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +14 -45
- package/esm2020/lib/audio/ui/audiosignal.mjs +333 -267
- package/esm2020/lib/audio/ui/container.mjs +40 -57
- package/esm2020/lib/audio/ui/livelevel.mjs +53 -52
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +5 -19
- package/esm2020/lib/audio/ui/sonagram.mjs +386 -339
- package/esm2020/lib/db/inddb.mjs +120 -0
- package/esm2020/lib/io/BinaryReader.mjs +85 -0
- package/esm2020/lib/io/stream.mjs +101 -1
- package/esm2020/lib/net/uploader.mjs +111 -5
- package/esm2020/lib/recorder_component.mjs +59 -1
- package/esm2020/lib/speechrecorder/project/project.mjs +10 -1
- package/esm2020/lib/speechrecorder/project/project.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/recording.mjs +19 -6
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +213 -0
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +724 -54
- package/esm2020/lib/speechrecorder/script/script.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +358 -184
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +181 -28
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +47 -129
- package/esm2020/lib/speechrecorder/session/item.mjs +13 -1
- package/esm2020/lib/speechrecorder/session/progress.mjs +26 -55
- package/esm2020/lib/speechrecorder/session/prompting.mjs +33 -176
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +6 -6
- package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +10 -10
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +92 -55
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +9 -13
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +9 -18
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +10 -36
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +10 -37
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +80 -56
- package/esm2020/lib/speechrecorder/session/session.service.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +409 -165
- package/esm2020/lib/speechrecorder/session/warning_bar.mjs +6 -29
- package/esm2020/lib/speechrecorder/spruploader.mjs +3 -3
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +6 -41
- package/esm2020/lib/speechrecorderng.component.mjs +42 -31
- package/esm2020/lib/speechrecorderng.module.mjs +5 -5
- package/esm2020/lib/spr.config.mjs +3 -3
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/canvas_layer_comp.mjs +3 -3
- package/esm2020/lib/ui/message_dialog.mjs +7 -7
- package/esm2020/lib/ui/recordingitem_display.mjs +26 -59
- package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +3 -3
- package/esm2020/lib/utils/ua-parser.mjs +28 -4
- package/esm2020/lib/utils/utils.mjs +29 -1
- package/fesm2015/speechrecorderng.mjs +12675 -9136
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +11580 -8050
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/{speechrecorderng.d.ts → index.d.ts} +0 -0
- package/lib/audio/array_audio_buffer.d.ts +17 -1
- package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -0
- package/lib/audio/audio_data_holder.d.ts +69 -14
- package/lib/audio/audio_display.d.ts +1 -1
- package/lib/audio/audio_player.d.ts +3 -7
- package/lib/audio/capture/capture.d.ts +24 -4
- package/lib/audio/dsp/level_measure.d.ts +2 -23
- package/lib/audio/impl/wavformat.d.ts +3 -3
- package/lib/audio/impl/wavreader.d.ts +16 -0
- package/lib/audio/impl/wavwriter.d.ts +1 -4
- package/lib/audio/inddb_audio_buffer.d.ts +68 -0
- package/lib/audio/net_audio_buffer.d.ts +59 -0
- package/lib/audio/persistor.d.ts +3 -9
- package/lib/audio/playback/array_audio_buffer_source_node.d.ts +2 -8
- package/lib/audio/playback/audio_source_node.d.ts +10 -0
- package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -0
- package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -0
- package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -0
- package/lib/audio/playback/player.d.ts +19 -16
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +3 -3
- package/lib/audio/ui/audio_display_control.d.ts +3 -6
- package/lib/audio/ui/audio_display_scroll_pane.d.ts +1 -1
- package/lib/audio/ui/audiosignal.d.ts +4 -3
- package/lib/audio/ui/container.d.ts +1 -1
- package/lib/audio/ui/livelevel.d.ts +11 -4
- package/lib/audio/ui/scroll_pane_horizontal.d.ts +1 -1
- package/lib/audio/ui/sonagram.d.ts +4 -3
- package/lib/db/inddb.d.ts +21 -0
- package/lib/io/BinaryReader.d.ts +18 -0
- package/lib/io/stream.d.ts +18 -0
- package/lib/net/uploader.d.ts +20 -2
- package/lib/recorder_component.d.ts +5 -0
- package/lib/speechrecorder/project/project.d.ts +9 -0
- package/lib/speechrecorder/recording.d.ts +7 -2
- package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -0
- package/lib/speechrecorder/recordings/recordings.service.d.ts +21 -6
- package/lib/speechrecorder/session/audiorecorder.d.ts +7 -18
- package/lib/speechrecorder/session/basicrecorder.d.ts +28 -4
- package/lib/speechrecorder/session/controlpanel.d.ts +7 -7
- package/lib/speechrecorder/session/item.d.ts +1 -0
- package/lib/speechrecorder/session/progress.d.ts +2 -1
- package/lib/speechrecorder/session/prompting.d.ts +5 -5
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +1 -1
- package/lib/speechrecorder/session/recording_list.d.ts +2 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +1 -1
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +4 -5
- package/lib/speechrecorder/session/session_finished_dialog.d.ts +1 -1
- package/lib/speechrecorder/session/sessionmanager.d.ts +10 -10
- package/lib/speechrecorder/session/warning_bar.d.ts +1 -1
- package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +1 -1
- package/lib/speechrecorderng.component.d.ts +2 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +1 -1
- package/lib/ui/message_dialog.d.ts +1 -1
- package/lib/ui/recordingitem_display.d.ts +3 -2
- package/lib/utils/scrollIntoViewToBottom.d.ts +1 -1
- package/lib/utils/ua-parser.d.ts +4 -1
- package/lib/utils/utils.d.ts +6 -0
- package/package.json +5 -4
- package/esm2020/lib/math/utils.mjs +0 -14
- package/esm2020/lib/utils/css_utils.mjs +0 -7
- package/lib/math/utils.d.ts +0 -3
- package/lib/utils/css_utils.d.ts +0 -3
|
@@ -39,6 +39,7 @@ export class Action {
|
|
|
39
39
|
}
|
|
40
40
|
}
|
|
41
41
|
set disabled(disabled) {
|
|
42
|
+
//console.debug("Action: "+this._name+" disabled: "+disabled)
|
|
42
43
|
this._disabled = disabled;
|
|
43
44
|
for (let c of this.controls) {
|
|
44
45
|
c.disabled = this._disabled;
|
|
@@ -69,4 +70,4 @@ export class Action {
|
|
|
69
70
|
}
|
|
70
71
|
}
|
|
71
72
|
}
|
|
72
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
73
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2FjdGlvbi9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFdBQVc7SUFJcEIsWUFBb0IsU0FBYyxJQUFJO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7SUFFdEMsQ0FBQztJQUxELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0NBSUo7QUFNRCxNQUFNLE9BQU8sTUFBTTtJQVlmLFlBQVksSUFBVyxFQUFDLFFBQWEsSUFBSTtRQUx6QyxjQUFTLEdBQUMsSUFBSSxDQUFDO1FBQ1AsY0FBUyxHQUE2QixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUE7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBMEIsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBaEJELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBZ0JELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFpQztRQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRVUsaUJBQWlCLENBQUMsUUFBYyxJQUFJO1FBQzNDLFdBQVc7UUFDWCxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBYyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUMsS0FBSyxDQUFBO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBZ0I7UUFDMUIsNkRBQTZEO1FBQzVELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDL0I7UUFDRCxnREFBZ0Q7UUFDaEQsc0NBQXNDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFzQixFQUFFLGVBQXdCO1FBQ3ZELElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLElBQUksZUFBZSxFQUFFO29CQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7d0JBQ3pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDbkIsQ0FBQyxDQUFDLENBQUM7aUJBQ047YUFDSjtTQUNKO0lBQ0wsQ0FBQztJQUVELGFBQWEsQ0FBQyxJQUFxQjtRQUMvQixJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDUixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztTQUM5QztJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbIlxyXG4gICAgZXhwb3J0IGNsYXNzIEFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdHJ1Y3Rvcihwcml2YXRlIF92YWx1ZTpUfG51bGw9bnVsbCkge1xyXG5cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgZXhwb3J0IGludGVyZmFjZSBBY3Rpb25FdmVudExpc3RlbmVyPFQ+e1xyXG4gICAgICAgIChhZTpBY3Rpb25FdmVudDxUPik6dm9pZDtcclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgY2xhc3MgQWN0aW9uPFQ+IHtcclxuICAgICAgICBnZXQgdmFsdWUoKTogVHxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3ZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJpdmF0ZSBfbmFtZTpzdHJpbmc7XHJcbiAgICAgICAgcHJpdmF0ZSBfdmFsdWU6VHxudWxsO1xyXG4gICAgICAgIF9kaXNhYmxlZD10cnVlO1xyXG4gICAgICAgIHByaXZhdGUgX29uQWN0aW9uOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbD1udWxsO1xyXG4gICAgICAgIGxpc3RlbmVyczpBcnJheTxBY3Rpb25FdmVudExpc3RlbmVyPFQ+PjtcclxuICAgICAgICBwcml2YXRlIGNvbnRyb2xzOkhUTUxJbnB1dEVsZW1lbnRbXTtcclxuXHJcbiAgICAgICAgY29uc3RydWN0b3IobmFtZTpzdHJpbmcsdmFsdWU6VHxudWxsPW51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWU7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIHRoaXMubGlzdGVuZXJzID0gbmV3IEFycmF5PEFjdGlvbkV2ZW50TGlzdGVuZXI8VD4+KCk7XHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbHMgPSBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBuYW1lKCk6c3RyaW5nIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25hbWU7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgZ2V0IG9uQWN0aW9uKCk6QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX29uQWN0aW9uO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0IG9uQWN0aW9uKHZhbHVlOkFjdGlvbkV2ZW50TGlzdGVuZXI8VD58bnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9vbkFjdGlvbiA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcHJvdGVjdGVkICBjcmVhdGVBY3Rpb25FdmVudCh2YWx1ZTogVHxudWxsPW51bGwpOkFjdGlvbkV2ZW50PFQ+IHtcclxuICAgICAgICAgICAgLy8gZGVmYXVsdDpcclxuICAgICAgICAgICAgcmV0dXJuIG5ldyBBY3Rpb25FdmVudCh2YWx1ZSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwZXJmb3JtKHZhbHVlOiBUfG51bGw9bnVsbCk6dm9pZCB7XHJcbiAgICAgICAgICAgIHRoaXMuX3ZhbHVlPXZhbHVlXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCAmJiB0aGlzLl9vbkFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgbGV0IGFlPXRoaXMuY3JlYXRlQWN0aW9uRXZlbnQodmFsdWUpXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkFjdGlvbihhZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNldCBkaXNhYmxlZChkaXNhYmxlZDpib29sZWFuKSB7XHJcbiAgICAgICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQWN0aW9uOiBcIit0aGlzLl9uYW1lK1wiIGRpc2FibGVkOiBcIitkaXNhYmxlZClcclxuICAgICAgICAgICAgdGhpcy5fZGlzYWJsZWQgPSBkaXNhYmxlZDtcclxuICAgICAgICAgICAgZm9yIChsZXQgYyBvZiB0aGlzLmNvbnRyb2xzKSB7XHJcbiAgICAgICAgICAgICAgICBjLmRpc2FibGVkID0gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy9sZXQgZGlzU3RyPXRoaXMuZGlzYWJsZWQ/XCJkaXNhYmxlZFwiOlwiZW5hYmxlZFwiO1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKHRoaXMuX25hbWUrXCI6IFwiK2Rpc1N0cik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBnZXQgZGlzYWJsZWQoKTpib29sZWFuIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2Rpc2FibGVkO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgYWRkQ29udHJvbChjdHJsOiBIVE1MSW5wdXRFbGVtZW50LCBhY3Rpb25FdmVudE5hbWU/OiBzdHJpbmcpIHtcclxuICAgICAgICAgICAgaWYgKGN0cmwpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbnRyb2xzLmluZGV4T2YoY3RybCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY3RybC5kaXNhYmxlZCA9IHRoaXMuZGlzYWJsZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250cm9scy5wdXNoKGN0cmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb25FdmVudE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY3RybC5hZGRFdmVudExpc3RlbmVyKGFjdGlvbkV2ZW50TmFtZSwgKGUpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucGVyZm9ybSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJlbW92ZUNvbnRyb2woY3RybDpIVE1MSW5wdXRFbGVtZW50KSB7XHJcbiAgICAgICAgICAgIHZhciBpID0gdGhpcy5jb250cm9scy5pbmRleE9mKGN0cmwpO1xyXG4gICAgICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzID0gdGhpcy5jb250cm9scy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4iXX0=
|
|
@@ -1,10 +1,23 @@
|
|
|
1
|
-
|
|
1
|
+
import { BasicAudioSource } from "./audio_data_holder";
|
|
2
|
+
import { Observable } from "rxjs";
|
|
3
|
+
import { ArrayAudioBufferRandomAccessStream } from "./array_audio_buffer_random_access_stream";
|
|
4
|
+
import { ArrayAudioBufferInputStream } from "./array_audio_buffer_input_stream";
|
|
5
|
+
export class ArrayAudioBuffer extends BasicAudioSource {
|
|
2
6
|
constructor(_channelCount, _sampleRate, _data) {
|
|
7
|
+
super();
|
|
3
8
|
this._channelCount = _channelCount;
|
|
4
9
|
this._sampleRate = _sampleRate;
|
|
5
10
|
this._data = _data;
|
|
6
11
|
this._chunkCount = 0;
|
|
7
12
|
this._frameLen = 0;
|
|
13
|
+
this._duration = 0;
|
|
14
|
+
this._sealed = false;
|
|
15
|
+
this.updateFrameLen();
|
|
16
|
+
this.ready();
|
|
17
|
+
}
|
|
18
|
+
updateFrameLen() {
|
|
19
|
+
this._frameLen = 0;
|
|
20
|
+
this._chunkCount = 0;
|
|
8
21
|
if (this._data.length > 0) {
|
|
9
22
|
let ch0Data = this.data[0];
|
|
10
23
|
for (let ch0Chk of ch0Data) {
|
|
@@ -12,6 +25,13 @@ export class ArrayAudioBuffer {
|
|
|
12
25
|
this._frameLen += ch0Chk.length;
|
|
13
26
|
}
|
|
14
27
|
}
|
|
28
|
+
this._duration = this._frameLen / this._sampleRate;
|
|
29
|
+
}
|
|
30
|
+
seal() {
|
|
31
|
+
this._sealed = true;
|
|
32
|
+
}
|
|
33
|
+
sealed() {
|
|
34
|
+
return this._sealed;
|
|
15
35
|
}
|
|
16
36
|
static fromAudioBuffer(audioBuffer, chunkFrameSize = 8192) {
|
|
17
37
|
let aab;
|
|
@@ -39,6 +59,22 @@ export class ArrayAudioBuffer {
|
|
|
39
59
|
aab = new ArrayAudioBuffer(chs, audioBuffer.sampleRate, data);
|
|
40
60
|
return aab;
|
|
41
61
|
}
|
|
62
|
+
appendAudioBuffer(audioBuffer) {
|
|
63
|
+
let chs = audioBuffer.numberOfChannels;
|
|
64
|
+
if (this._channelCount !== chs) {
|
|
65
|
+
throw new Error('Cannot append audio buffer with ' + chs + ' channels to this array audio buffer with ' + this._channelCount + ' channels. Number of channels must match.');
|
|
66
|
+
}
|
|
67
|
+
let sr = audioBuffer.sampleRate;
|
|
68
|
+
if (sr !== this._sampleRate) {
|
|
69
|
+
throw new Error('Cannot append audio buffer with samplerate ' + sr + ' to this array audio buffer with samplerate ' + this._sampleRate + '. Samplerates must match.');
|
|
70
|
+
}
|
|
71
|
+
for (let ch = 0; ch < chs; ch++) {
|
|
72
|
+
let chAbSlice = audioBuffer.getChannelData(ch).slice();
|
|
73
|
+
//console.debug("Append audio buffer ch: "+ch+": "+chAbSlice.length);
|
|
74
|
+
this._data[ch].push(chAbSlice);
|
|
75
|
+
}
|
|
76
|
+
this.updateFrameLen();
|
|
77
|
+
}
|
|
42
78
|
get channelCount() {
|
|
43
79
|
return this._channelCount;
|
|
44
80
|
}
|
|
@@ -97,5 +133,32 @@ export class ArrayAudioBuffer {
|
|
|
97
133
|
get data() {
|
|
98
134
|
return this._data;
|
|
99
135
|
}
|
|
136
|
+
asyncAudioInputStream() {
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
audioInputStream() {
|
|
140
|
+
return new ArrayAudioBufferInputStream(this);
|
|
141
|
+
}
|
|
142
|
+
get duration() {
|
|
143
|
+
return this._duration;
|
|
144
|
+
}
|
|
145
|
+
get numberOfChannels() {
|
|
146
|
+
return this._channelCount;
|
|
147
|
+
}
|
|
148
|
+
releaseAudioData() {
|
|
149
|
+
return new Observable(subscriber => {
|
|
150
|
+
// No persistent respectively async deletable storage, they should be finally removed by the GC
|
|
151
|
+
//this._audioBuffer=null;
|
|
152
|
+
//this._arrayBuffer=null;
|
|
153
|
+
subscriber.next();
|
|
154
|
+
subscriber.complete();
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
sampleCounts() {
|
|
158
|
+
return this._channelCount * this._frameLen;
|
|
159
|
+
}
|
|
160
|
+
randomAccessAudioStream() {
|
|
161
|
+
return new ArrayAudioBufferRandomAccessStream(this);
|
|
162
|
+
}
|
|
100
163
|
}
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sZ0JBQWdCO0lBTTNCLFlBQW9CLGFBQXFCLEVBQVUsV0FBbUIsRUFBVSxLQUFpQztRQUE3RixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUFVLGdCQUFXLEdBQVgsV0FBVyxDQUFRO1FBQVUsVUFBSyxHQUFMLEtBQUssQ0FBNEI7UUFIekcsZ0JBQVcsR0FBQyxDQUFDLENBQUM7UUFDZCxjQUFTLEdBQVEsQ0FBQyxDQUFDO1FBR3pCLElBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUMsQ0FBQyxFQUFFO1lBQ3RCLElBQUksT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDM0IsS0FBSyxJQUFJLE1BQU0sSUFBSSxPQUFPLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2pDO1NBQ0Y7SUFDSCxDQUFDO0lBRUQsTUFBTSxDQUFDLGVBQWUsQ0FBQyxXQUF1QixFQUFDLGNBQWMsR0FBQyxJQUFJO1FBQ2hFLElBQUksR0FBb0IsQ0FBQztRQUN6QixJQUFJLEdBQUcsR0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDckMsSUFBSSxXQUFXLEdBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUNuQyx1REFBdUQ7UUFDdkQsSUFBSSxRQUFRLEdBQUMsQ0FBQyxDQUFDO1FBQ2YsSUFBSSxJQUFJLEdBQUMsSUFBSSxLQUFLLENBQXNCLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLEtBQUksSUFBSSxFQUFFLEdBQUMsQ0FBQyxFQUFDLEVB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akIsSUFBRyxJQUFJLElBQUUsS0FBSyxFQUFDO29CQUNiLFVBQVUsR0FBQyxhQUFhLENBQUM7b0JBQ3pCLElBQUksR0FBQyxDQUFDLENBQUM7b0JBQ1AsRUFBRSxFQUFFLENBQUM7aUJBQ047YUFFRjtpQkFBSTtnQkFDSCxhQUFhO2dCQUNiLFVBQVUsR0FBQyxhQUFhLENBQUM7Z0JBQ3pCLElBQUksR0FBQyxDQUFDLENBQUM7Z0JBQ1AsRUFBRSxFQUFFLENBQUM7YUFDTjtTQUNGO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksSUFBSTtRQUNOLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtfSBmcm9tIFwiLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7QXJyYXlBdWRpb0J1ZmZlcklucHV0U3RyZWFtfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJfaW5wdXRfc3RyZWFtXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlciB7XHJcblxyXG5cclxuICBwcml2YXRlIF9jaHVua0NvdW50PTA7XHJcbiAgcHJpdmF0ZSBfZnJhbWVMZW46bnVtYmVyPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2NoYW5uZWxDb3VudDogbnVtYmVyLCBwcml2YXRlIF9zYW1wbGVSYXRlOiBudW1iZXIsIHByaXZhdGUgX2RhdGE6IEFycmF5PEFycmF5PEZsb2F0MzJBcnJheT4+KSB7XHJcbiAgICBpZih0aGlzLl9kYXRhLmxlbmd0aD4wKSB7XHJcbiAgICAgIGxldCBjaDBEYXRhID0gdGhpcy5kYXRhWzBdO1xyXG4gICAgICBmb3IgKGxldCBjaDBDaGsgb2YgY2gwRGF0YSkge1xyXG4gICAgICAgIHRoaXMuX2NodW5rQ291bnQrKztcclxuICAgICAgICB0aGlzLl9mcmFtZUxlbiArPSBjaDBDaGsubGVuZ3RoO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUF1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyLGNodW5rRnJhbWVTaXplPTgxOTIpOkFycmF5QXVkaW9CdWZmZXJ7XHJcbiAgICBsZXQgYWFiOkFycmF5QXVkaW9CdWZmZXI7XHJcbiAgICBsZXQgY2hzPWF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICBsZXQgZnJhbWVMZW5ndGg9YXVkaW9CdWZmZXIubGVuZ3RoO1xyXG4gICAgLy9sZXQgY2h1bmtzU2l6ZT1NYXRoLmNlaWwoZnJhbWVMZW5ndGgvY2h1bmtGcmFtZVNpemUpO1xyXG4gICAgbGV0IGZyYW1lUG9zPTA7XHJcbiAgICBsZXQgZGF0YT1uZXcgQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4oY2hzKTtcclxuICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKykge1xyXG4gICAgICBkYXRhW2NoXT1uZXcgQXJyYXk8RmxvYXQzMkFycmF5PigpO1xyXG4gICAgfVxyXG4gICAgbGV0IHRvQ29weT1mcmFtZUxlbmd0aC1mcmFtZVBvcztcclxuICAgICAgd2hpbGUodG9Db3B5PjApe1xyXG5cclxuICAgICAgICBsZXQgdG9Db3B5Q2h1bms9Y2h1bmtGcmFtZVNpemU7XHJcbiAgICAgICAgaWYodG9Db3B5Q2h1bms+dG9Db3B5KXtcclxuICAgICAgICAgIC8vIGxhc3QgY2h1bmssIHRoZSByZXN0XHJcbiAgICAgICAgICB0b0NvcHlDaHVuaz10b0NvcHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKykge1xyXG4gICAgICAgICAgZGF0YVtjaF0ucHVzaChhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCkuc2xpY2UoZnJhbWVQb3MsIGZyYW1lUG9zICsgdG9Db3B5Q2h1bmspKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnJhbWVQb3MrPXRvQ29weUNodW5rO1xyXG4gICAgICAgIHRvQ29weS09dG9Db3B5Q2h1bms7XHJcbiAgICAgIH1cclxuICAgIGFhYj1uZXcgQXJyYXlBdWRpb0J1ZmZlcihjaHMsYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSxkYXRhKTtcclxuICAgIHJldHVybiBhYWI7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IGNoYW5uZWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb3VudDtcclxuICB9XHJcblxyXG4gIGZyYW1lcyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOm51bWJlcntcclxuXHJcbiAgICBsZXQgY2NGcmFtZVBvcz0wO1xyXG4gICAgbGV0IHRyZ0ZyYW1lUG9zPWZyYW1lUG9zO1xyXG4gICAgbGV0IGNoMERhdGEgPSB0aGlzLmRhdGFbMF07XHJcbiAgICBsZXQgY1Bvcz0wO1xyXG4gICAgbGV0IGZpbGxlZD0wO1xyXG4gICAgbGV0IGNpPTA7XHJcblxyXG4gICAgd2hpbGUoZmlsbGVkPGZyYW1lTGVuICYmIGNpPHRoaXMuX2NodW5rQ291bnQpe1xyXG4gICAgICAvLyBDdXJyZW50IGNodW5rXHJcbiAgICAgIGxldCBjYzA9Y2gwRGF0YVtjaV07XHJcbiAgICAgIGxldCBjY0xlbj1jYzAubGVuZ3RoO1xyXG4gICAgICBsZXQgY2NGcmFtZUVuZFBvcz1jY0ZyYW1lUG9zK2NjTGVuO1xyXG5cclxuICAgICAgaWYodHJnRnJhbWVQb3M+PWNjRnJhbWVQb3MgJiYgdHJnRnJhbWVQb3M8Y2NGcmFtZUVuZFBvcyl7XHJcbiAgICAgICAgbGV0IHRvQ3A9ZnJhbWVMZW4tZmlsbGVkO1xyXG4gICAgICAgIGNQb3M9dHJnRnJhbWVQb3MtY2NGcmFtZVBvcztcclxuICAgICAgICBpZihjUG9zK3RvQ3A+Y2NMZW4pe1xyXG4gICAgICAgICAgdG9DcD1jY0xlbi1jUG9zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IGNoPTA7Y2g8YnVmcy5sZW5ndGg7Y2grKyl7XHJcbiAgICAgICAgICBsZXQgY2M9dGhpcy5kYXRhW2NoXVtjaV07XHJcblxyXG4gICAgICAgICAgZm9yKGxldCBpPTA7aTx0b0NwO2krKyl7XHJcbiAgICAgICAgICAgIGJ1ZnNbY2hdW2ZpbGxlZCtpXT1jY1tjUG9zK2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxsZWQrPXRvQ3A7XHJcbiAgICAgICAgdHJnRnJhbWVQb3MrPXRvQ3A7XHJcbiAgICAgICAgY1Bvcys9dG9DcDtcclxuICAgICAgICBjY0ZyYW1lUG9zKz10b0NwO1xyXG4gICAgICAgIGlmKGNQb3M+PWNjTGVuKXtcclxuICAgICAgICAgIGNjRnJhbWVQb3M9Y2NGcmFtZUVuZFBvcztcclxuICAgICAgICAgIGNQb3M9MDtcclxuICAgICAgICAgIGNpKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gbmV4dCBjaHVua1xyXG4gICAgICAgIGNjRnJhbWVQb3M9Y2NGcmFtZUVuZFBvcztcclxuICAgICAgICBjUG9zPTA7XHJcbiAgICAgICAgY2krKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGxlZDtcclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBmcmFtZUxlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNodW5rQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaHVua0NvdW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGEoKTogQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
164
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsZ0JBQWdCLEVBQTBCLE1BQU0scUJBQXFCLENBQUM7QUFFOUUsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQUNoQyxPQUFPLEVBQUMsa0NBQWtDLEVBQUMsTUFBTSwyQ0FBMkMsQ0FBQztBQUM3RixPQUFPLEVBQUMsMkJBQTJCLEVBQUMsTUFBTSxtQ0FBbUMsQ0FBQztBQUc5RSxNQUFNLE9BQU8sZ0JBQWlCLFNBQVEsZ0JBQWdCO0lBT3BELFlBQW9CLGFBQXFCLEVBQVUsV0FBbUIsRUFBVSxLQUFpQztRQUMvRyxLQUFLLEVBQUUsQ0FBQztRQURVLGtCQUFhLEdBQWIsYUFBYSxDQUFRO1FBQVUsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFBVSxVQUFLLEdBQUwsS0FBSyxDQUE0QjtRQUx6RyxnQkFBVyxHQUFDLENBQUMsQ0FBQztRQUNkLGNBQVMsR0FBUSxDQUFDLENBQUM7UUFDbkIsY0FBUyxHQUFRLENBQUMsQ0FBQztRQUNuQixZQUFPLEdBQUMsS0FBSyxDQUFDO1FBSXBCLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDZixDQUFDO0lBRU8sY0FBYztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFDLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsV0FBVyxHQUFDLENBQUMsQ0FBQztRQUNuQixJQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFDLENBQUMsRUFBRTtZQUN0QixJQUFJLE9BQU8sR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLEtBQUss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SUFBSSxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELElBQUksUUFBUTtRQUNWLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztJQUN4QixDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxnQkFBZ0I7UUFDVixPQUFPLElBQUksVUFBVSxDQUFPLFVBQVUsQ0FBQyxFQUFFO1lBQ3pDLCtGQUErRjtZQUMvRix5QkFBeUI7WUFDekIseUJBQXlCO1lBQ3pCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNsQixVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7UUFFMUIsQ0FBQyxDQUFDLENBQUM7SUFFTCxDQUFDO0lBRUQsWUFBWTtRQUNWLE9BQU8sSUFBSSxDQUFDLGFBQWEsR0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzNDLENBQUM7SUFFRCx1QkFBdUI7UUFDdEIsT0FBTyxJQUFJLGtDQUFrQyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3JELENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QmFzaWNBdWRpb1NvdXJjZSwgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW19IGZyb20gXCIuL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7QXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSwgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJSYW5kb21BY2Nlc3NTdHJlYW19IGZyb20gXCIuL2FycmF5X2F1ZGlvX2J1ZmZlcl9yYW5kb21fYWNjZXNzX3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbX0gZnJvbSBcIi4vYXJyYXlfYXVkaW9fYnVmZmVyX2lucHV0X3N0cmVhbVwiO1xyXG5cclxuXHJcbmV4cG9ydCBjbGFzcyBBcnJheUF1ZGlvQnVmZmVyIGV4dGVuZHMgQmFzaWNBdWRpb1NvdXJjZXtcclxuXHJcbiAgcHJpdmF0ZSBfY2h1bmtDb3VudD0wO1xyXG4gIHByaXZhdGUgX2ZyYW1lTGVuOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgX2R1cmF0aW9uOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgX3NlYWxlZD1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfY2hhbm5lbENvdW50OiBudW1iZXIsIHByaXZhdGUgX3NhbXBsZVJhdGU6IG51bWJlciwgcHJpdmF0ZSBfZGF0YTogQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4pIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUZyYW1lTGVuKCk7XHJcbiAgICB0aGlzLnJlYWR5KCk7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUZyYW1lTGVuKCl7XHJcbiAgICB0aGlzLl9mcmFtZUxlbj0wO1xyXG4gICAgdGhpcy5fY2h1bmtDb3VudD0wO1xyXG4gICAgaWYodGhpcy5fZGF0YS5sZW5ndGg+MCkge1xyXG4gICAgICBsZXQgY2gwRGF0YSA9IHRoaXMuZGF0YVswXTtcclxuICAgICAgZm9yIChsZXQgY2gwQ2hrIG9mIGNoMERhdGEpIHtcclxuICAgICAgICB0aGlzLl9jaHVua0NvdW50Kys7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVMZW4gKz0gY2gwQ2hrLmxlbmd0aDtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgdGhpcy5fZHVyYXRpb249dGhpcy5fZnJhbWVMZW4vdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIHNlYWwoKXtcclxuICAgIHRoaXMuX3NlYWxlZD10cnVlO1xyXG4gIH1cclxuXHJcbiAgc2VhbGVkKCk6Ym9vbGVhbntcclxuICAgIHJldHVybiB0aGlzLl9zZWFsZWQ7XHJcbiAgfVxyXG5cclxuICBzdGF0aWMgZnJvbUF1ZGlvQnVmZmVyKGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyLGNodW5rRnJhbWVTaXplPTgxOTIpOkFycmF5QXVkaW9CdWZmZXJ7XHJcbiAgICBsZXQgYWFiOkFycmF5QXVkaW9CdWZmZXI7XHJcbiAgICBsZXQgY2hzPWF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICBsZXQgZnJhbWVMZW5ndGg9YXVkaW9CdWZmZXIubGVuZ3RoO1xyXG4gICAgLy9sZXQgY2h1bmtzU2l6ZT1NYXRoLmNlaWwoZnJhbWVMZW5ndGgvY2h1bmtGcmFtZVNpemUpO1xyXG4gICAgbGV0IGZyYW1lUG9zPTA7XHJcbiAgICBsZXQgZGF0YT1uZXcgQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4oY2hzKTtcclxuICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKykge1xyXG4gICAgICBkYXRhW2NoXT1uZXcgQXJyYXk8RmxvYXQzMkFycmF5PigpO1xyXG4gICAgfVxyXG4gICAgbGV0IHRvQ29weT1mcmFtZUxlbmd0aC1mcmFtZVBvcztcclxuICAgICAgd2hpbGUodG9Db3B5PjApe1xyXG5cclxuICAgICAgICBsZXQgdG9Db3B5Q2h1bms9Y2h1bmtGcmFtZVNpemU7XHJcbiAgICAgICAgaWYodG9Db3B5Q2h1bms+dG9Db3B5KXtcclxuICAgICAgICAgIC8vIGxhc3QgY2h1bmssIHRoZSByZXN0XHJcbiAgICAgICAgICB0b0NvcHlDaHVuaz10b0NvcHk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcihsZXQgY2g9MDtjaDxjaHM7Y2grKykge1xyXG4gICAgICAgICAgZGF0YVtjaF0ucHVzaChhdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCkuc2xpY2UoZnJhbWVQb3MsIGZyYW1lUG9zICsgdG9Db3B5Q2h1bmspKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZnJhbWVQb3MrPXRvQ29weUNodW5rO1xyXG4gICAgICAgIHRvQ29weS09dG9Db3B5Q2h1bms7XHJcbiAgICAgIH1cclxuICAgIGFhYj1uZXcgQXJyYXlBdWRpb0J1ZmZlcihjaHMsYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZSxkYXRhKTtcclxuICAgIHJldHVybiBhYWI7XHJcbiAgfVxyXG5cclxuICBhcHBlbmRBdWRpb0J1ZmZlcihhdWRpb0J1ZmZlcjpBdWRpb0J1ZmZlcil7XHJcbiAgICBsZXQgY2hzPWF1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICBpZih0aGlzLl9jaGFubmVsQ291bnQhPT0gY2hzKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXBwZW5kIGF1ZGlvIGJ1ZmZlciB3aXRoICcrY2hzKycgY2hhbm5lbHMgdG8gdGhpcyBhcnJheSBhdWRpbyBidWZmZXIgd2l0aCAnK3RoaXMuX2NoYW5uZWxDb3VudCsnIGNoYW5uZWxzLiBOdW1iZXIgb2YgY2hhbm5lbHMgbXVzdCBtYXRjaC4nKTtcclxuICAgIH1cclxuICAgIGxldCBzcj1hdWRpb0J1ZmZlci5zYW1wbGVSYXRlO1xyXG4gICAgaWYoc3IhPT10aGlzLl9zYW1wbGVSYXRlKXtcclxuICAgICAgdGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXBwZW5kIGF1ZGlvIGJ1ZmZlciB3aXRoIHNhbXBsZXJhdGUgJytzcisnIHRvIHRoaXMgYXJyYXkgYXVkaW8gYnVmZmVyIHdpdGggc2FtcGxlcmF0ZSAnK3RoaXMuX3NhbXBsZVJhdGUrJy4gU2FtcGxlcmF0ZXMgbXVzdCBtYXRjaC4nKTtcclxuICAgIH1cclxuXHJcbiAgICBmb3IobGV0IGNoPTA7Y2g8Y2hzO2NoKyspIHtcclxuICAgICAgbGV0IGNoQWJTbGljZT1hdWRpb0J1ZmZlci5nZXRDaGFubmVsRGF0YShjaCkuc2xpY2UoKTtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiQXBwZW5kIGF1ZGlvIGJ1ZmZlciBjaDogXCIrY2grXCI6IFwiK2NoQWJTbGljZS5sZW5ndGgpO1xyXG4gICAgICB0aGlzLl9kYXRhW2NoXS5wdXNoKGNoQWJTbGljZSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnVwZGF0ZUZyYW1lTGVuKCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgZ2V0IGNoYW5uZWxDb3VudCgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb3VudDtcclxuICB9XHJcblxyXG4gIGZyYW1lcyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOm51bWJlcntcclxuXHJcbiAgICBsZXQgY2NGcmFtZVBvcz0wO1xyXG4gICAgbGV0IHRyZ0ZyYW1lUG9zPWZyYW1lUG9zO1xyXG4gICAgbGV0IGNoMERhdGEgPSB0aGlzLmRhdGFbMF07XHJcbiAgICBsZXQgY1Bvcz0wO1xyXG4gICAgbGV0IGZpbGxlZD0wO1xyXG4gICAgbGV0IGNpPTA7XHJcblxyXG4gICAgd2hpbGUoZmlsbGVkPGZyYW1lTGVuICYmIGNpPHRoaXMuX2NodW5rQ291bnQpe1xyXG4gICAgICAvLyBDdXJyZW50IGNodW5rXHJcbiAgICAgIGxldCBjYzA9Y2gwRGF0YVtjaV07XHJcbiAgICAgIGxldCBjY0xlbj1jYzAubGVuZ3RoO1xyXG4gICAgICBsZXQgY2NGcmFtZUVuZFBvcz1jY0ZyYW1lUG9zK2NjTGVuO1xyXG5cclxuICAgICAgaWYodHJnRnJhbWVQb3M+PWNjRnJhbWVQb3MgJiYgdHJnRnJhbWVQb3M8Y2NGcmFtZUVuZFBvcyl7XHJcbiAgICAgICAgbGV0IHRvQ3A9ZnJhbWVMZW4tZmlsbGVkO1xyXG4gICAgICAgIGNQb3M9dHJnRnJhbWVQb3MtY2NGcmFtZVBvcztcclxuICAgICAgICBpZihjUG9zK3RvQ3A+Y2NMZW4pe1xyXG4gICAgICAgICAgdG9DcD1jY0xlbi1jUG9zO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmb3IobGV0IGNoPTA7Y2g8YnVmcy5sZW5ndGg7Y2grKyl7XHJcbiAgICAgICAgICBsZXQgY2M9dGhpcy5kYXRhW2NoXVtjaV07XHJcblxyXG4gICAgICAgICAgZm9yKGxldCBpPTA7aTx0b0NwO2krKyl7XHJcbiAgICAgICAgICAgIGJ1ZnNbY2hdW2ZpbGxlZCtpXT1jY1tjUG9zK2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBmaWxsZWQrPXRvQ3A7XHJcbiAgICAgICAgdHJnRnJhbWVQb3MrPXRvQ3A7XHJcbiAgICAgICAgY1Bvcys9dG9DcDtcclxuICAgICAgICBjY0ZyYW1lUG9zKz10b0NwO1xyXG4gICAgICAgIGlmKGNQb3M+PWNjTGVuKXtcclxuICAgICAgICAgIGNjRnJhbWVQb3M9Y2NGcmFtZUVuZFBvcztcclxuICAgICAgICAgIGNQb3M9MDtcclxuICAgICAgICAgIGNpKys7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgLy8gbmV4dCBjaHVua1xyXG4gICAgICAgIGNjRnJhbWVQb3M9Y2NGcmFtZUVuZFBvcztcclxuICAgICAgICBjUG9zPTA7XHJcbiAgICAgICAgY2krKztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGZpbGxlZDtcclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBmcmFtZUxlbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2ZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNodW5rQ291bnQoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaHVua0NvdW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGRhdGEoKTogQXJyYXk8QXJyYXk8RmxvYXQzMkFycmF5Pj4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2RhdGE7XHJcbiAgfVxyXG5cclxuICBhc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTogQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGwge1xyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gbmV3IEFycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbSh0aGlzKTtcclxuICB9XHJcblxyXG4gIGdldCBkdXJhdGlvbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9jaGFubmVsQ291bnQ7XHJcbiAgfVxyXG5cclxuICByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTx2b2lkPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgICAvLyBObyBwZXJzaXN0ZW50IHJlc3BlY3RpdmVseSBhc3luYyBkZWxldGFibGUgc3RvcmFnZSwgdGhleSBzaG91bGQgYmUgZmluYWxseSByZW1vdmVkIGJ5IHRoZSBHQ1xyXG4gICAgICAgIC8vdGhpcy5fYXVkaW9CdWZmZXI9bnVsbDtcclxuICAgICAgICAvL3RoaXMuX2FycmF5QnVmZmVyPW51bGw7XHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG5cclxuICAgIH0pO1xyXG5cclxuICB9XHJcblxyXG4gIHNhbXBsZUNvdW50cygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NoYW5uZWxDb3VudCp0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIHJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtKCk6IFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtIHtcclxuICAgcmV0dXJuIG5ldyBBcnJheUF1ZGlvQnVmZmVyUmFuZG9tQWNjZXNzU3RyZWFtKHRoaXMpO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -53,7 +53,7 @@ export class ArrayAudioBufferInputStream {
|
|
|
53
53
|
else {
|
|
54
54
|
let chunkBuf0 = this.arrayAudioBuffer.data[0][this.chunkIdx];
|
|
55
55
|
let chunkBufsLen = chunkBuf0.length;
|
|
56
|
-
|
|
56
|
+
const chunkBufAvail = chunkBufsLen - this.chunkFramePos;
|
|
57
57
|
let r = chunkBufAvail;
|
|
58
58
|
if (r > toRead - read) {
|
|
59
59
|
r = toRead - read;
|
|
@@ -83,4 +83,4 @@ export class ArrayAudioBufferInputStream {
|
|
|
83
83
|
return this._framePos;
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX2lucHV0X3N0cmVhbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9hcnJheV9hdWRpb19idWZmZXJfaW5wdXRfc3RyZWFtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE1BQU0sT0FBTywyQkFBMkI7SUFNdEMsWUFBb0IsZ0JBQWlDO1FBQWpDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBaUI7UUFKN0MsY0FBUyxHQUFDLENBQUMsQ0FBQztRQUNaLGtCQUFhLEdBQUMsQ0FBQyxDQUFDO1FBQ2hCLGFBQVEsR0FBQyxDQUFDLENBQUM7UUFDWCxRQUFHLEdBQUMsS0FBSyxDQUFDO1FBRWhCLGtHQUFrRztJQUNwRyxDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUTtRQUNqQixJQUFJLE1BQU0sR0FBQyxDQUFDLENBQUM7UUFDYixJQUFHLElBQUksQ0FBQyxRQUFRLElBQUUsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtZQUNsRCxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQztZQUNoQixJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2QsTUFBTSxLQUFLLENBQUMsa0NBQWtDLEdBQUcsTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFBO2FBQ3RFO1NBQ0Y7YUFBSztZQUNKLElBQUksU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzdELElBQUksWUFBWSxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7WUFDcEMsSUFBSSxnQkFBZ0IsR0FBRyxZQUFZLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQztZQUN6RCxJQUFJLENBQUMsSUFBSSxnQkFBZ0IsRUFBRTtnQkFDekIs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LENBQUMsUUFBUSxDQUFDLENBQUM7U0FDcEk7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFJRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbX0gZnJvbSBcIi4uL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJ9IGZyb20gXCIuL2FycmF5X2F1ZGlvX2J1ZmZlclwiO1xyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlcklucHV0U3RyZWFtIGltcGxlbWVudHMgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW17XHJcblxyXG4gIHByaXZhdGUgX2ZyYW1lUG9zPTA7XHJcbiAgcHJpdmF0ZSBjaHVua0ZyYW1lUG9zPTA7XHJcbiAgcHJpdmF0ZSBjaHVua0lkeD0wO1xyXG4gIHByaXZhdGUgZW9kPWZhbHNlO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXJyYXlBdWRpb0J1ZmZlcjpBcnJheUF1ZGlvQnVmZmVyKSB7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJBcnJheSBhdWRpbyBpbnB1dCBzdHJlYW0gYXJyYXkgYXVkaW8gYnVmZmVyIGZyYW1lczogXCIrYXJyYXlBdWRpb0J1ZmZlci5mcmFtZUxlbik7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHNraXBGcmFtZXMobjpudW1iZXIpe1xyXG4gICAgbGV0IHRvU2tpcD1uO1xyXG4gICAgaWYodGhpcy5jaHVua0lkeD49dGhpcy5hcnJheUF1ZGlvQnVmZmVyLmNodW5rQ291bnQpIHtcclxuICAgICAgdGhpcy5lb2QgPSB0cnVlO1xyXG4gICAgICBpZiAodG9Ta2lwID4gMCkge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdTa2lwIG91dCBvZiBib3VuZHM6IENhbm5vdCBza2lwICcgKyB0b1NraXAgKyAnIGZyYW1lcy4nKVxyXG4gICAgICB9XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIGxldCBjaHVua0J1ZjAgPSB0aGlzLmFycmF5QXVkaW9CdWZmZXIuZGF0YVswXVt0aGlzLmNodW5rSWR4XTtcclxuICAgICAgbGV0IGNodW5rQnVmc0xlbiA9IGNodW5rQnVmMC5sZW5ndGg7XHJcbiAgICAgIGxldCBjdXJyQnVmU2tpcHBhYmxlID0gY2h1bmtCdWZzTGVuIC0gdGhpcy5jaHVua0ZyYW1lUG9zO1xyXG4gICAgICBpZiAobiA+PSBjdXJyQnVmU2tpcHBhYmxlKSB7XHJcbiAgICAgICAgdGhpcy5fZnJhbWVQb3MgKz0gY3VyckJ1ZlNraXBwYWJsZTtcclxuICAgICAgICB0b1NraXAgLT0gY3VyckJ1ZlNraXBwYWJsZTtcclxuICAgICAgICB0aGlzLmNodW5rSWR4KytcclxuICAgICAgICB0aGlzLmNodW5rRnJhbWVQb3MgPSAwO1xyXG4gICAgICAgIGlmICh0aGlzLmNodW5rSWR4IDwgdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmNodW5rQ291bnQpIHtcclxuICAgICAgICAgIHRoaXMuc2tpcEZyYW1lcyh0b1NraXApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAodG9Ta2lwID4gMCkge1xyXG4gICAgICAgICAgICB0aHJvdyBFcnJvcignU2tpcCBvdXQgb2YgYm91bmRzOiBDYW5ub3Qgc2tpcCAnICsgdG9Ta2lwICsgJyBmcmFtZXMuJylcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdG9Ta2lwIC09IG47XHJcbiAgICAgICAgdGhpcy5jaHVua0ZyYW1lUG9zICs9IG47XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlYWQoYnVmZmVyczogQXJyYXk8RmxvYXQzMkFycmF5Pik6IG51bWJlciB7XHJcbiAgICBsZXQgcmVhZD0wO1xyXG5cclxuICAgIGxldCB0b1JlYWQ9YnVmZmVyc1swXS5sZW5ndGg7XHJcblxyXG4gICAgICB3aGlsZShyZWFkPHRvUmVhZCAmJiAhdGhpcy5lb2Qpe1xyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZyhcIkNodW5rIFwiK3RoaXMuY2h1bmtJZHgrXCIgb2YgXCIrdGhpcy5hcnJheUF1ZGlvQnVmZmVyLmNodW5rQ291bnQrXCIgY2h1bmtzLlwiKVxyXG4gICAgICAgIGlmKHRoaXMuY2h1bmtJZHg+PXRoaXMuYXJyYXlBdWRpb0J1ZmZlci5jaHVua0NvdW50KSB7XHJcbiAgICAgICAgICB0aGlzLmVvZCA9IHRydWU7XHJcbiAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBcnJheSBhdWRpbyBpbnB1dCBzdHJlYW0gZW5kIG9mIGRhdGEgcmVhZCBmcmFtZXM6IFwiK3RoaXMuZnJhbWVQb3MpO1xyXG4gICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgIGxldCBjaHVua0J1ZjAgPSB0aGlzLmFycmF5QXVkaW9CdWZmZXIuZGF0YVswXVt0aGlzLmNodW5rSWR4XTtcclxuICAgICAgICAgIGxldCBjaHVua0J1ZnNMZW4gPSBjaHVua0J1ZjAubGVuZ3RoO1xyXG4gICAgICAgICAgY29uc3QgY2h1bmtCdWZBdmFpbCA9IGNodW5rQnVmc0xlbiAtIHRoaXMuY2h1bmtGcmFtZVBvcztcclxuICAgICAgICAgIGxldCByID0gY2h1bmtCdWZBdmFpbDtcclxuICAgICAgICAgIGlmIChyID4gdG9SZWFkIC0gcmVhZCkge1xyXG4gICAgICAgICAgICByID0gdG9SZWFkIC0gcmVhZDtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBidWZmZXJzLmxlbmd0aDsgY2grKykge1xyXG4gICAgICAgICAgICBsZXQgY2hDaHVua0J1Zj10aGlzLmFycmF5QXVkaW9CdWZmZXIuZGF0YVtjaF1bdGhpcy5jaHVua0lkeF07XHJcbiAgICAgICAgICAgIGZvciAobGV0IGJpID0gMDsgYmkgPCByOyBiaSsrKSB7XHJcbiAgICAgICAgICAgICAgYnVmZmVyc1tjaF1bcmVhZCArIGJpXSA9IGNoQ2h1bmtCdWZbdGhpcy5jaHVua0ZyYW1lUG9zICsgYmldO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZWFkICs9IHI7XHJcblxyXG4gICAgICAgICAgdGhpcy5jaHVua0ZyYW1lUG9zICs9IHI7XHJcbiAgICAgICAgICBpZiAodGhpcy5jaHVua0ZyYW1lUG9zID49IGNodW5rQnVmc0xlbikge1xyXG4gICAgICAgICAgICB0aGlzLmNodW5rSWR4Kys7XHJcbiAgICAgICAgICAgIHRoaXMuY2h1bmtGcmFtZVBvcyA9IDA7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB0aGlzLl9mcmFtZVBvcys9cmVhZDtcclxuICAgICAgLy9jb25zb2xlLmRlYnVnKFwiUmVhZDogXCIrcmVhZCtcIiwgZnJhbWUgcG9zOiBcIit0aGlzLmZyYW1lUG9zKVxyXG4gICAgaWYodGhpcy5fZnJhbWVQb3M+dGhpcy5hcnJheUF1ZGlvQnVmZmVyLmZyYW1lTGVuKXtcclxuICAgICAgY29uc29sZS5lcnJvcihcIkFycmF5IGF1ZGlvIGlucHV0IHN0cmVhbSBmcmFtZSBwb3M6IFwiK3RoaXMuX2ZyYW1lUG9zK1wiIGdyZWF0ZXIgdGhlbiBmcmFtZSBsZW5ndGg6IFwiK3RoaXMuYXJyYXlBdWRpb0J1ZmZlci5mcmFtZUxlbik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gcmVhZDtcclxuICB9XHJcblxyXG5cclxuXHJcbiAgZ2V0IGZyYW1lUG9zKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJhbWVQb3M7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
export class ArrayAudioBufferRandomAccessStream {
|
|
3
|
+
constructor(_arrayBuffer) {
|
|
4
|
+
this._arrayBuffer = _arrayBuffer;
|
|
5
|
+
}
|
|
6
|
+
close() {
|
|
7
|
+
}
|
|
8
|
+
framesObs(framePos, frameLen, bufs) {
|
|
9
|
+
return new Observable(subscriber => {
|
|
10
|
+
let read = this._arrayBuffer.frames(framePos, frameLen, bufs);
|
|
11
|
+
subscriber.next(read);
|
|
12
|
+
subscriber.complete();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX3JhbmRvbV9hY2Nlc3Nfc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlcl9yYW5kb21fYWNjZXNzX3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE1BQU0sT0FBTyxrQ0FBa0M7SUFFN0MsWUFBb0IsWUFBNkI7UUFBN0IsaUJBQVksR0FBWixZQUFZLENBQWlCO0lBQ2pELENBQUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsSUFBb0I7UUFDaEUsT0FBTyxJQUFJLFVBQVUsQ0FBUyxVQUFVLENBQUMsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbX0gZnJvbSBcIi4vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlclJhbmRvbUFjY2Vzc1N0cmVhbSBpbXBsZW1lbnRzIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFte1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcnJheUJ1ZmZlcjpBcnJheUF1ZGlvQnVmZmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIGZyYW1lc09icyhmcmFtZVBvczogbnVtYmVyLCBmcmFtZUxlbjogbnVtYmVyLCBidWZzOiBGbG9hdDMyQXJyYXlbXSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8bnVtYmVyPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgbGV0IHJlYWQgPSB0aGlzLl9hcnJheUJ1ZmZlci5mcmFtZXMoZnJhbWVQb3MsIGZyYW1lTGVuLCBidWZzKTtcclxuICAgICAgc3Vic2NyaWJlci5uZXh0KHJlYWQpO1xyXG4gICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -1,36 +1,101 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
export class BasicAudioSource {
|
|
3
|
+
constructor() {
|
|
4
|
+
this._ready = false;
|
|
5
|
+
this.onReadyListeners = new Array();
|
|
6
|
+
}
|
|
7
|
+
addOnReadyListener(onReady) {
|
|
8
|
+
// let alreadyAdded=false;
|
|
9
|
+
// for(let or of this.onReadyListeners){
|
|
10
|
+
// if(or===onReady){
|
|
11
|
+
// alreadyAdded=true;
|
|
12
|
+
// break;
|
|
13
|
+
// }
|
|
14
|
+
// }
|
|
15
|
+
// if(!alreadyAdded) {
|
|
16
|
+
// this.onReadyListeners.push(onReady);
|
|
17
|
+
// }
|
|
18
|
+
if (!(this.onReadyListeners.find((or) => or === onReady))) {
|
|
19
|
+
this.onReadyListeners.push(onReady);
|
|
20
|
+
}
|
|
21
|
+
if (this._ready) {
|
|
22
|
+
onReady();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
removeOnReadyListener(onReady) {
|
|
26
|
+
this.onReadyListeners = this.onReadyListeners.filter((or) => or !== onReady);
|
|
27
|
+
}
|
|
28
|
+
ready() {
|
|
29
|
+
this._ready = true;
|
|
30
|
+
for (let onReady of this.onReadyListeners) {
|
|
31
|
+
onReady.call(this);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class AudioBufferSource extends BasicAudioSource {
|
|
36
|
+
constructor(_audioBuffer) {
|
|
37
|
+
super();
|
|
38
|
+
this._audioBuffer = _audioBuffer;
|
|
39
|
+
this._duration = this._audioBuffer.length / this._audioBuffer.sampleRate;
|
|
40
|
+
this.ready();
|
|
41
|
+
}
|
|
42
|
+
get audioBuffer() {
|
|
43
|
+
return this._audioBuffer;
|
|
44
|
+
}
|
|
45
|
+
get duration() {
|
|
46
|
+
return this._duration;
|
|
47
|
+
}
|
|
48
|
+
get sampleRate() {
|
|
49
|
+
return this._audioBuffer.sampleRate;
|
|
50
|
+
}
|
|
51
|
+
get numberOfChannels() {
|
|
52
|
+
return this._audioBuffer.numberOfChannels;
|
|
53
|
+
}
|
|
54
|
+
get frameLen() {
|
|
55
|
+
return this._audioBuffer.length;
|
|
56
|
+
}
|
|
57
|
+
sampleCounts() {
|
|
58
|
+
return this._audioBuffer.numberOfChannels * this._audioBuffer.length;
|
|
59
|
+
}
|
|
60
|
+
audioInputStream() {
|
|
61
|
+
return new AudioBufferInputStream(this._audioBuffer);
|
|
62
|
+
}
|
|
63
|
+
asyncAudioInputStream() {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
releaseAudioData() {
|
|
67
|
+
return new Observable(subscriber => {
|
|
68
|
+
subscriber.next();
|
|
69
|
+
subscriber.complete();
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
randomAccessAudioStream() {
|
|
73
|
+
return new RandomAccessAudioBufferStream(this._audioBuffer);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
2
76
|
export class AudioDataHolder {
|
|
3
|
-
constructor(
|
|
4
|
-
this.
|
|
5
|
-
this._arrayBuffer = _arrayBuffer;
|
|
77
|
+
constructor(_audioSource) {
|
|
78
|
+
this._audioSource = _audioSource;
|
|
6
79
|
this._numberOfChannels = 0;
|
|
7
80
|
this._sampleRate = 0;
|
|
8
81
|
this._frameLen = 0;
|
|
9
82
|
this._duration = 0;
|
|
10
|
-
if (this.
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
this._numberOfChannels = this._buffer.numberOfChannels;
|
|
16
|
-
this._sampleRate = this._buffer.sampleRate;
|
|
17
|
-
this._frameLen = this._buffer.length;
|
|
18
|
-
this._duration = this._frameLen / this._sampleRate;
|
|
19
|
-
}
|
|
20
|
-
else if (this._arrayBuffer) {
|
|
21
|
-
this._numberOfChannels = this._arrayBuffer.channelCount;
|
|
22
|
-
this._sampleRate = this._arrayBuffer.sampleRate;
|
|
23
|
-
this._frameLen = this._arrayBuffer.frameLen;
|
|
24
|
-
this._duration = this._frameLen / this._sampleRate;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
else {
|
|
28
|
-
throw Error(AudioDataHolder.ONE_OF_MUST_BE_SET_ERR_MSG);
|
|
83
|
+
if (this._audioSource) {
|
|
84
|
+
this._numberOfChannels = this._audioSource.numberOfChannels;
|
|
85
|
+
this._sampleRate = this._audioSource.sampleRate;
|
|
86
|
+
this._frameLen = this._audioSource.frameLen;
|
|
87
|
+
this._duration = this._frameLen / this._sampleRate;
|
|
29
88
|
}
|
|
30
89
|
}
|
|
90
|
+
get audioSource() {
|
|
91
|
+
return this._audioSource;
|
|
92
|
+
}
|
|
31
93
|
get duration() {
|
|
32
94
|
return this._duration;
|
|
33
95
|
}
|
|
96
|
+
addOnReadyListener(onReady) {
|
|
97
|
+
this._audioSource?.addOnReadyListener(onReady);
|
|
98
|
+
}
|
|
34
99
|
get sampleRate() {
|
|
35
100
|
return this._sampleRate;
|
|
36
101
|
}
|
|
@@ -43,9 +108,117 @@ export class AudioDataHolder {
|
|
|
43
108
|
sampleCounts() {
|
|
44
109
|
return this._numberOfChannels * this._frameLen;
|
|
45
110
|
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
111
|
+
randomAccessAudioStream() {
|
|
112
|
+
if (this._audioSource) {
|
|
113
|
+
return this._audioSource.randomAccessAudioStream();
|
|
114
|
+
}
|
|
115
|
+
else {
|
|
116
|
+
throw Error('No audio source set');
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
// private frames(framePos:number,frameLen:number,bufs:Float32Array[]):number{
|
|
120
|
+
// let read=0;
|
|
121
|
+
// if(this._buffer){
|
|
122
|
+
// let toRead=frameLen;
|
|
123
|
+
// if(this._buffer.length<framePos+frameLen){
|
|
124
|
+
// toRead=this._buffer.length-framePos;
|
|
125
|
+
// }
|
|
126
|
+
// for(let ch=0;ch<bufs.length;ch++){
|
|
127
|
+
// let chData=this._buffer.getChannelData(ch);
|
|
128
|
+
// for(let i=0;i<toRead;i++){
|
|
129
|
+
// bufs[ch][i]=chData[framePos+i];
|
|
130
|
+
// }
|
|
131
|
+
// }
|
|
132
|
+
// read=toRead;
|
|
133
|
+
// }else if(this._arrayBuffer){
|
|
134
|
+
// read=this._arrayBuffer.frames(framePos,frameLen,bufs);
|
|
135
|
+
// }
|
|
136
|
+
// return read;
|
|
137
|
+
// }
|
|
138
|
+
audioInputStream() {
|
|
139
|
+
// if(this._buffer){
|
|
140
|
+
// return new AudioBufferInputStream(this._buffer);
|
|
141
|
+
// }
|
|
142
|
+
// if(this._arrayBuffer){
|
|
143
|
+
// return new ArrayAudioBufferInputStream(this._arrayBuffer);
|
|
144
|
+
// }
|
|
145
|
+
// return null;
|
|
146
|
+
if (this._audioSource) {
|
|
147
|
+
return this._audioSource.audioInputStream();
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
asyncAudioInputStream() {
|
|
154
|
+
// if(this._inddbAudioBuffer){
|
|
155
|
+
// return new IndexedDbAudioInputStream(this._inddbAudioBuffer);
|
|
156
|
+
// }else if(this._netAudioBuffer){
|
|
157
|
+
// return new NetAudioInputStream(this._netAudioBuffer);
|
|
158
|
+
// }
|
|
159
|
+
// return null;
|
|
160
|
+
if (this._audioSource) {
|
|
161
|
+
return this._audioSource.asyncAudioInputStream();
|
|
162
|
+
}
|
|
163
|
+
else {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
// get buffer(): AudioBuffer | null {
|
|
168
|
+
// return this._buffer;
|
|
169
|
+
// }
|
|
170
|
+
//
|
|
171
|
+
// get arrayBuffer(): ArrayAudioBuffer | null {
|
|
172
|
+
// return this._arrayBuffer;
|
|
173
|
+
// }
|
|
174
|
+
//
|
|
175
|
+
// get inddbBuffer():IndexedDbAudioBuffer|null{
|
|
176
|
+
// return this._inddbAudioBuffer;
|
|
177
|
+
// }
|
|
178
|
+
//
|
|
179
|
+
// get netBuffer():NetAudioBuffer|null{
|
|
180
|
+
// return this._netAudioBuffer;
|
|
181
|
+
// }
|
|
182
|
+
releaseAudioData() {
|
|
183
|
+
return new Observable(subscriber => {
|
|
184
|
+
//if (this._audioSource instanceof IndexedDbAudioBuffer) {
|
|
185
|
+
if (this._audioSource) {
|
|
186
|
+
this._audioSource.releaseAudioData().subscribe({
|
|
187
|
+
next: () => {
|
|
188
|
+
subscriber.next();
|
|
189
|
+
},
|
|
190
|
+
complete: () => {
|
|
191
|
+
this._audioSource = null;
|
|
192
|
+
subscriber.complete();
|
|
193
|
+
}, error: (err) => {
|
|
194
|
+
subscriber.error(err);
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
}
|
|
198
|
+
else {
|
|
199
|
+
subscriber.next();
|
|
200
|
+
subscriber.complete();
|
|
201
|
+
}
|
|
202
|
+
// }else{
|
|
203
|
+
// // Others have no persistent respectively async deletable storage, they should be finally removed by the GC
|
|
204
|
+
// //this._buffer=null;
|
|
205
|
+
// //this._arrayBuffer=null;
|
|
206
|
+
// this._audioSource=null;
|
|
207
|
+
// subscriber.next();
|
|
208
|
+
// subscriber.complete();
|
|
209
|
+
// }
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
export class RandomAccessAudioBufferStream {
|
|
214
|
+
constructor(_buffer) {
|
|
215
|
+
this._buffer = _buffer;
|
|
216
|
+
}
|
|
217
|
+
close() {
|
|
218
|
+
}
|
|
219
|
+
framesObs(framePos, frameLen, bufs) {
|
|
220
|
+
return new Observable(subscriber => {
|
|
221
|
+
let read = 0;
|
|
49
222
|
let toRead = frameLen;
|
|
50
223
|
if (this._buffer.length < framePos + frameLen) {
|
|
51
224
|
toRead = this._buffer.length - framePos;
|
|
@@ -57,29 +230,11 @@ export class AudioDataHolder {
|
|
|
57
230
|
}
|
|
58
231
|
}
|
|
59
232
|
read = toRead;
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
}
|
|
64
|
-
return read;
|
|
65
|
-
}
|
|
66
|
-
audioInputStream() {
|
|
67
|
-
if (this._buffer) {
|
|
68
|
-
return new AudioBufferInputStream(this._buffer);
|
|
69
|
-
}
|
|
70
|
-
if (this._arrayBuffer) {
|
|
71
|
-
return new ArrayAudioBufferInputStream(this._arrayBuffer);
|
|
72
|
-
}
|
|
73
|
-
throw Error(AudioDataHolder.ONE_OF_MUST_BE_SET_ERR_MSG);
|
|
74
|
-
}
|
|
75
|
-
get buffer() {
|
|
76
|
-
return this._buffer;
|
|
77
|
-
}
|
|
78
|
-
get arrayBuffer() {
|
|
79
|
-
return this._arrayBuffer;
|
|
233
|
+
subscriber.next(read);
|
|
234
|
+
subscriber.complete();
|
|
235
|
+
});
|
|
80
236
|
}
|
|
81
237
|
}
|
|
82
|
-
AudioDataHolder.ONE_OF_MUST_BE_SET_ERR_MSG = 'One of either audio buffer or array audio buffer must be set!';
|
|
83
238
|
export class AudioBufferInputStream {
|
|
84
239
|
constructor(audioBuffer) {
|
|
85
240
|
this.audioBuffer = audioBuffer;
|
|
@@ -106,4 +261,4 @@ export class AudioBufferInputStream {
|
|
|
106
261
|
return read;
|
|
107
262
|
}
|
|
108
263
|
}
|
|
109
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGF0YV9ob2xkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFDLDJCQUEyQixFQUFDLE1BQU0sbUNBQW1DLENBQUM7QUFFOUUsTUFBTSxPQUFPLGVBQWU7SUFXMUIsWUFBb0IsT0FBeUIsRUFBUyxlQUFtQyxJQUFJO1FBQXpFLFlBQU8sR0FBUCxPQUFPLENBQWtCO1FBQVMsaUJBQVksR0FBWixZQUFZLENBQTJCO1FBTnJGLHNCQUFpQixHQUFRLENBQUMsQ0FBQztRQUMzQixnQkFBVyxHQUFRLENBQUMsQ0FBQztRQUNyQixjQUFTLEdBQVEsQ0FBQyxDQUFDO1FBQ25CLGNBQVMsR0FBUSxDQUFDLENBQUM7UUFJekIsSUFBRyxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUM7WUFDbkMsTUFBTSxLQUFLLENBQUMsb0VBQW9FLENBQUMsQ0FBQztTQUNuRjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQ3JDLElBQUksSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDaEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7Z0JBQ3ZELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7Z0JBQzNDLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7Z0JBQ25DLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO2FBQ2hEO2lCQUFNLElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtnQkFDNUIsSUFBSSxD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LEdBQVgsV0FBVyxDQUFZO1FBRm5DLGFBQVEsR0FBQyxDQUFDLENBQUM7SUFHbkIsQ0FBQztJQUVELEtBQUs7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUFDLENBQVM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsSUFBRSxDQUFDLENBQUM7SUFDbkIsQ0FBQztJQUVELElBQUksQ0FBQyxPQUE0QjtRQUMvQixJQUFJLElBQUksR0FBQyxDQUFDLENBQUM7UUFDWCxJQUFJLE1BQU0sR0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUcsSUFBSSxDQUFDLFFBQVEsR0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUM7WUFDOUMsTUFBTSxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7U0FDOUM7UUFDRCxLQUFJLElBQUksRUFBRSxHQUFDLENBQUMsRUFBQyxFQUFFLEdBQUMsT0FBTyxDQUFDLE1BQU0sRUFBQyxFQUFFLEVBQUUsRUFBRTtZQUNuQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMvQixPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxDQUFDLENBQUMsQ0FBQzthQUNyRTtTQUNGO1FBQ0QsSUFBSSxHQUFDLE1BQU0sQ0FBQztRQUNaLElBQUksQ0FBQyxRQUFRLElBQUUsTUFBTSxDQUFDO1FBQ3RCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbX0gZnJvbSBcIi4uL2lvL3N0cmVhbVwiO1xyXG5pbXBvcnQge0FycmF5QXVkaW9CdWZmZXJJbnB1dFN0cmVhbX0gZnJvbSBcIi4vYXJyYXlfYXVkaW9fYnVmZmVyX2lucHV0X3N0cmVhbVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvRGF0YUhvbGRlcntcclxuICBnZXQgZHVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9kdXJhdGlvbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgX251bWJlck9mQ2hhbm5lbHM6bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSBfc2FtcGxlUmF0ZTpudW1iZXI9MDtcclxuICBwcml2YXRlIF9mcmFtZUxlbjpudW1iZXI9MDtcclxuICBwcml2YXRlIF9kdXJhdGlvbjpudW1iZXI9MDtcclxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBPTkVfT0ZfTVVTVF9CRV9TRVRfRVJSX01TRz0nT25lIG9mIGVpdGhlciBhdWRpbyBidWZmZXIgb3IgYXJyYXkgYXVkaW8gYnVmZmVyIG11c3QgYmUgc2V0ISc7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2J1ZmZlcjogQXVkaW9CdWZmZXJ8bnVsbCxwcml2YXRlIF9hcnJheUJ1ZmZlcjpBcnJheUF1ZGlvQnVmZmVyfG51bGw9bnVsbCkge1xyXG4gICAgaWYodGhpcy5fYnVmZmVyICYmIHRoaXMuX2FycmF5QnVmZmVyKXtcclxuICAgICAgdGhyb3cgRXJyb3IoJ09ubHkgb25lIG9mIGVpdGhlciBhdWRpbyBidWZmZXIgb3IgYXJyYXkgYXVkaW8gYnVmZmVyIG11c3QgYmUgc2V0IScpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX2J1ZmZlciB8fCB0aGlzLl9hcnJheUJ1ZmZlcikge1xyXG4gICAgICBpZiAodGhpcy5fYnVmZmVyKSB7XHJcbiAgICAgICAgdGhpcy5fbnVtYmVyT2ZDaGFubmVscyA9IHRoaXMuX2J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICAgIHRoaXMuX3NhbXBsZVJhdGUgPSB0aGlzLl9idWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgICAgICB0aGlzLl9mcmFtZUxlbj10aGlzLl9idWZmZXIubGVuZ3RoO1xyXG4gICAgICAgIHRoaXMuX2R1cmF0aW9uPXRoaXMuX2ZyYW1lTGVuL3RoaXMuX3NhbXBsZVJhdGU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fYXJyYXlCdWZmZXIpIHtcclxuICAgICAgICB0aGlzLl9udW1iZXJPZkNoYW5uZWxzID0gdGhpcy5fYXJyYXlCdWZmZXIuY2hhbm5lbENvdW50O1xyXG4gICAgICAgIHRoaXMuX3NhbXBsZVJhdGUgPSB0aGlzLl9hcnJheUJ1ZmZlci5zYW1wbGVSYXRlO1xyXG4gICAgICAgIHRoaXMuX2ZyYW1lTGVuPXRoaXMuX2FycmF5QnVmZmVyLmZyYW1lTGVuO1xyXG4gICAgICAgIHRoaXMuX2R1cmF0aW9uPXRoaXMuX2ZyYW1lTGVuL3RoaXMuX3NhbXBsZVJhdGU7XHJcbiAgICAgIH1cclxuXHJcbiAgICB9ZWxzZXtcclxuICAgICAgdGhyb3cgRXJyb3IoQXVkaW9EYXRhSG9sZGVyLk9ORV9PRl9NVVNUX0JFX1NFVF9FUlJfTVNHKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcbiAgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkNoYW5uZWxzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJhbWVMZW47XHJcbiAgfVxyXG5cclxuICBzYW1wbGVDb3VudHMoKTpudW1iZXJ7XHJcbiAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZDaGFubmVscyp0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIGZyYW1lcyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOm51bWJlcntcclxuICAgIGxldCByZWFkPTA7XHJcbiAgICBpZih0aGlzLl9idWZmZXIpe1xyXG4gICAgICBsZXQgdG9SZWFkPWZyYW1lTGVuO1xyXG4gICAgICBpZih0aGlzLl9idWZmZXIubGVuZ3RoPGZyYW1lUG9zK2ZyYW1lTGVuKXtcclxuICAgICAgICB0b1JlYWQ9dGhpcy5fYnVmZmVyLmxlbmd0aC1mcmFtZVBvcztcclxuICAgICAgfVxyXG4gICAgICBmb3IobGV0IGNoPTA7Y2g8YnVmcy5sZW5ndGg7Y2grKyl7XHJcbiAgICAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgIGZvcihsZXQgaT0wO2k8dG9SZWFkO2krKyl7XHJcbiAgICAgICAgICBidWZzW2NoXVtpXT1jaERhdGFbZnJhbWVQb3MraV07XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJlYWQ9dG9SZWFkO1xyXG4gICAgfWVsc2UgaWYodGhpcy5fYXJyYXlCdWZmZXIpe1xyXG4gICAgICByZWFkPXRoaXMuX2FycmF5QnVmZmVyLmZyYW1lcyhmcmFtZVBvcyxmcmFtZUxlbixidWZzKTtcclxuICAgIH1cclxuICAgIHJldHVybiByZWFkO1xyXG4gIH1cclxuXHJcbiAgYXVkaW9JbnB1dFN0cmVhbSgpOkZsb2F0MzJBcnJheUlucHV0U3RyZWFte1xyXG4gICAgaWYodGhpcy5fYnVmZmVyKXtcclxuICAgICAgcmV0dXJuIG5ldyBBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2J1ZmZlcik7XHJcbiAgICB9XHJcbiAgICBpZih0aGlzLl9hcnJheUJ1ZmZlcil7XHJcbiAgICAgIHJldHVybiBuZXcgQXJyYXlBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2FycmF5QnVmZmVyKTtcclxuICAgIH1cclxuICAgIHRocm93IEVycm9yKEF1ZGlvRGF0YUhvbGRlci5PTkVfT0ZfTVVTVF9CRV9TRVRfRVJSX01TRyk7XHJcbiAgfVxyXG5cclxuICBnZXQgYnVmZmVyKCk6IEF1ZGlvQnVmZmVyIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGFycmF5QnVmZmVyKCk6IEFycmF5QXVkaW9CdWZmZXIgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9hcnJheUJ1ZmZlcjtcclxuICB9XHJcblxyXG4gIC8vIGdldENoYW5uZWxEYXRhKGNoYW5uZWw6bnVtYmVyLHN0YXJ0RnJhbWU6bnVtYmVyLGxlbmd0aDpudW1iZXIpOkZsb2F0MzJBcnJheXxudWxse1xyXG4gIC8vICAgbGV0IHJlcUJ1Zj1udWxsO1xyXG4gIC8vICAgaWYodGhpcy5fYnVmZmVyKXtcclxuICAvLyAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2hhbm5lbCk7XHJcbiAgLy8gICAgIHJlcUJ1Zj0gY2hEYXRhLnNsaWNlKHN0YXJ0RnJhbWUsc3RhcnRGcmFtZStsZW5ndGgpO1xyXG4gIC8vICAgfSBlbHNlIGlmKHRoaXMuX2FycmF5QnVmZmVyKXtcclxuICAvLyAgICAgcmVxQnVmPW5ldyBGbG9hdDMyQXJyYXkobGVuZ3RoKTtcclxuICAvLyAgICAgbGV0IGNodW5rQ250PXRoaXMuX2FycmF5QnVmZmVyLmNodW5rQ291bnQ7XHJcbiAgLy8gICAgIGxldCBjaT0wO1xyXG4gIC8vICAgICBsZXQgZnJhbWVQb3M9MDtcclxuICAvLyAgICAgd2hpbGUoY2k8Y2h1bmtDbnQpe1xyXG4gIC8vICAgICAgIGxldCBjaHVua0J1Zj10aGlzLl9hcnJheUJ1ZmZlci5kYXRhW2NoYW5uZWxdW2NpXTtcclxuICAvLyAgICAgICBsZXQgY2h1bmtCdWZsZW49Y2h1bmtCdWYubGVuZ3RoO1xyXG4gIC8vICAgICAgIGxldCBvZmZzZXQ9c3RhcnRGcmFtZS1mcmFtZVBvcztcclxuICAvLyAgICAgICBpZihvZmZzZXQ+PTApe1xyXG4gIC8vICAgICAgICAgbGV0IGNodW5rQnVmRW5kUG9zPWZyYW1lUG9zK2NodW5rQnVmbGVuO1xyXG4gIC8vICAgICAgICAgbGV0IHJlcUVuZFBvcz1zdGFydEZyYW1lK2xlbmd0aDtcclxuICAvLyAgICAgICAgIGlmKGZyYW1lUG9zPnJlcUVuZFBvcyl7XHJcbiAgLy8gICAgICAgICAgIGJyZWFrO1xyXG4gIC8vICAgICAgICAgfWVsc2V7XHJcbiAgLy8gICAgICAgICAgIC8vIFRPRE9cclxuICAvLyAgICAgICAgICAgbGV0IHRvQ29weT1sZW5ndGg7XHJcbiAgLy8gICAgICAgICB9XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gIHJlcUJ1ZjtcclxuICAvLyB9XHJcblxyXG59XHJcblxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0gaW1wbGVtZW50cyBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICBwcml2YXRlIGZyYW1lUG9zPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgc2tpcEZyYW1lcyhuOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZnJhbWVQb3MrPW47XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuICAgIGxldCB0b1JlYWQ9YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICBpZih0aGlzLmZyYW1lUG9zK3RvUmVhZD50aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aCl7XHJcbiAgICAgIHRvUmVhZD10aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aC10aGlzLmZyYW1lUG9zO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBjaD0wO2NoPGJ1ZmZlcnMubGVuZ3RoO2NoKyspIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b1JlYWQ7IGkrKykge1xyXG4gICAgICAgIGJ1ZmZlcnNbY2hdW2ldPXRoaXMuYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpW3RoaXMuZnJhbWVQb3MraV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlYWQ9dG9SZWFkO1xyXG4gICAgdGhpcy5mcmFtZVBvcys9dG9SZWFkO1xyXG4gICAgcmV0dXJuIHJlYWQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
264
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGF0YV9ob2xkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQWlCaEMsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUFDWSxXQUFNLEdBQVMsS0FBSyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFxQixJQUFJLEtBQUssRUFBYyxDQUFDO0lBbUR6RSxDQUFDO0lBakRDLGtCQUFrQixDQUFDLE9BQXFCO1FBQ3RDLDBCQUEwQjtRQUMxQix3Q0FBd0M7UUFDeEMsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6QixhQUFhO1FBQ2IsTUFBTTtRQUNOLElBQUk7UUFDSixzQkFBc0I7UUFDdEIseUNBQXlDO1FBQ3pDLElBQUk7UUFFSixJQUFHLENBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLEtBQUcsT0FBTyxDQUFDLENBQUMsRUFBQztZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQ2IsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFxQjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUEsRUFBRSxLQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUM7UUFDakIsS0FBSSxJQUFJLE9B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QUMsQ0FBQyxDQUFDO0lBR25CLENBQUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFTO1FBQ2xCLElBQUksQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBNEI7UUFDL0IsSUFBSSxJQUFJLEdBQUMsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxNQUFNLEdBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFDO1lBQzlDLE1BQU0sR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQzlDO1FBQ0QsS0FBSSxJQUFJLEVBQUUsR0FBQyxDQUFDLEVBQUMsRUFBRSxHQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUU7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDRjtRQUNELElBQUksR0FBQyxNQUFNLENBQUM7UUFDWixJQUFJLENBQUMsUUFBUSxJQUFFLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSwgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb1NvdXJjZSB7XHJcbiAgZ2V0IGR1cmF0aW9uKCk6bnVtYmVyO1xyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlcjtcclxuICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXI7XHJcbiAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlcjtcclxuICBzYW1wbGVDb3VudHMoKTogbnVtYmVyO1xyXG4gIGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG4gIGFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpOiBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbDtcclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOlJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtO1xyXG4gIHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICBhZGRPblJlYWR5TGlzdGVuZXIob25SZWFkeTooKCk9PnZvaWQpfG51bGwpOnZvaWQ7XHJcbiAgcmVtb3ZlT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6KCgpPT52b2lkKXxudWxsKTp2b2lkO1xyXG4gIHJlYWR5KCk6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljQXVkaW9Tb3VyY2UgaW1wbGVtZW50cyBBdWRpb1NvdXJjZXtcclxuICBwcm90ZWN0ZWQgX3JlYWR5OmJvb2xlYW49ZmFsc2U7XHJcbiAgcHJvdGVjdGVkIG9uUmVhZHlMaXN0ZW5lcnM6QXJyYXk8KCgpID0+IHZvaWQpPj1uZXcgQXJyYXk8KCkgPT4gdm9pZD4oKTtcclxuXHJcbiAgYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6ICgoKSA9PiB2b2lkKSk6IHZvaWQge1xyXG4gICAgLy8gbGV0IGFscmVhZHlBZGRlZD1mYWxzZTtcclxuICAgIC8vIGZvcihsZXQgb3Igb2YgdGhpcy5vblJlYWR5TGlzdGVuZXJzKXtcclxuICAgIC8vICAgaWYob3I9PT1vblJlYWR5KXtcclxuICAgIC8vICAgICBhbHJlYWR5QWRkZWQ9dHJ1ZTtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYoIWFscmVhZHlBZGRlZCkge1xyXG4gICAgLy8gICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMucHVzaChvblJlYWR5KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZighICh0aGlzLm9uUmVhZHlMaXN0ZW5lcnMuZmluZCgob3IpPT5vcj09PW9uUmVhZHkpKSl7XHJcbiAgICAgIHRoaXMub25SZWFkeUxpc3RlbmVycy5wdXNoKG9uUmVhZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuX3JlYWR5KXtcclxuICAgICAgb25SZWFkeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6ICgoKSA9PiB2b2lkKSk6dm9pZCB7XHJcbiAgICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnM9dGhpcy5vblJlYWR5TGlzdGVuZXJzLmZpbHRlcigob3IpPT5vciE9PW9uUmVhZHkpO1xyXG4gIH1cclxuXHJcbiAgcmVhZHkoKTp2b2lke1xyXG4gICAgdGhpcy5fcmVhZHk9dHJ1ZTtcclxuICAgIGZvcihsZXQgb25SZWFkeSBvZiB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMpe1xyXG4gICAgICBvblJlYWR5LmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBhc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTogQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGw7XHJcblxyXG4gIGFic3RyYWN0IGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG5cclxuICBhYnN0cmFjdCAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IGZyYW1lTGVuKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyO1xyXG5cclxuICBhYnN0cmFjdCByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSA7XHJcblxyXG4gIGFic3RyYWN0IHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPiA7XHJcblxyXG4gIGFic3RyYWN0IHNhbXBsZUNvdW50cygpOiBudW1iZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldCBzYW1wbGVSYXRlKCk6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvQnVmZmVyU291cmNlIGV4dGVuZHMgQmFzaWNBdWRpb1NvdXJjZXtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjpudW1iZXI7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9kdXJhdGlvbj10aGlzLl9hdWRpb0J1ZmZlci5sZW5ndGgvdGhpcy5fYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIHRoaXMucmVhZHkoKTtcclxuICB9XHJcblxyXG4gIGdldCBhdWRpb0J1ZmZlcigpOiBBdWRpb0J1ZmZlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgZHVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIH1cclxuICAgIGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICB9XHJcbiAgICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgc2FtcGxlQ291bnRzKCk6IG51bWJlciB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzKnRoaXMuX2F1ZGlvQnVmZmVyLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYXVkaW9CdWZmZXIpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFjY2Vzc0F1ZGlvQnVmZmVyU3RyZWFtKHRoaXMuX2F1ZGlvQnVmZmVyKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcbiAgZnJhbWVzT2JzKGZyYW1lUG9zOm51bWJlcixmcmFtZUxlbjpudW1iZXIsYnVmczpGbG9hdDMyQXJyYXlbXSk6T2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gIGNsb3NlKCk6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvRGF0YUhvbGRlcntcclxuICBnZXQgYXVkaW9Tb3VyY2UoKTogQXVkaW9Tb3VyY2UgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICB9XHJcbiAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9udW1iZXJPZkNoYW5uZWxzOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhbXBsZVJhdGU6bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVMZW46bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246bnVtYmVyPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1ZGlvU291cmNlOkF1ZGlvU291cmNlfG51bGwpIHtcclxuICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKSB7XHJcbiAgICAgIHRoaXMuX251bWJlck9mQ2hhbm5lbHMgPSB0aGlzLl9hdWRpb1NvdXJjZS5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICB0aGlzLl9zYW1wbGVSYXRlID0gdGhpcy5fYXVkaW9Tb3VyY2Uuc2FtcGxlUmF0ZTtcclxuICAgICAgdGhpcy5fZnJhbWVMZW4gPSB0aGlzLl9hdWRpb1NvdXJjZS5mcmFtZUxlbjtcclxuICAgICAgdGhpcy5fZHVyYXRpb24gPSB0aGlzLl9mcmFtZUxlbiAvIHRoaXMuX3NhbXBsZVJhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRPblJlYWR5TGlzdGVuZXIob25SZWFkeTooKCk9PnZvaWQpfG51bGwpOnZvaWR7XHJcbiAgICB0aGlzLl9hdWRpb1NvdXJjZT8uYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zYW1wbGVSYXRlO1xyXG4gIH1cclxuICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX251bWJlck9mQ2hhbm5lbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIHNhbXBsZUNvdW50cygpOm51bWJlcntcclxuICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkNoYW5uZWxzKnRoaXMuX2ZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTpSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbXtcclxuXHJcbiAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UucmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdObyBhdWRpbyBzb3VyY2Ugc2V0Jyk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBwcml2YXRlIGZyYW1lcyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOm51bWJlcntcclxuICAvLyAgIGxldCByZWFkPTA7XHJcbiAgLy8gICBpZih0aGlzLl9idWZmZXIpe1xyXG4gIC8vICAgICBsZXQgdG9SZWFkPWZyYW1lTGVuO1xyXG4gIC8vICAgICBpZih0aGlzLl9idWZmZXIubGVuZ3RoPGZyYW1lUG9zK2ZyYW1lTGVuKXtcclxuICAvLyAgICAgICB0b1JlYWQ9dGhpcy5fYnVmZmVyLmxlbmd0aC1mcmFtZVBvcztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBmb3IobGV0IGNoPTA7Y2g8YnVmcy5sZW5ndGg7Y2grKyl7XHJcbiAgLy8gICAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gIC8vICAgICAgIGZvcihsZXQgaT0wO2k8dG9SZWFkO2krKyl7XHJcbiAgLy8gICAgICAgICBidWZzW2NoXVtpXT1jaERhdGFbZnJhbWVQb3MraV07XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIHJlYWQ9dG9SZWFkO1xyXG4gIC8vICAgfWVsc2UgaWYodGhpcy5fYXJyYXlCdWZmZXIpe1xyXG4gIC8vICAgICByZWFkPXRoaXMuX2FycmF5QnVmZmVyLmZyYW1lcyhmcmFtZVBvcyxmcmFtZUxlbixidWZzKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiByZWFkO1xyXG4gIC8vIH1cclxuXHJcbiAgYXVkaW9JbnB1dFN0cmVhbSgpOkZsb2F0MzJBcnJheUlucHV0U3RyZWFtfG51bGx7XHJcbiAgICAvLyBpZih0aGlzLl9idWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYnVmZmVyKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGlmKHRoaXMuX2FycmF5QnVmZmVyKXtcclxuICAgIC8vICAgcmV0dXJuIG5ldyBBcnJheUF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYXJyYXlCdWZmZXIpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIG51bGw7XHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UuYXVkaW9JbnB1dFN0cmVhbSgpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW18bnVsbHtcclxuICAgIC8vIGlmKHRoaXMuX2luZGRiQXVkaW9CdWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IEluZGV4ZWREYkF1ZGlvSW5wdXRTdHJlYW0odGhpcy5faW5kZGJBdWRpb0J1ZmZlcik7XHJcbiAgICAvLyB9ZWxzZSBpZih0aGlzLl9uZXRBdWRpb0J1ZmZlcil7XHJcbiAgICAvLyAgIHJldHVybiBuZXcgTmV0QXVkaW9JbnB1dFN0cmVhbSh0aGlzLl9uZXRBdWRpb0J1ZmZlcik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UuYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgYnVmZmVyKCk6IEF1ZGlvQnVmZmVyIHwgbnVsbCB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBhcnJheUJ1ZmZlcigpOiBBcnJheUF1ZGlvQnVmZmVyIHwgbnVsbCB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYXJyYXlCdWZmZXI7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gZ2V0IGluZGRiQnVmZmVyKCk6SW5kZXhlZERiQXVkaW9CdWZmZXJ8bnVsbHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBuZXRCdWZmZXIoKTpOZXRBdWRpb0J1ZmZlcnxudWxse1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX25ldEF1ZGlvQnVmZmVyO1xyXG4gIC8vIH1cclxuXHJcbiAgcmVsZWFzZUF1ZGlvRGF0YSgpOk9ic2VydmFibGU8dm9pZD57XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgIC8vaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgIEluZGV4ZWREYkF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9Tb3VyY2UucmVsZWFzZUF1ZGlvRGF0YSgpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2F1ZGlvU291cmNlID0gbnVsbDtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSwgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gfWVsc2V7XHJcbiAgICAgIC8vICAgLy8gT3RoZXJzIGhhdmUgbm8gcGVyc2lzdGVudCByZXNwZWN0aXZlbHkgYXN5bmMgZGVsZXRhYmxlIHN0b3JhZ2UsIHRoZXkgc2hvdWxkIGJlIGZpbmFsbHkgcmVtb3ZlZCBieSB0aGUgR0NcclxuICAgICAgLy8gICAvL3RoaXMuX2J1ZmZlcj1udWxsO1xyXG4gICAgICAvLyAgIC8vdGhpcy5fYXJyYXlCdWZmZXI9bnVsbDtcclxuICAgICAgLy8gICB0aGlzLl9hdWRpb1NvdXJjZT1udWxsO1xyXG4gICAgICAvLyAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAvLyAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgLy8gfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhbmRvbUFjY2Vzc0F1ZGlvQnVmZmVyU3RyZWFtIGltcGxlbWVudHMgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2J1ZmZlcjpBdWRpb0J1ZmZlcikge1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBmcmFtZXNPYnMoZnJhbWVQb3M6IG51bWJlciwgZnJhbWVMZW46IG51bWJlciwgYnVmczogRmxvYXQzMkFycmF5W10pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxudW1iZXI+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICBsZXQgcmVhZD0wO1xyXG4gICAgICAgIGxldCB0b1JlYWQ9ZnJhbWVMZW47XHJcbiAgICAgICAgaWYodGhpcy5fYnVmZmVyLmxlbmd0aDxmcmFtZVBvcytmcmFtZUxlbil7XHJcbiAgICAgICAgICB0b1JlYWQ9dGhpcy5fYnVmZmVyLmxlbmd0aC1mcmFtZVBvcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGxldCBjaD0wO2NoPGJ1ZnMubGVuZ3RoO2NoKyspe1xyXG4gICAgICAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgICAgZm9yKGxldCBpPTA7aTx0b1JlYWQ7aSsrKXtcclxuICAgICAgICAgICAgYnVmc1tjaF1baV09Y2hEYXRhW2ZyYW1lUG9zK2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZWFkPXRvUmVhZDtcclxuXHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlYWQpO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0gaW1wbGVtZW50cyBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICBwcml2YXRlIGZyYW1lUG9zPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgc2tpcEZyYW1lcyhuOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZnJhbWVQb3MrPW47XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuICAgIGxldCB0b1JlYWQ9YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICBpZih0aGlzLmZyYW1lUG9zK3RvUmVhZD50aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aCl7XHJcbiAgICAgIHRvUmVhZD10aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aC10aGlzLmZyYW1lUG9zO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBjaD0wO2NoPGJ1ZmZlcnMubGVuZ3RoO2NoKyspIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b1JlYWQ7IGkrKykge1xyXG4gICAgICAgIGJ1ZmZlcnNbY2hdW2ldPXRoaXMuYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpW3RoaXMuZnJhbWVQb3MraV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlYWQ9dG9SZWFkO1xyXG4gICAgdGhpcy5mcmFtZVBvcys9dG9SZWFkO1xyXG4gICAgcmV0dXJuIHJlYWQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|