speechrecorderng 3.6.0 → 3.8.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/esm2022/lib/action/action.mjs +73 -0
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer.mjs +163 -163
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_input_stream.mjs +85 -85
- package/{esm2020 → esm2022}/lib/audio/array_audio_buffer_random_access_stream.mjs +15 -15
- package/esm2022/lib/audio/audio_data_holder.mjs +264 -0
- package/{esm2020 → esm2022}/lib/audio/audio_display.mjs +93 -93
- package/{esm2020 → esm2022}/lib/audio/audio_player.mjs +213 -213
- package/esm2022/lib/audio/capture/capture.mjs +855 -0
- package/esm2022/lib/audio/context.mjs +79 -0
- package/{esm2020 → esm2022}/lib/audio/dsp/level_measure.mjs +515 -515
- package/{esm2020 → esm2022}/lib/audio/format.mjs +16 -16
- package/esm2022/lib/audio/impl/wavformat.mjs +6 -0
- package/{esm2020 → esm2022}/lib/audio/impl/wavreader.mjs +133 -133
- package/esm2022/lib/audio/impl/wavwriter.mjs +105 -0
- package/esm2022/lib/audio/inddb_audio_buffer.mjs +508 -0
- package/{esm2020 → esm2022}/lib/audio/io/stream.mjs +58 -58
- package/esm2022/lib/audio/net_audio_buffer.mjs +293 -0
- package/{esm2020 → esm2022}/lib/audio/persistor.mjs +80 -80
- package/{esm2020 → esm2022}/lib/audio/playback/array_audio_buffer_source_node.mjs +125 -125
- package/esm2022/lib/audio/playback/audio_source_node.mjs +18 -0
- package/esm2022/lib/audio/playback/audio_source_worklet_module_loader.mjs +167 -0
- package/{esm2020 → esm2022}/lib/audio/playback/inddb_audio_buffer_source_node.mjs +166 -166
- package/{esm2020 → esm2022}/lib/audio/playback/net_audio_buffer_source_node.mjs +217 -217
- package/esm2022/lib/audio/playback/player.mjs +402 -0
- package/esm2022/lib/audio/ui/audio_canvas_layer_comp.mjs +347 -0
- package/{esm2020 → esm2022}/lib/audio/ui/audio_display_control.mjs +65 -65
- package/{esm2020 → esm2022}/lib/audio/ui/audio_display_scroll_pane.mjs +139 -139
- package/{esm2020 → esm2022}/lib/audio/ui/audiosignal.mjs +524 -524
- package/{esm2020 → esm2022}/lib/audio/ui/common.mjs +18 -18
- package/esm2022/lib/audio/ui/container.mjs +414 -0
- package/{esm2020 → esm2022}/lib/audio/ui/livelevel.mjs +352 -352
- package/esm2022/lib/audio/ui/scroll_pane_horizontal.mjs +11 -0
- package/esm2022/lib/audio/ui/sonagram.mjs +900 -0
- package/esm2022/lib/db/inddb.mjs +120 -0
- package/esm2022/lib/dsp/utils.mjs +48 -0
- package/{esm2020 → esm2022}/lib/io/BinaryReader.mjs +84 -84
- package/esm2022/lib/io/BinaryWriter.mjs +74 -0
- package/{esm2020 → esm2022}/lib/io/stream.mjs +258 -258
- package/{esm2020 → esm2022}/lib/math/2d/geometry.mjs +27 -27
- package/esm2022/lib/math/complex.mjs +58 -0
- package/{esm2020 → esm2022}/lib/math/dft.mjs +195 -195
- package/{esm2020 → esm2022}/lib/media/utils.mjs +13 -13
- package/esm2022/lib/net/uploader.mjs +367 -0
- package/{esm2020 → esm2022}/lib/recorder_component.mjs +64 -64
- package/esm2022/lib/speechrecorder/project/project.mjs +49 -0
- package/esm2022/lib/speechrecorder/project/project.service.mjs +64 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/recording.mjs +123 -123
- package/esm2022/lib/speechrecorder/recordings/basic_recording.service.mjs +218 -0
- package/esm2022/lib/speechrecorder/recordings/recordings.service.mjs +1014 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/script/script.mjs +114 -114
- package/{esm2020 → esm2022}/lib/speechrecorder/script/script.service.mjs +47 -47
- package/esm2022/lib/speechrecorder/session/audiorecorder.mjs +1179 -0
- package/esm2022/lib/speechrecorder/session/basicrecorder.mjs +668 -0
- package/esm2022/lib/speechrecorder/session/controlpanel.mjs +416 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/item.mjs +29 -29
- package/{esm2020 → esm2022}/lib/speechrecorder/session/progress.mjs +69 -69
- package/{esm2020 → esm2022}/lib/speechrecorder/session/prompting.mjs +571 -571
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recorder_combi_pane.mjs +65 -65
- package/esm2022/lib/speechrecorder/session/recording_file_cache.mjs +195 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recording_list.mjs +103 -103
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +63 -63
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +51 -51
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +104 -104
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +381 -381
- package/{esm2020 → esm2022}/lib/speechrecorder/session/recordingfile/recording-file.mjs +67 -67
- package/esm2022/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +288 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/session.mjs +1 -1
- package/esm2022/lib/speechrecorder/session/session.service.mjs +69 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/session_finished_dialog.mjs +29 -29
- package/esm2022/lib/speechrecorder/session/sessionmanager.mjs +1386 -0
- package/{esm2020 → esm2022}/lib/speechrecorder/session/warning_bar.mjs +28 -28
- package/{esm2020 → esm2022}/lib/speechrecorder/spruploader.mjs +22 -22
- package/{esm2020 → esm2022}/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -1
- package/esm2022/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +57 -0
- package/{esm2020 → esm2022}/lib/speechrecorderng.component.mjs +388 -388
- package/{esm2020 → esm2022}/lib/speechrecorderng.module.mjs +100 -100
- package/{esm2020 → esm2022}/lib/spr.config.mjs +26 -26
- package/{esm2020 → esm2022}/lib/spr.module.version.mjs +2 -2
- package/{esm2020 → esm2022}/lib/ui/canvas_layer_comp.mjs +38 -38
- package/{esm2020 → esm2022}/lib/ui/message_dialog.mjs +30 -30
- package/esm2022/lib/ui/recordingitem_display.mjs +253 -0
- package/{esm2020 → esm2022}/lib/ui/responsive_component.mjs +24 -24
- package/{esm2020 → esm2022}/lib/utils/scrollIntoViewToBottom.mjs +23 -23
- package/esm2022/lib/utils/ua-parser.mjs +190 -0
- package/esm2022/lib/utils/utils.mjs +105 -0
- package/esm2022/lib/utils/wake_lock.mjs +114 -0
- package/{esm2020 → esm2022}/lib/utils/wake_lock_media.mjs +1 -1
- package/{esm2020 → esm2022}/public-api.mjs +33 -33
- package/{esm2020 → esm2022}/speechrecorderng.mjs +4 -4
- package/{fesm2020 → fesm2022}/speechrecorderng.mjs +16518 -16454
- package/fesm2022/speechrecorderng.mjs.map +1 -0
- package/index.d.ts +5 -5
- package/lib/action/action.d.ts +27 -27
- package/lib/audio/array_audio_buffer.d.ts +31 -31
- package/lib/audio/array_audio_buffer_input_stream.d.ts +14 -14
- package/lib/audio/array_audio_buffer_random_access_stream.d.ts +9 -9
- package/lib/audio/audio_data_holder.d.ts +84 -84
- package/lib/audio/audio_display.d.ts +36 -36
- package/lib/audio/audio_player.d.ts +47 -47
- package/lib/audio/capture/capture.d.ts +67 -67
- package/lib/audio/context.d.ts +6 -6
- package/lib/audio/dsp/level_measure.d.ts +60 -60
- package/lib/audio/format.d.ts +11 -11
- package/lib/audio/impl/wavformat.d.ts +5 -5
- package/lib/audio/impl/wavreader.d.ts +16 -16
- package/lib/audio/impl/wavwriter.d.ts +13 -13
- package/lib/audio/inddb_audio_buffer.d.ts +68 -68
- package/lib/audio/io/stream.d.ts +28 -28
- package/lib/audio/net_audio_buffer.d.ts +57 -57
- package/lib/audio/persistor.d.ts +29 -29
- package/lib/audio/playback/array_audio_buffer_source_node.d.ts +18 -18
- package/lib/audio/playback/audio_source_node.d.ts +10 -10
- package/lib/audio/playback/audio_source_worklet_module_loader.d.ts +4 -4
- package/lib/audio/playback/inddb_audio_buffer_source_node.d.ts +21 -21
- package/lib/audio/playback/net_audio_buffer_source_node.d.ts +27 -27
- package/lib/audio/playback/player.d.ts +65 -65
- package/lib/audio/ui/audio_canvas_layer_comp.d.ts +68 -68
- package/lib/audio/ui/audio_display_control.d.ts +25 -25
- package/lib/audio/ui/audio_display_scroll_pane.d.ts +26 -26
- package/lib/audio/ui/audiosignal.d.ts +30 -30
- package/lib/audio/ui/common.d.ts +11 -11
- package/lib/audio/ui/container.d.ts +63 -63
- package/lib/audio/ui/livelevel.d.ts +60 -60
- package/lib/audio/ui/scroll_pane_horizontal.d.ts +5 -5
- package/lib/audio/ui/sonagram.d.ts +37 -37
- package/lib/db/inddb.d.ts +21 -21
- package/lib/dsp/utils.d.ts +19 -19
- package/lib/io/BinaryReader.d.ts +18 -18
- package/lib/io/BinaryWriter.d.ts +15 -15
- package/lib/io/stream.d.ts +59 -59
- package/lib/math/2d/geometry.d.ts +18 -18
- package/lib/math/complex.d.ts +17 -17
- package/lib/math/dft.d.ts +22 -22
- package/lib/media/utils.d.ts +3 -3
- package/lib/net/uploader.d.ts +81 -81
- package/lib/recorder_component.d.ts +16 -16
- package/lib/speechrecorder/project/project.d.ts +59 -59
- package/lib/speechrecorder/project/project.service.d.ts +21 -21
- package/lib/speechrecorder/recording.d.ts +51 -51
- package/lib/speechrecorder/recordings/basic_recording.service.d.ts +27 -27
- package/lib/speechrecorder/recordings/recordings.service.d.ts +48 -48
- package/lib/speechrecorder/script/script.d.ts +80 -79
- package/lib/speechrecorder/script/script.service.d.ts +16 -16
- package/lib/speechrecorder/session/audiorecorder.d.ts +122 -122
- package/lib/speechrecorder/session/basicrecorder.d.ts +139 -139
- package/lib/speechrecorder/session/controlpanel.d.ts +109 -107
- package/lib/speechrecorder/session/item.d.ts +12 -12
- package/lib/speechrecorder/session/progress.d.ts +17 -17
- package/lib/speechrecorder/session/prompting.d.ts +121 -121
- package/lib/speechrecorder/session/recorder_combi_pane.d.ts +32 -32
- package/lib/speechrecorder/session/recording_file_cache.d.ts +33 -33
- package/lib/speechrecorder/session/recording_list.d.ts +24 -24
- package/lib/speechrecorder/session/recordingfile/recording-file-meta.component.d.ts +15 -15
- package/lib/speechrecorder/session/recordingfile/recording-file-navi.component.d.ts +20 -20
- package/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.d.ts +31 -31
- package/lib/speechrecorder/session/recordingfile/recording-file-view.component.d.ts +55 -55
- package/lib/speechrecorder/session/recordingfile/recording-file.d.ts +7 -7
- package/lib/speechrecorder/session/recordingfile/recordingfile-service.d.ts +24 -24
- package/lib/speechrecorder/session/session.d.ts +15 -15
- package/lib/speechrecorder/session/session.service.d.ts +20 -20
- package/lib/speechrecorder/session/session_finished_dialog.d.ts +10 -10
- package/lib/speechrecorder/session/sessionmanager.d.ts +129 -123
- package/lib/speechrecorder/session/warning_bar.d.ts +8 -8
- package/lib/speechrecorder/spruploader.d.ts +11 -11
- package/lib/speechrecorder/startstopsignal/startstopsignal.d.ts +10 -10
- package/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.d.ts +11 -11
- package/lib/speechrecorderng.component.d.ts +61 -61
- package/lib/speechrecorderng.module.d.ts +56 -56
- package/lib/spr.config.d.ts +17 -17
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/ui/canvas_layer_comp.d.ts +13 -13
- package/lib/ui/message_dialog.d.ts +10 -10
- package/lib/ui/recordingitem_display.d.ts +84 -84
- package/lib/ui/responsive_component.d.ts +9 -9
- package/lib/utils/scrollIntoViewToBottom.d.ts +9 -9
- package/lib/utils/ua-parser.d.ts +43 -43
- package/lib/utils/utils.d.ts +19 -19
- package/lib/utils/wake_lock.d.ts +23 -23
- package/lib/utils/wake_lock_media.d.ts +1 -1
- package/package.json +17 -23
- package/public-api.d.ts +33 -33
- package/esm2020/lib/action/action.mjs +0 -73
- package/esm2020/lib/audio/audio_data_holder.mjs +0 -264
- package/esm2020/lib/audio/capture/capture.mjs +0 -855
- package/esm2020/lib/audio/context.mjs +0 -79
- package/esm2020/lib/audio/impl/wavformat.mjs +0 -6
- package/esm2020/lib/audio/impl/wavwriter.mjs +0 -105
- package/esm2020/lib/audio/inddb_audio_buffer.mjs +0 -508
- package/esm2020/lib/audio/net_audio_buffer.mjs +0 -293
- package/esm2020/lib/audio/playback/audio_source_node.mjs +0 -18
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +0 -167
- package/esm2020/lib/audio/playback/player.mjs +0 -402
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +0 -347
- package/esm2020/lib/audio/ui/container.mjs +0 -414
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +0 -11
- package/esm2020/lib/audio/ui/sonagram.mjs +0 -900
- package/esm2020/lib/db/inddb.mjs +0 -120
- package/esm2020/lib/dsp/utils.mjs +0 -48
- package/esm2020/lib/io/BinaryWriter.mjs +0 -74
- package/esm2020/lib/math/complex.mjs +0 -58
- package/esm2020/lib/net/uploader.mjs +0 -367
- package/esm2020/lib/speechrecorder/project/project.mjs +0 -49
- package/esm2020/lib/speechrecorder/project/project.service.mjs +0 -64
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +0 -216
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +0 -1014
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +0 -1179
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +0 -666
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +0 -409
- package/esm2020/lib/speechrecorder/session/recording_file_cache.mjs +0 -195
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +0 -288
- package/esm2020/lib/speechrecorder/session/session.service.mjs +0 -69
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +0 -1333
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +0 -57
- package/esm2020/lib/ui/recordingitem_display.mjs +0 -253
- package/esm2020/lib/utils/ua-parser.mjs +0 -190
- package/esm2020/lib/utils/utils.mjs +0 -105
- package/esm2020/lib/utils/wake_lock.mjs +0 -114
- package/fesm2015/speechrecorderng.mjs +0 -17708
- package/fesm2015/speechrecorderng.mjs.map +0 -1
- package/fesm2020/speechrecorderng.mjs.map +0 -1
|
@@ -1,59 +1,59 @@
|
|
|
1
|
-
import { Float32ArrayChunkerOutStream } from "../../io/stream";
|
|
2
|
-
export class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream {
|
|
3
|
-
constructor(outStream, chunkDurationSeconds) {
|
|
4
|
-
super(outStream);
|
|
5
|
-
this.chunkDurationSeconds = chunkDurationSeconds;
|
|
6
|
-
this.sampleRate = null;
|
|
7
|
-
this.sequenceAudioFloat32OutStream = outStream;
|
|
8
|
-
}
|
|
9
|
-
setFormat(channels, sampleRate) {
|
|
10
|
-
//console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: "+channels+",sampleRate: "+sampleRate+")")
|
|
11
|
-
this.channels = channels;
|
|
12
|
-
this.sampleRate = sampleRate;
|
|
13
|
-
this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
|
|
14
|
-
//console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: "+this.chunkSize);
|
|
15
|
-
this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
|
|
16
|
-
}
|
|
17
|
-
nextStream() {
|
|
18
|
-
this.sequenceAudioFloat32OutStream.nextStream();
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Streams a SequenceAudioFloat32OutStream to multiple streams
|
|
23
|
-
*/
|
|
24
|
-
export class SequenceAudioFloat32OutStreamMultiplier {
|
|
25
|
-
constructor() {
|
|
26
|
-
this._sequenceAudioFloat32OutStreams = new Array();
|
|
27
|
-
}
|
|
28
|
-
get sequenceAudioFloat32OutStreams() {
|
|
29
|
-
return this._sequenceAudioFloat32OutStreams;
|
|
30
|
-
}
|
|
31
|
-
setFormat(channels, sampleRate) {
|
|
32
|
-
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
33
|
-
os.setFormat(channels, sampleRate);
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
nextStream() {
|
|
37
|
-
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
38
|
-
os.nextStream();
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
close() {
|
|
42
|
-
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
43
|
-
os.close();
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
flush() {
|
|
47
|
-
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
48
|
-
os.flush();
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
write(buffers) {
|
|
52
|
-
let toWrite = buffers.length;
|
|
53
|
-
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
54
|
-
os.write(buffers);
|
|
55
|
-
}
|
|
56
|
-
return toWrite;
|
|
57
|
-
}
|
|
58
|
-
}
|
|
1
|
+
import { Float32ArrayChunkerOutStream } from "../../io/stream";
|
|
2
|
+
export class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream {
|
|
3
|
+
constructor(outStream, chunkDurationSeconds) {
|
|
4
|
+
super(outStream);
|
|
5
|
+
this.chunkDurationSeconds = chunkDurationSeconds;
|
|
6
|
+
this.sampleRate = null;
|
|
7
|
+
this.sequenceAudioFloat32OutStream = outStream;
|
|
8
|
+
}
|
|
9
|
+
setFormat(channels, sampleRate) {
|
|
10
|
+
//console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: "+channels+",sampleRate: "+sampleRate+")")
|
|
11
|
+
this.channels = channels;
|
|
12
|
+
this.sampleRate = sampleRate;
|
|
13
|
+
this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
|
|
14
|
+
//console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: "+this.chunkSize);
|
|
15
|
+
this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
|
|
16
|
+
}
|
|
17
|
+
nextStream() {
|
|
18
|
+
this.sequenceAudioFloat32OutStream.nextStream();
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Streams a SequenceAudioFloat32OutStream to multiple streams
|
|
23
|
+
*/
|
|
24
|
+
export class SequenceAudioFloat32OutStreamMultiplier {
|
|
25
|
+
constructor() {
|
|
26
|
+
this._sequenceAudioFloat32OutStreams = new Array();
|
|
27
|
+
}
|
|
28
|
+
get sequenceAudioFloat32OutStreams() {
|
|
29
|
+
return this._sequenceAudioFloat32OutStreams;
|
|
30
|
+
}
|
|
31
|
+
setFormat(channels, sampleRate) {
|
|
32
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
33
|
+
os.setFormat(channels, sampleRate);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
nextStream() {
|
|
37
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
38
|
+
os.nextStream();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
close() {
|
|
42
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
43
|
+
os.close();
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
flush() {
|
|
47
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
48
|
+
os.flush();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
write(buffers) {
|
|
52
|
+
let toWrite = buffers.length;
|
|
53
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
54
|
+
os.write(buffers);
|
|
55
|
+
}
|
|
56
|
+
return toWrite;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
59
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2lvL3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsNEJBQTRCLEVBQXdCLE1BQU0saUJBQWlCLENBQUM7QUFVcEYsTUFBTSxPQUFPLG9DQUFxQyxTQUFRLDRCQUE0QjtJQUlwRixZQUFZLFNBQXVDLEVBQVUsb0JBQTJCO1FBQ3RGLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUQwQyx5QkFBb0IsR0FBcEIsb0JBQW9CLENBQU87UUFGaEYsZUFBVSxHQUFhLElBQUksQ0FBQztRQUlsQyxJQUFJLENBQUMsNkJBQTZCLEdBQUMsU0FBUyxDQUFDO0lBQy9DLENBQUM7SUFFRCxTQUFTLENBQUMsUUFBZ0IsRUFBQyxVQUFpQjtRQUMxQyxvSEFBb0g7UUFDcEgsSUFBSSxDQUFDLFFBQVEsR0FBQyxRQUFRLENBQUM7UUFDdkIsSUFBSSxDQUFDLFVBQVUsR0FBQyxVQUFVLENBQUM7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUNoRSxvRkFBb0Y7UUFDcEYsSUFBSSxDQUFDLDZCQUE2QixDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7SUFDcEUsQ0FBQztJQUNELFVBQVU7UUFDUixJQUFJLENBQUMsNkJBQTZCLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsQ0FBQztDQUNGO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLE9BQU8sdUNBQXVDO0lBSWxEO1FBQ0UsSUFBSSxDQUFDLCtCQUErQixHQUFDLElBQUksS0FBSyxFQUFpQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCxJQUFJLDhCQUE4QjtRQUNoQyxPQUFPLElBQUksQ0FBQywrQkFBK0IsQ0FBQztJQUM5QyxDQUFDO0lBRUQsU0FBUyxDQUFDLFFBQWdCLEVBQUMsVUFBaUI7UUFDMUMsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDL0MsRUFBRSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUMsVUFBVSxDQUFDLENBQUM7U0FDckM7SUFDSCxDQUFDO0lBQ0QsVUFBVTtRQUNSLEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNqQjtJQUNILENBQUM7SUFFRCxLQUFLO1FBQ0gsS0FBSSxJQUFJLEVBQUUsSUFBSSxJQUFJLENBQUMsK0JBQStCLEVBQUM7WUFDakQsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDO1NBQ1o7SUFDSCxDQUFDO0lBRUQsS0FBSztRQUNILEtBQUksSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFDO1lBQ2pELEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQztTQUNaO0lBQ0gsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUE0QjtRQUNoQyxJQUFJLE9BQU8sR0FBUSxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQ2hDLEtBQUssSUFBSSxFQUFFLElBQUksSUFBSSxDQUFDLCtCQUErQixFQUFFO1lBQ25ELEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDbkI7UUFDSCxPQUFPLE9BQU8sQ0FBQztJQUNqQixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Zsb2F0MzJBcnJheUNodW5rZXJPdXRTdHJlYW0sIEZsb2F0MzJBcnJheU91dFN0cmVhbX0gZnJvbSBcIi4uLy4uL2lvL3N0cmVhbVwiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb0Zsb2F0MzJPdXRTdHJlYW0gZXh0ZW5kcyBGbG9hdDMyQXJyYXlPdXRTdHJlYW17XHJcbiAgICBzZXRGb3JtYXQoY2hhbm5lbHM6IG51bWJlcixzYW1wbGVSYXRlOm51bWJlcik6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSBleHRlbmRzIEF1ZGlvRmxvYXQzMk91dFN0cmVhbXtcclxuICAgIG5leHRTdHJlYW0oKTp2b2lkO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtIGV4dGVuZHMgRmxvYXQzMkFycmF5Q2h1bmtlck91dFN0cmVhbSBpbXBsZW1lbnRzIFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFte1xyXG5cclxuICBwcml2YXRlIHNhbXBsZVJhdGU6bnVtYmVyfG51bGw9bnVsbDtcclxuICBwcml2YXRlIHNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtOlNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtO1xyXG4gIGNvbnN0cnVjdG9yKG91dFN0cmVhbTpTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSwgcHJpdmF0ZSBjaHVua0R1cmF0aW9uU2Vjb25kczpudW1iZXIpe1xyXG4gICAgc3VwZXIob3V0U3RyZWFtKTtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW09b3V0U3RyZWFtO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsc2FtcGxlUmF0ZTpudW1iZXIpOnZvaWR7XHJcbiAgICAvL2NvbnNvbGUuZGVidWcoXCJTZXF1ZW5jZUF1ZGlvRmxvYXQzMkNodW5rZXJPdXRTdHJlYW06c2V0Rm9ybWF0KGNoYW5uZWxzOiBcIitjaGFubmVscytcIixzYW1wbGVSYXRlOiBcIitzYW1wbGVSYXRlK1wiKVwiKVxyXG4gICAgdGhpcy5jaGFubmVscz1jaGFubmVscztcclxuICAgIHRoaXMuc2FtcGxlUmF0ZT1zYW1wbGVSYXRlO1xyXG4gICAgdGhpcy5jaHVua1NpemU9TWF0aC5yb3VuZChzYW1wbGVSYXRlKnRoaXMuY2h1bmtEdXJhdGlvblNlY29uZHMpO1xyXG4gICAgLy9jb25zb2xlLmRlYnVnKFwiU2VxdWVuY2VBdWRpb0Zsb2F0MzJDaHVua2VyT3V0U3RyZWFtOiBjaHVua1NpemU6IFwiK3RoaXMuY2h1bmtTaXplKTtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0uc2V0Rm9ybWF0KGNoYW5uZWxzLHNhbXBsZVJhdGUpO1xyXG4gIH1cclxuICBuZXh0U3RyZWFtKCk6dm9pZHtcclxuICAgIHRoaXMuc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0ubmV4dFN0cmVhbSgpO1xyXG4gIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIFN0cmVhbXMgYSBTZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbSB0byBtdWx0aXBsZSBzdHJlYW1zXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1NdWx0aXBsaWVyIGltcGxlbWVudHMgU2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW17XHJcblxyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyE6QXJyYXk8U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0+O1xyXG5cclxuICBjb25zdHJ1Y3RvcigpIHtcclxuICAgIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcz1uZXcgQXJyYXk8U2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW0+KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKCk6IEFycmF5PFNlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtPiB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zO1xyXG4gIH1cclxuXHJcbiAgc2V0Rm9ybWF0KGNoYW5uZWxzOiBudW1iZXIsc2FtcGxlUmF0ZTpudW1iZXIpOnZvaWR7XHJcbiAgICBmb3IobGV0IG9zIG9mIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyl7XHJcbiAgICAgICAgb3Muc2V0Rm9ybWF0KGNoYW5uZWxzLHNhbXBsZVJhdGUpO1xyXG4gICAgfVxyXG4gIH1cclxuICBuZXh0U3RyZWFtKCk6dm9pZHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgb3MubmV4dFN0cmVhbSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICBmb3IobGV0IG9zIG9mIHRoaXMuX3NlcXVlbmNlQXVkaW9GbG9hdDMyT3V0U3RyZWFtcyl7XHJcbiAgICAgIG9zLmNsb3NlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBmbHVzaCgpOiB2b2lkIHtcclxuICAgIGZvcihsZXQgb3Mgb2YgdGhpcy5fc2VxdWVuY2VBdWRpb0Zsb2F0MzJPdXRTdHJlYW1zKXtcclxuICAgICAgb3MuZmx1c2goKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHdyaXRlKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHRvV3JpdGU6bnVtYmVyPWJ1ZmZlcnMubGVuZ3RoO1xyXG4gICAgICBmb3IgKGxldCBvcyBvZiB0aGlzLl9zZXF1ZW5jZUF1ZGlvRmxvYXQzMk91dFN0cmVhbXMpIHtcclxuICAgICAgICBvcy53cml0ZShidWZmZXJzKTtcclxuICAgICAgfVxyXG4gICAgcmV0dXJuIHRvV3JpdGU7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
import { BasicAudioSource } from "./audio_data_holder";
|
|
3
|
+
import { HttpErrorResponse } from "@angular/common/http";
|
|
4
|
+
export class NetAudioBuffer extends BasicAudioSource {
|
|
5
|
+
get orgFetchChunkFrameLen() {
|
|
6
|
+
return this._orgFetchChunkFrameLen;
|
|
7
|
+
}
|
|
8
|
+
get recFileService() {
|
|
9
|
+
return this._recFileService;
|
|
10
|
+
}
|
|
11
|
+
get baseUrl() {
|
|
12
|
+
return this._baseUrl;
|
|
13
|
+
}
|
|
14
|
+
get chunkFrameLen() {
|
|
15
|
+
return this._chunkFrameLen;
|
|
16
|
+
}
|
|
17
|
+
get uuid() {
|
|
18
|
+
return this._uuid;
|
|
19
|
+
}
|
|
20
|
+
constructor(_recFileService, _baseUrl, _channelCount, _sampleRate, _chunkFrameLen, _frameLen, _uuid = null, _orgFetchChunkFrameLen = _chunkFrameLen) {
|
|
21
|
+
super();
|
|
22
|
+
this._recFileService = _recFileService;
|
|
23
|
+
this._baseUrl = _baseUrl;
|
|
24
|
+
this._channelCount = _channelCount;
|
|
25
|
+
this._sampleRate = _sampleRate;
|
|
26
|
+
this._chunkFrameLen = _chunkFrameLen;
|
|
27
|
+
this._frameLen = _frameLen;
|
|
28
|
+
this._uuid = _uuid;
|
|
29
|
+
this._orgFetchChunkFrameLen = _orgFetchChunkFrameLen;
|
|
30
|
+
this._chunkCount = 0;
|
|
31
|
+
this._sealed = false;
|
|
32
|
+
}
|
|
33
|
+
get channelCount() {
|
|
34
|
+
return this._channelCount;
|
|
35
|
+
}
|
|
36
|
+
sealed() {
|
|
37
|
+
return this._sealed;
|
|
38
|
+
}
|
|
39
|
+
seal() {
|
|
40
|
+
this._sealed = true;
|
|
41
|
+
}
|
|
42
|
+
get sampleRate() {
|
|
43
|
+
return this._sampleRate;
|
|
44
|
+
}
|
|
45
|
+
get frameLen() {
|
|
46
|
+
return this._frameLen;
|
|
47
|
+
}
|
|
48
|
+
get chunkCount() {
|
|
49
|
+
return this._chunkCount;
|
|
50
|
+
}
|
|
51
|
+
releaseAudioData() {
|
|
52
|
+
return new Observable((subscriber) => {
|
|
53
|
+
// nothing to remove
|
|
54
|
+
subscriber.next();
|
|
55
|
+
subscriber.complete();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
toString() {
|
|
59
|
+
return "Indexed db audio buffer. Channels: " + this.channelCount + ", sample rate: " + this.sampleRate + ", chunk frame length: " + this._chunkFrameLen + ", number of chunks: " + this.chunkCount + ", frame length: " + this.frameLen + ", sealed: " + this.sealed();
|
|
60
|
+
}
|
|
61
|
+
static fromChunkAudioBuffer(recordingsService, baseUrl, ab, frameLen, orgFetchChunkFrameLen = ab.length) {
|
|
62
|
+
let nab = new NetAudioBuffer(recordingsService, baseUrl, ab.numberOfChannels, ab.sampleRate, ab.length, frameLen, null, orgFetchChunkFrameLen);
|
|
63
|
+
nab.ready();
|
|
64
|
+
return nab;
|
|
65
|
+
}
|
|
66
|
+
asyncAudioInputStream() {
|
|
67
|
+
return new NetAudioInputStream(this);
|
|
68
|
+
}
|
|
69
|
+
audioInputStream() {
|
|
70
|
+
return null;
|
|
71
|
+
}
|
|
72
|
+
get duration() {
|
|
73
|
+
return this._frameLen / this._sampleRate;
|
|
74
|
+
}
|
|
75
|
+
get numberOfChannels() {
|
|
76
|
+
return this._channelCount;
|
|
77
|
+
}
|
|
78
|
+
sampleCounts() {
|
|
79
|
+
return this._channelCount * this._frameLen;
|
|
80
|
+
}
|
|
81
|
+
randomAccessAudioStream() {
|
|
82
|
+
return new NetRandomAccessAudioStream(this);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// export class NetAudioChunk{
|
|
86
|
+
//
|
|
87
|
+
// get orgSampleRate(): number {
|
|
88
|
+
// return this._orgSampleRate;
|
|
89
|
+
// }
|
|
90
|
+
//
|
|
91
|
+
// get orgFrameLen(): number {
|
|
92
|
+
// return this._orgFrameLen;
|
|
93
|
+
// }
|
|
94
|
+
// constructor(private _decodedBuffers:Float32Array[],private _orgSampleRate:number,private _orgFrameLen:number) {
|
|
95
|
+
// }
|
|
96
|
+
// }
|
|
97
|
+
export class NetRandomAccessAudioStream {
|
|
98
|
+
constructor(_netAb) {
|
|
99
|
+
this._netAb = _netAb;
|
|
100
|
+
this._currCi = 0;
|
|
101
|
+
this._ccCache = null;
|
|
102
|
+
}
|
|
103
|
+
chunk(baseUrl, ci, cb, errCb) {
|
|
104
|
+
let startFrame = ci * this._netAb.orgFetchChunkFrameLen;
|
|
105
|
+
this._netAb.recFileService.chunkAudioRequest(baseUrl, startFrame, this._netAb.orgFetchChunkFrameLen).subscribe({
|
|
106
|
+
next: (chDl) => {
|
|
107
|
+
if (chDl) {
|
|
108
|
+
const ab = chDl.decodedAudioBuffer;
|
|
109
|
+
const ccChs = ab.numberOfChannels;
|
|
110
|
+
let arrBuf = new Array();
|
|
111
|
+
for (let ch = 0; ch < ccChs; ch++) {
|
|
112
|
+
arrBuf.push(ab.getChannelData(ch));
|
|
113
|
+
}
|
|
114
|
+
cb(arrBuf, chDl.orgFrameLength);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
cb(null, null);
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
complete: () => { },
|
|
121
|
+
error: (errEv) => {
|
|
122
|
+
//NetRandomAccessAudioStream._runningRequests--;
|
|
123
|
+
if (errEv instanceof HttpErrorResponse) {
|
|
124
|
+
if (errEv.status === 404) {
|
|
125
|
+
cb(null, null);
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.error("Net audio buffer chunk audio request Http error event: " + errEv.status + ", " + errEv.name + ", " + errEv.message);
|
|
129
|
+
errCb(new Error(errEv.toString()));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
console.error("Net audio buffer chunk audio request error event: " + errEv.message);
|
|
134
|
+
errCb(new Error(errEv.toString()));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
_fillBufs(ccBufs, orgFrameLen, trgState, srcState) {
|
|
140
|
+
let ccBufsChs = ccBufs.length;
|
|
141
|
+
if (ccBufsChs > 0) {
|
|
142
|
+
let ccBuf0 = ccBufs[0];
|
|
143
|
+
let ccBufsLen = ccBuf0.length;
|
|
144
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs framePos: '+framePos+', srcFramePos: '+srcFramePos+', ccBufsLen: '+ccBufsLen);
|
|
145
|
+
if (trgState.framePos >= srcState.srcFramePos + ccBufsLen) {
|
|
146
|
+
// target frame position is ahead, seek to next source buffer
|
|
147
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs seek to next inddb buffer');
|
|
148
|
+
this._ccCache = null;
|
|
149
|
+
srcState.ci++;
|
|
150
|
+
srcState.ccPos = 0;
|
|
151
|
+
if (orgFrameLen === null) {
|
|
152
|
+
srcState.orgSrcFramePos += ccBufsLen;
|
|
153
|
+
}
|
|
154
|
+
else {
|
|
155
|
+
srcState.orgSrcFramePos += orgFrameLen;
|
|
156
|
+
}
|
|
157
|
+
srcState.srcFramePos += ccBufsLen;
|
|
158
|
+
}
|
|
159
|
+
else {
|
|
160
|
+
// Assuming target frame pos is inside current source buffer
|
|
161
|
+
srcState.ccPos = trgState.framePos - srcState.srcFramePos;
|
|
162
|
+
let ccAvail = ccBufsLen - srcState.ccPos;
|
|
163
|
+
let toCopy = ccBufsLen;
|
|
164
|
+
if (toCopy > ccAvail) {
|
|
165
|
+
toCopy = ccAvail;
|
|
166
|
+
}
|
|
167
|
+
if (toCopy > trgState.frameLen) {
|
|
168
|
+
toCopy = trgState.frameLen;
|
|
169
|
+
}
|
|
170
|
+
for (let ch = 0; ch < ccBufsChs; ch++) {
|
|
171
|
+
for (let si = 0; si < toCopy; si++) {
|
|
172
|
+
trgState.trgBufs[ch][trgState.filled + si] = ccBufs[ch][srcState.ccPos + si];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
trgState.filled += toCopy;
|
|
176
|
+
trgState.frameLen -= toCopy;
|
|
177
|
+
trgState.framePos += toCopy;
|
|
178
|
+
srcState.ccPos += toCopy;
|
|
179
|
+
if (srcState.ccPos >= ccBufsLen) {
|
|
180
|
+
// Invalidate cache
|
|
181
|
+
this._ccCache = null;
|
|
182
|
+
srcState.ci++;
|
|
183
|
+
this._currCi = srcState.ci;
|
|
184
|
+
srcState.ccPos = 0;
|
|
185
|
+
if (orgFrameLen === null) {
|
|
186
|
+
srcState.orgSrcFramePos += ccBufsLen;
|
|
187
|
+
}
|
|
188
|
+
else {
|
|
189
|
+
srcState.orgSrcFramePos += orgFrameLen;
|
|
190
|
+
}
|
|
191
|
+
srcState.srcFramePos += ccBufsLen;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
fillBufs(baseUrl, orgFrameLen, trgState, srcState, cb, cbEnd, cbErr) {
|
|
197
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs: framePos:'+framePos+', frameLen: '+frameLen+', filled: '+filled+', srcFramePos: '+srcFramePos+',ci: '+ci+', ccPos: '+ccPos);
|
|
198
|
+
if (this._ccCache) {
|
|
199
|
+
this._fillBufs(this._ccCache, orgFrameLen, trgState, srcState);
|
|
200
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs frameLen: '+frameLen);
|
|
201
|
+
if (trgState.frameLen === 0) {
|
|
202
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs (framelen==0) call: cbend '+filled);
|
|
203
|
+
cbEnd(trgState.filled);
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
this.fillBufs(baseUrl, orgFrameLen, trgState, srcState, cb, cbEnd, cbErr);
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
this.chunk(baseUrl, srcState.ci, (ccBufs, orgFrameLength) => {
|
|
211
|
+
if (ccBufs) {
|
|
212
|
+
this._currCi = srcState.ci;
|
|
213
|
+
this._ccCache = ccBufs;
|
|
214
|
+
this._fillBufs(ccBufs, orgFrameLength, trgState, srcState);
|
|
215
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs frameLen: '+frameLen);
|
|
216
|
+
if (trgState.frameLen === 0) {
|
|
217
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs (framelen==0) call: cbend '+filled);
|
|
218
|
+
cbEnd(trgState.filled);
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
this.fillBufs(baseUrl, orgFrameLen, trgState, srcState, cb, cbEnd, cbErr);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
else {
|
|
225
|
+
//console.debug('IndexedDbAudioBuffer::fillBufs (chunk not found) call: cbend '+filled);
|
|
226
|
+
cbEnd(trgState.filled);
|
|
227
|
+
}
|
|
228
|
+
}, (err) => {
|
|
229
|
+
cbErr(err);
|
|
230
|
+
});
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
framesObs(framePos, frameLen, bufs) {
|
|
234
|
+
return new Observable((subscriber) => {
|
|
235
|
+
// Positioning
|
|
236
|
+
let newCi = Math.floor(framePos / this._netAb.chunkFrameLen);
|
|
237
|
+
if (newCi !== this._currCi) {
|
|
238
|
+
this._currCi = newCi;
|
|
239
|
+
this._ccCache = null;
|
|
240
|
+
}
|
|
241
|
+
let srcFramePos = newCi * this._netAb.chunkFrameLen;
|
|
242
|
+
let trgState = { framePos: framePos, frameLen: frameLen, trgBufs: bufs, filled: 0 };
|
|
243
|
+
let srcState = { orgSrcFramePos: 0, srcFramePos: srcFramePos, ci: newCi, ccPos: 0, ccFilled: 0 };
|
|
244
|
+
this.fillBufs(this._netAb.baseUrl, this._netAb.orgFetchChunkFrameLen, trgState, srcState, (val) => { }, (filled) => {
|
|
245
|
+
subscriber.next(filled);
|
|
246
|
+
subscriber.complete();
|
|
247
|
+
}, err => {
|
|
248
|
+
subscriber.error(err);
|
|
249
|
+
});
|
|
250
|
+
});
|
|
251
|
+
}
|
|
252
|
+
close() {
|
|
253
|
+
this._currCi = 0;
|
|
254
|
+
this._ccCache = null;
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
export class NetAudioInputStream {
|
|
258
|
+
constructor(netAb) {
|
|
259
|
+
this.netAb = netAb;
|
|
260
|
+
this.framePos = 0;
|
|
261
|
+
this.netAbStr = new NetRandomAccessAudioStream(netAb);
|
|
262
|
+
}
|
|
263
|
+
close() {
|
|
264
|
+
this.netAbStr.close();
|
|
265
|
+
}
|
|
266
|
+
readObs(buffers) {
|
|
267
|
+
return new Observable(subscr => {
|
|
268
|
+
if (buffers && buffers.length > 0) {
|
|
269
|
+
let fl = buffers[0].length;
|
|
270
|
+
this.netAbStr.framesObs(this.framePos, fl, buffers).subscribe({
|
|
271
|
+
next: (read) => {
|
|
272
|
+
this.framePos += read;
|
|
273
|
+
subscr.next(read);
|
|
274
|
+
},
|
|
275
|
+
complete: () => {
|
|
276
|
+
subscr.complete();
|
|
277
|
+
},
|
|
278
|
+
error: (err) => {
|
|
279
|
+
subscr.error(err);
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
subscr.next(0);
|
|
285
|
+
subscr.complete();
|
|
286
|
+
}
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
skipFrames(n) {
|
|
290
|
+
this.framePos += n;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV0X2F1ZGlvX2J1ZmZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9uZXRfYXVkaW9fYnVmZmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBQyxVQUFVLEVBQUMsTUFBTSxNQUFNLENBQUM7QUFFaEMsT0FBTyxFQUFjLGdCQUFnQixFQUEwQixNQUFNLHFCQUFxQixDQUFDO0FBQzNGLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBSXZELE1BQU0sT0FBTyxjQUFlLFNBQVEsZ0JBQWdCO0lBRWxELElBQUkscUJBQXFCO1FBQ3ZCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO0lBQ3JDLENBQUM7SUFDRCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDO0lBQzlCLENBQUM7SUFDRCxJQUFJLE9BQU87UUFDVCxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7SUFDdkIsQ0FBQztJQUNELElBQUksYUFBYTtRQUNmLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQztJQUM3QixDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ3BCLENBQUM7SUFLRCxZQUNvQixlQUFxQyxFQUNyQyxRQUFlLEVBQ2YsYUFBcUIsRUFDckIsV0FBbUIsRUFDbkIsY0FBcUIsRUFDckIsU0FBZ0IsRUFDaEIsUUFBa0IsSUFBSSxFQUN0Qix5QkFBdUIsY0FBYztRQUN2RCxLQUFLLEVBQUUsQ0FBQztRQVJVLG9CQUFlLEdBQWYsZUFBZSxDQUFzQjtRQUNyQyxhQUFRLEdBQVIsUUFBUSxDQUFPO1FBQ2Ysa0JBQWEsR0FBYixhQUFhLENBQVE7UUFDckIsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsbUJBQWMsR0FBZCxjQUFjLENBQU87UUFDckIsY0FBUyxHQUFULFNBQVMsQ0FBTztRQUNoQixVQUFLLEdBQUwsS0FBSyxDQUFpQjtRQUN0QiwyQkFBc0IsR0FBdEIsc0JBQXNCLENBQWU7UUFYakQsZ0JBQVcsR0FBQyxDQUFDLENBQUM7UUFDZCxZQUFPLEdBQUMsS0FBSyxDQUFDO0lBYXRCLENBQUM7SUFFRCxJQUFJLFlBQVk7UUFDZCxPQUFPLElBQUksQ0FBQyxhQUFhLENBQUM7SUFDNUIsQ0FBQztJQUVELE1BQU07UUFDSixPQUFPLElBQUksQ0FBQyxPQUFPLENBQUM7SUFDdEIsQ0FBQztJQUVELElBQUk7UUFDRixJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQztJQUNwQixDQUFDO0lBRUQsSUFBSSxVQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDeEIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBRUQsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLFVBQVUsQ0FBTyxDQUFDLFVBQVUsRUFBQyxFQUFFO1lBQ3RDLG9CQUFvQjtZQUNwQixVQUFVLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDbEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQzFCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELFFBQVE7UUFDTixPQUFPLHFDQUFxQyxHQUFDLElBQUksQ0FBQyxZQUFZLEdBQUMsaUJBQWlCLEdBQUMsSUFBSSxDQUFDLFVBQVUsR0FBQyx3QkFBd0IsR0FBQyxJQUFJLENBQUMsY0FBYyxHQUFDLHNCQUFzQixHQUFDLElBQUksQ0FBQyxVQUFVLEdBQUMsa0JBQWtCLEdBQUMsSUFBSSxDQUFDLFFBQVEsR0FBQyxZQUFZLEdBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQ25QLENBQUM7SUFFQyxNQUFNLENBQUMsb0JBQW9CLENBQUMsaUJBQXVDLEVBQUMsT0FBYyxFQUFDLEVBQWUsRUFBQyxRQUFlLEVBQUMsd0JBQTZCLEVBQUUsQ0FBQyxNQUFNO1FBQ3ZKLElBQUksR0FBRyxHQUFDLElBQUksY0FBYyxDQUFDLGlCQUFpQixFQUFDLE9BQU8sRUFBQyxFQUFFLENBQUMsZ0JBQWdCLEVBQUMsRUFBRSxDQUFDLFVBQVUsRUFBQyxFQUFFLENBQUMsTUFBTSxFQUFDLFFBQVEsRUFBQyxJQUFJLEVBQUMscUJBQXFCLENBQUMsQ0FBQztRQUN0SSxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDWixPQUFPLEdBQUcsQ0FBQztJQUNmLENBQUM7SUFFRCxxQkFBcUI7UUFDbkIsT0FBTyxJQUFJLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDVixPQUFPLElBQUksQ0FBQyxTQUFTLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBSSxnQkFBZ0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDO0lBQzVCLENBQUM7SUFFRCxZQUFZO1FBQ1YsT0FBTyxJQUFJLENBQUMsYUFBYSxHQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDM0MsQ0FBQztJQUVELHVCQUF1QjtRQUNyQixPQUFPLElBQUksMEJBQTBCLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDOUMsQ0FBQztDQUNGO0FBRUQsOEJBQThCO0FBQzlCLEVBQUU7QUFDRixrQ0FBa0M7QUFDbEMsa0NBQWtDO0FBQ2xDLE1BQU07QUFDTixFQUFFO0FBQ0YsZ0NBQWdDO0FBQ2hDLGdDQUFnQztBQUNoQyxNQUFNO0FBQ04sb0hBQW9IO0FBQ3BILE1BQU07QUFDTixJQUFJO0FBRUosTUFBTSxPQUFPLDBCQUEwQjtJQUtyQyxZQUFvQixNQUFxQjtRQUFyQixXQUFNLEdBQU4sTUFBTSxDQUFlO1FBSGpDLFlBQU8sR0FBQyxDQUFDLENBQUM7UUFDVixhQUFRLEdBQXFCLElBQUksQ0FBQztJQUVFLENBQUM7SUFFckMsS0FBSyxDQUFDLE9BQWMsRUFBQyxFQUFTLEVBQUMsRUFBbUUsRUFBQyxLQUF1QjtRQUVoSSxJQUFJLFVBQVUsR0FBQyxFQUFFLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztRQUVwRCxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUMsVUFBVSxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQyxTQUFTLENBQzFHO1lBRUUsSUFBSSxFQUFFLENBQUMsSUFBSSxFQUFDLEVBQUU7Z0JBQ1osSUFBRyxJQUFJLEVBQUM7b0JBQ04sTUFBTSxFQUFFLEdBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDO29CQUNqQyxNQUFNLEtBQUssR0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUM7b0JBQ2hDLElBQUksTUFBTSxHQUFDLElBQUksS0FBSyxFQUFnQixDQUFDO29CQUNyQyxLQUFJLElBQUksRUFBRSxHQUFDLENBQUMsRUFBQyxFQUFFLEdBQUMsS0FBSyxFQUFDLEVBQUUsRUFBRSxFQUFDO3dCQUN6QixNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxjQUFjLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztxQkFDcEM7b0JBQ0QsRUFBRSxDQUFDLE1BQU0sRUFBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUM7aUJBQ2hDO3FCQUFJO29CQUNILEVBQUUsQ0FBQyxJQUFJLEVBQUMsSUFBSSxDQUFDLENBQUM7aUJBQ2Y7WUFDSCxDQUFDO1lBQ0QsUUFBUSxFQUFFLEdBQUUsRUFBRSxHQUFDLENBQUM7WUFDaEIsS0FBSyxFQUFDLENBQUMsS0FBSyxFQUFDLEVBQUU7Z0JBQ2IsZ0RBQWdEO2dCQUNoRCxJQUFHLEtBQUssWUFBWSxpQkFBaUIsRUFBQztvQkFDckMsSUFBRyxLQUFLLENBQUMsTUFBTSxLQUFHLEdBQUcsRUFBQzt3QkFDcEIsRUFBRSxDQUFDLElBQUksRUFBQyxJQUFJLENBQUMsQ0FBQztxQkFDZjt5QkFBSzt3QkFDSixPQUFPLENBQUMsS0FBSyxDQUFDLHlEQUF5RCxHQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUMsSUFBSSxHQUFDLEtBQUssQ0FBQyxJQUFJLEdBQUMsSUFBSSxHQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQzt3QkFDekgsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3BDO2lCQUNEO3FCQUFLO29CQUNKLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0RBQW9ELEdBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUNsRixLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDcEM7WUFDSCxDQUFDO1NBQ0YsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLFNBQVMsQ0FBQyxNQUFxQixFQUFDLFdBQXVCLEVBQUMsUUFBK0UsRUFBQyxRQUEwRTtRQUN4TixJQUFJLFNBQVMsR0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDO1FBQzVCLElBQUcsU0FBUyxHQUFDLENBQUMsRUFBRTtZQUNkLElBQUksTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN2QixJQUFJLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDO1lBRTlCLDhIQUE4SDtZQUM5SCxJQUFJLFFBQVEsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFdBQVcsR0FBRyxTQUFTLEVBQUU7Z0JBQ3pELDZEQUE2RDtnQkFDN0QsNEVBQTRFO2dCQUM1RSxJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQztnQkFDbkIsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO2dCQUNkLFFBQVEsQ0FBQyxLQUFLLEdBQUMsQ0FBQyxDQUFDO2dCQUNqQixJQUFHLFdBQVcsS0FBRyxJQUFJLEVBQUM7b0JBQ3BCLFFBQVEsQ0FBQyxjQUFjLElBQUUsU0FBUyxDQUFDO2lCQUNwQztxQkFBSTtvQkFDSCxRQUFRLENBQUMsY0FBYyxJQUFFLFdBQVcsQ0FBQztpQkFDdEM7Z0JBQ0QsUUFBUSxDQUFDLFdBQVcsSUFBRSxTQUFTLENBQUM7YUFDakM7aUJBQU07Z0JBQ0wsNERBQTREO2dCQUM1RCxRQUFRLENBQUMsS0FBSyxHQUFDLFFBQVEsQ0FBQyxRQUFRLEdBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQztnQkFDdEQsSUFBSSxPQUFPLEdBQUcsU0FBUyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7Z0JBQ3pDLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQztnQkFFdkIsSUFBSSxNQUFNLEdBQUcsT0FBTyxFQUFFO29CQUNwQixNQUFNLEdBQUcsT0FBTyxDQUFDO2lCQUNsQjtnQkFDRCxJQUFJLE1BQU0sR0FBRyxRQUFRLENBQUMsUUFBUSxFQUFFO29CQUM5QixNQUFNLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztpQkFDNUI7Z0JBQ0QsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLFNBQVMsRUFBRSxFQUFFLEVBQUUsRUFBRTtvQkFDckMsS0FBSyxJQUFJLEVBQUUsR0FBRyxDQUFDLEVBQUUsRUFBRSxHQUFHLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRTt3QkFDbEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUMxRTtpQkFDRjtnQkFDRCxRQUFRLENBQUMsTUFBTSxJQUFJLE1BQU0sQ0FBQztnQkFDMUIsUUFBUSxDQUFDLFFBQVEsSUFBSSxNQUFNLENBQUM7Z0JBQzVCLFFBQVEsQ0FBQyxRQUFRLElBQUksTUFBTSxDQUFDO2dCQUM1QixRQUFRLENBQUMsS0FBSyxJQUFJLE1BQU0sQ0FBQztnQkFDekIsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLFNBQVMsRUFBRTtvQkFDL0IsbUJBQW1CO29CQUNuQixJQUFJLENBQUMsUUFBUSxHQUFDLElBQUksQ0FBQztvQkFDbkIsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO29CQUNkLElBQUksQ0FBQyxPQUFPLEdBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztvQkFDekIsUUFBUSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7b0JBQ25CLElBQUcsV0FBVyxLQUFHLElBQUksRUFBQzt3QkFDcEIsUUFBUSxDQUFDLGNBQWMsSUFBRSxTQUFTLENBQUM7cUJBQ3BDO3lCQUFJO3dCQUNILFFBQVEsQ0FBQyxjQUFjLElBQUUsV0FBVyxDQUFDO3FCQUN0QztvQkFDRCxRQUFRLENBQUMsV0FBVyxJQUFFLFNBQVMsQ0FBQztpQkFDakM7YUFDRjtTQUNGO0lBRUgsQ0FBQztJQUVPLFFBQVEsQ0FBQyxPQUFjLEVBQUMsV0FBdUIsRUFBQyxRQUErRSxFQUFDLFFBQTBGLEVBQUMsRUFBd0IsRUFBQyxLQUEyQixFQUFDLEtBQXVCO1FBQzdTLDZLQUE2SztRQUM3SyxJQUFHLElBQUksQ0FBQyxRQUFRLEVBQUM7WUFDZixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLEVBQUMsV0FBVyxFQUFDLFFBQVEsRUFBQyxRQUFRLENBQUMsQ0FBQztZQUM1RCxzRUFBc0U7WUFDdEUsSUFBRyxRQUFRLENBQUMsUUFBUSxLQUFHLENBQUMsRUFBQztnQkFDdkIsb0ZBQW9GO2dCQUNwRixLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDO2FBQ3hCO2lCQUFLO2dCQUNKLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDMUU7U0FDRjthQUFLO1lBQ0osSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBQyxjQUFjLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxNQUFNLEVBQUU7b0JBQ1YsSUFBSSxDQUFDLE9BQU8sR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO29CQUMzQixJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQztvQkFFdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsY0FBYyxFQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsQ0FBQztvQkFDMUQsc0VBQXNFO29CQUN0RSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO3dCQUMzQixvRkFBb0Y7d0JBQ3BGLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7cUJBQ3hCO3lCQUFNO3dCQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFDLFdBQVcsRUFBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7cUJBQ3pFO2lCQUNGO3FCQUFNO29CQUNMLHdGQUF3RjtvQkFDeEYsS0FBSyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztpQkFDeEI7WUFDSCxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsRUFBRTtnQkFDVCxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDYixDQUFDLENBQUMsQ0FBQztTQUNKO0lBQ0gsQ0FBQztJQUdELFNBQVMsQ0FBQyxRQUFlLEVBQUMsUUFBZSxFQUFDLElBQW1CO1FBRTNELE9BQU8sSUFBSSxVQUFVLENBQVMsQ0FBQyxVQUFVLEVBQUMsRUFBRTtZQUMxQyxjQUFjO1lBQ2QsSUFBSSxLQUFLLEdBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUN6RCxJQUFHLEtBQUssS0FBRyxJQUFJLENBQUMsT0FBTyxFQUFDO2dCQUN0QixJQUFJLENBQUMsT0FBTyxHQUFDLEtBQUssQ0FBQztnQkFDbkIsSUFBSSxDQUFDLFFBQVEsR0FBQyxJQUFJLENBQUM7YUFDcEI7WUFDRCxJQUFJLFdBQVcsR0FBQyxLQUFLLEdBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUM7WUFDaEQsSUFBSSxRQUFRLEdBQUMsRUFBQyxRQUFRLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxRQUFRLEVBQUMsT0FBTyxFQUFDLElBQUksRUFBQyxNQUFNLEVBQUMsQ0FBQyxFQUFDLENBQUM7WUFDekUsSUFBSSxRQUFRLEdBQUMsRUFBQyxjQUFjLEVBQUMsQ0FBQyxFQUFDLFdBQVcsRUFBQyxXQUFXLEVBQUMsRUFBRSxFQUFDLEtBQUssRUFBQyxLQUFLLEVBQUMsQ0FBQyxFQUFDLFFBQVEsRUFBQyxDQUFDLEVBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFDLElBQUksQ0FBQyxNQUFNLENBQUMscUJBQXFCLEVBQUMsUUFBUSxFQUFDLFFBQVEsRUFBQyxDQUFDLEdBQUcsRUFBQyxFQUFFLEdBQUMsQ0FBQyxFQUFDLENBQUMsTUFBYSxFQUFDLEVBQUU7Z0JBQy9HLFVBQVUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7Z0JBQ3hCLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixDQUFDLEVBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ04sVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4QixDQUFDLENBQUMsQ0FBQTtRQUNKLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELEtBQUs7UUFDSCxJQUFJLENBQUMsT0FBTyxHQUFDLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxRQUFRLEdBQUMsSUFBSSxDQUFDO0lBQ3JCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxtQkFBbUI7SUFJOUIsWUFBb0IsS0FBb0I7UUFBcEIsVUFBSyxHQUFMLEtBQUssQ0FBZTtRQUZoQyxhQUFRLEdBQVEsQ0FBQyxDQUFDO1FBR3RCLElBQUksQ0FBQyxRQUFRLEdBQUMsSUFBSSwwQkFBMEIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQsS0FBSztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELE9BQU8sQ0FBQyxPQUE0QjtRQUNsQyxPQUFPLElBQUksVUFBVSxDQUFTLE1BQU0sQ0FBQSxFQUFFO1lBQ3BDLElBQUksT0FBTyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxJQUFJLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDO2dCQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQyxTQUFTLENBQUM7b0JBQzVELElBQUksRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNiLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDO3dCQUN0QixNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNwQixDQUFDO29CQUNELFFBQVEsRUFBRSxHQUFHLEVBQUU7d0JBQ2IsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUNwQixDQUFDO29CQUNELEtBQUssRUFBRSxDQUFDLEdBQUcsRUFBRSxFQUFFO3dCQUNiLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3BCLENBQUM7aUJBQ0YsQ0FBQyxDQUFBO2FBQ0g7aUJBQUk7Z0JBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDZixNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7YUFDbkI7UUFDSCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUztRQUNsQixJQUFJLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQztJQUNuQixDQUFDO0NBR0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge09ic2VydmFibGV9IGZyb20gXCJyeGpzXCI7XHJcbmltcG9ydCB7QXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSwgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtBdWRpb1NvdXJjZSwgQmFzaWNBdWRpb1NvdXJjZSwgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW19IGZyb20gXCIuL2F1ZGlvX2RhdGFfaG9sZGVyXCI7XHJcbmltcG9ydCB7SHR0cEVycm9yUmVzcG9uc2V9IGZyb20gXCJAYW5ndWxhci9jb21tb24vaHR0cFwiO1xyXG5pbXBvcnQge0Jhc2ljUmVjb3JkaW5nU2VydmljZX0gZnJvbSBcIi4uL3NwZWVjaHJlY29yZGVyL3JlY29yZGluZ3MvYmFzaWNfcmVjb3JkaW5nLnNlcnZpY2VcIjtcclxuXHJcblxyXG5leHBvcnQgY2xhc3MgTmV0QXVkaW9CdWZmZXIgZXh0ZW5kcyBCYXNpY0F1ZGlvU291cmNlIGltcGxlbWVudHMgQXVkaW9Tb3VyY2V7XHJcblxyXG4gIGdldCBvcmdGZXRjaENodW5rRnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9vcmdGZXRjaENodW5rRnJhbWVMZW47XHJcbiAgfVxyXG4gIGdldCByZWNGaWxlU2VydmljZSgpOiBCYXNpY1JlY29yZGluZ1NlcnZpY2Uge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JlY0ZpbGVTZXJ2aWNlO1xyXG4gIH1cclxuICBnZXQgYmFzZVVybCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2Jhc2VVcmw7XHJcbiAgfVxyXG4gIGdldCBjaHVua0ZyYW1lTGVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2h1bmtGcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIGdldCB1dWlkKCk6IHN0cmluZ3xudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl91dWlkO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfY2h1bmtDb3VudD0wO1xyXG4gIHByaXZhdGUgX3NlYWxlZD1mYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfcmVjRmlsZVNlcnZpY2U6QmFzaWNSZWNvcmRpbmdTZXJ2aWNlLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2Jhc2VVcmw6c3RyaW5nLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX2NoYW5uZWxDb3VudDogbnVtYmVyLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX3NhbXBsZVJhdGU6IG51bWJlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIF9jaHVua0ZyYW1lTGVuOm51bWJlcixcclxuICAgICAgICAgICAgICBwcml2YXRlIF9mcmFtZUxlbjpudW1iZXIsXHJcbiAgICAgICAgICAgICAgcHJpdmF0ZSBfdXVpZDpzdHJpbmd8bnVsbD1udWxsLFxyXG4gICAgICAgICAgICAgIHByaXZhdGUgX29yZ0ZldGNoQ2h1bmtGcmFtZUxlbj1fY2h1bmtGcmFtZUxlbikge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgfVxyXG5cclxuICBnZXQgY2hhbm5lbENvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvdW50O1xyXG4gIH1cclxuXHJcbiAgc2VhbGVkKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlYWxlZDtcclxuICB9XHJcblxyXG4gIHNlYWwoKTp2b2lke1xyXG4gICAgdGhpcy5fc2VhbGVkPXRydWU7XHJcbiAgfVxyXG5cclxuICBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX3NhbXBsZVJhdGU7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIGdldCBjaHVua0NvdW50KCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2h1bmtDb3VudDtcclxuICB9XHJcblxyXG4gIHJlbGVhc2VBdWRpb0RhdGEoKTpPYnNlcnZhYmxlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KChzdWJzY3JpYmVyKT0+e1xyXG4gICAgICAgIC8vIG5vdGhpbmcgdG8gcmVtb3ZlXHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpOnN0cmluZ3tcclxuICAgIHJldHVybiBcIkluZGV4ZWQgZGIgYXVkaW8gYnVmZmVyLiBDaGFubmVsczogXCIrdGhpcy5jaGFubmVsQ291bnQrXCIsIHNhbXBsZSByYXRlOiBcIit0aGlzLnNhbXBsZVJhdGUrXCIsIGNodW5rIGZyYW1lIGxlbmd0aDogXCIrdGhpcy5fY2h1bmtGcmFtZUxlbitcIiwgbnVtYmVyIG9mIGNodW5rczogXCIrdGhpcy5jaHVua0NvdW50K1wiLCBmcmFtZSBsZW5ndGg6IFwiK3RoaXMuZnJhbWVMZW4rXCIsIHNlYWxlZDogXCIrdGhpcy5zZWFsZWQoKTtcclxuICB9XHJcblxyXG4gICAgc3RhdGljIGZyb21DaHVua0F1ZGlvQnVmZmVyKHJlY29yZGluZ3NTZXJ2aWNlOkJhc2ljUmVjb3JkaW5nU2VydmljZSxiYXNlVXJsOnN0cmluZyxhYjogQXVkaW9CdWZmZXIsZnJhbWVMZW46bnVtYmVyLG9yZ0ZldGNoQ2h1bmtGcmFtZUxlbjpudW1iZXI9YWIubGVuZ3RoKTpOZXRBdWRpb0J1ZmZlciB7XHJcbiAgICAgIGxldCBuYWI9bmV3IE5ldEF1ZGlvQnVmZmVyKHJlY29yZGluZ3NTZXJ2aWNlLGJhc2VVcmwsYWIubnVtYmVyT2ZDaGFubmVscyxhYi5zYW1wbGVSYXRlLGFiLmxlbmd0aCxmcmFtZUxlbixudWxsLG9yZ0ZldGNoQ2h1bmtGcmFtZUxlbik7XHJcbiAgICAgIG5hYi5yZWFkeSgpO1xyXG4gICAgICByZXR1cm4gbmFiO1xyXG4gIH1cclxuXHJcbiAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgIHJldHVybiBuZXcgTmV0QXVkaW9JbnB1dFN0cmVhbSh0aGlzKTtcclxuICB9XHJcblxyXG4gIGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJhbWVMZW4vdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcblxyXG4gIGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvdW50O1xyXG4gIH1cclxuXHJcbiAgc2FtcGxlQ291bnRzKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2hhbm5lbENvdW50KnRoaXMuX2ZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTogUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0ge1xyXG4gICAgcmV0dXJuIG5ldyBOZXRSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSh0aGlzKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIGV4cG9ydCBjbGFzcyBOZXRBdWRpb0NodW5re1xyXG4vL1xyXG4vLyAgIGdldCBvcmdTYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbi8vICAgICByZXR1cm4gdGhpcy5fb3JnU2FtcGxlUmF0ZTtcclxuLy8gICB9XHJcbi8vXHJcbi8vICAgZ2V0IG9yZ0ZyYW1lTGVuKCk6IG51bWJlciB7XHJcbi8vICAgICByZXR1cm4gdGhpcy5fb3JnRnJhbWVMZW47XHJcbi8vICAgfVxyXG4vLyAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX2RlY29kZWRCdWZmZXJzOkZsb2F0MzJBcnJheVtdLHByaXZhdGUgX29yZ1NhbXBsZVJhdGU6bnVtYmVyLHByaXZhdGUgX29yZ0ZyYW1lTGVuOm51bWJlcikge1xyXG4vLyAgIH1cclxuLy8gfVxyXG5cclxuZXhwb3J0IGNsYXNzIE5ldFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtIGltcGxlbWVudHMgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcblxyXG4gIHByaXZhdGUgX2N1cnJDaT0wO1xyXG4gIHByaXZhdGUgX2NjQ2FjaGU6RmxvYXQzMkFycmF5W118bnVsbD1udWxsO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9uZXRBYjpOZXRBdWRpb0J1ZmZlcikge31cclxuXHJcbiAgcHJpdmF0ZSBjaHVuayhiYXNlVXJsOnN0cmluZyxjaTpudW1iZXIsY2I6KGJ1ZnM6QXJyYXk8RmxvYXQzMkFycmF5PnxudWxsLG9yZ0ZyYW1lTGVuZ3RoOm51bWJlcnxudWxsKT0+dm9pZCxlcnJDYjooZXJyOkVycm9yKT0+dm9pZCl7XHJcblxyXG4gICAgbGV0IHN0YXJ0RnJhbWU9Y2kqdGhpcy5fbmV0QWIub3JnRmV0Y2hDaHVua0ZyYW1lTGVuO1xyXG5cclxuICAgIHRoaXMuX25ldEFiLnJlY0ZpbGVTZXJ2aWNlLmNodW5rQXVkaW9SZXF1ZXN0KGJhc2VVcmwsc3RhcnRGcmFtZSx0aGlzLl9uZXRBYi5vcmdGZXRjaENodW5rRnJhbWVMZW4pLnN1YnNjcmliZShcclxuICAgICAge1xyXG5cclxuICAgICAgICBuZXh0OiAoY2hEbCk9PntcclxuICAgICAgICAgIGlmKGNoRGwpe1xyXG4gICAgICAgICAgICBjb25zdCBhYj1jaERsLmRlY29kZWRBdWRpb0J1ZmZlcjtcclxuICAgICAgICAgICAgY29uc3QgY2NDaHM9YWIubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgICAgICAgbGV0IGFyckJ1Zj1uZXcgQXJyYXk8RmxvYXQzMkFycmF5PigpO1xyXG4gICAgICAgICAgICBmb3IobGV0IGNoPTA7Y2g8Y2NDaHM7Y2grKyl7XHJcbiAgICAgICAgICAgICAgYXJyQnVmLnB1c2goYWIuZ2V0Q2hhbm5lbERhdGEoY2gpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjYihhcnJCdWYsY2hEbC5vcmdGcmFtZUxlbmd0aCk7XHJcbiAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgY2IobnVsbCxudWxsKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXBsZXRlOiAoKT0+e30sXHJcbiAgICAgICAgZXJyb3I6KGVyckV2KT0+e1xyXG4gICAgICAgICAgLy9OZXRSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbS5fcnVubmluZ1JlcXVlc3RzLS07XHJcbiAgICAgICAgICBpZihlcnJFdiBpbnN0YW5jZW9mIEh0dHBFcnJvclJlc3BvbnNlKXtcclxuICAgICAgICAgICBpZihlcnJFdi5zdGF0dXM9PT00MDQpe1xyXG4gICAgICAgICAgICAgY2IobnVsbCxudWxsKTtcclxuICAgICAgICAgICB9IGVsc2V7XHJcbiAgICAgICAgICAgICBjb25zb2xlLmVycm9yKFwiTmV0IGF1ZGlvIGJ1ZmZlciBjaHVuayBhdWRpbyByZXF1ZXN0IEh0dHAgZXJyb3IgZXZlbnQ6IFwiK2VyckV2LnN0YXR1cytcIiwgXCIrZXJyRXYubmFtZStcIiwgXCIrZXJyRXYubWVzc2FnZSk7XHJcbiAgICAgICAgICAgICBlcnJDYihuZXcgRXJyb3IoZXJyRXYudG9TdHJpbmcoKSkpO1xyXG4gICAgICAgICAgIH1cclxuICAgICAgICAgIH1lbHNlIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihcIk5ldCBhdWRpbyBidWZmZXIgY2h1bmsgYXVkaW8gcmVxdWVzdCBlcnJvciBldmVudDogXCIrZXJyRXYubWVzc2FnZSk7XHJcbiAgICAgICAgICAgIGVyckNiKG5ldyBFcnJvcihlcnJFdi50b1N0cmluZygpKSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBfZmlsbEJ1ZnMoY2NCdWZzOkZsb2F0MzJBcnJheVtdLG9yZ0ZyYW1lTGVuOm51bWJlcnxudWxsLHRyZ1N0YXRlOntmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLHRyZ0J1ZnM6RmxvYXQzMkFycmF5W10sZmlsbGVkOm51bWJlcn0sc3JjU3RhdGU6e29yZ1NyY0ZyYW1lUG9zOm51bWJlcixzcmNGcmFtZVBvczpudW1iZXIsY2k6bnVtYmVyLGNjUG9zOm51bWJlcn0pe1xyXG4gICAgbGV0IGNjQnVmc0Nocz1jY0J1ZnMubGVuZ3RoO1xyXG4gICAgaWYoY2NCdWZzQ2hzPjApIHtcclxuICAgICAgbGV0IGNjQnVmMCA9IGNjQnVmc1swXTtcclxuICAgICAgbGV0IGNjQnVmc0xlbiA9IGNjQnVmMC5sZW5ndGg7XHJcblxyXG4gICAgICAvL2NvbnNvbGUuZGVidWcoJ0luZGV4ZWREYkF1ZGlvQnVmZmVyOjpmaWxsQnVmcyBmcmFtZVBvczogJytmcmFtZVBvcysnLCBzcmNGcmFtZVBvczogJytzcmNGcmFtZVBvcysnLCBjY0J1ZnNMZW46ICcrY2NCdWZzTGVuKTtcclxuICAgICAgaWYgKHRyZ1N0YXRlLmZyYW1lUG9zID49IHNyY1N0YXRlLnNyY0ZyYW1lUG9zICsgY2NCdWZzTGVuKSB7XHJcbiAgICAgICAgLy8gdGFyZ2V0IGZyYW1lIHBvc2l0aW9uIGlzIGFoZWFkLCBzZWVrIHRvIG5leHQgc291cmNlIGJ1ZmZlclxyXG4gICAgICAgIC8vY29uc29sZS5kZWJ1ZygnSW5kZXhlZERiQXVkaW9CdWZmZXI6OmZpbGxCdWZzIHNlZWsgdG8gbmV4dCBpbmRkYiBidWZmZXInKTtcclxuICAgICAgICB0aGlzLl9jY0NhY2hlPW51bGw7XHJcbiAgICAgICAgc3JjU3RhdGUuY2krKztcclxuICAgICAgICBzcmNTdGF0ZS5jY1Bvcz0wO1xyXG4gICAgICAgIGlmKG9yZ0ZyYW1lTGVuPT09bnVsbCl7XHJcbiAgICAgICAgICBzcmNTdGF0ZS5vcmdTcmNGcmFtZVBvcys9Y2NCdWZzTGVuO1xyXG4gICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgc3JjU3RhdGUub3JnU3JjRnJhbWVQb3MrPW9yZ0ZyYW1lTGVuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBzcmNTdGF0ZS5zcmNGcmFtZVBvcys9Y2NCdWZzTGVuO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIC8vIEFzc3VtaW5nIHRhcmdldCBmcmFtZSBwb3MgaXMgaW5zaWRlIGN1cnJlbnQgc291cmNlIGJ1ZmZlclxyXG4gICAgICAgIHNyY1N0YXRlLmNjUG9zPXRyZ1N0YXRlLmZyYW1lUG9zLXNyY1N0YXRlLnNyY0ZyYW1lUG9zO1xyXG4gICAgICAgIGxldCBjY0F2YWlsID0gY2NCdWZzTGVuIC0gc3JjU3RhdGUuY2NQb3M7XHJcbiAgICAgICAgbGV0IHRvQ29weSA9IGNjQnVmc0xlbjtcclxuXHJcbiAgICAgICAgaWYgKHRvQ29weSA+IGNjQXZhaWwpIHtcclxuICAgICAgICAgIHRvQ29weSA9IGNjQXZhaWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0b0NvcHkgPiB0cmdTdGF0ZS5mcmFtZUxlbikge1xyXG4gICAgICAgICAgdG9Db3B5ID0gdHJnU3RhdGUuZnJhbWVMZW47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAobGV0IGNoID0gMDsgY2ggPCBjY0J1ZnNDaHM7IGNoKyspIHtcclxuICAgICAgICAgIGZvciAobGV0IHNpID0gMDsgc2kgPCB0b0NvcHk7IHNpKyspIHtcclxuICAgICAgICAgICAgdHJnU3RhdGUudHJnQnVmc1tjaF1bdHJnU3RhdGUuZmlsbGVkK3NpXSA9IGNjQnVmc1tjaF1bc3JjU3RhdGUuY2NQb3Mrc2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0cmdTdGF0ZS5maWxsZWQgKz0gdG9Db3B5O1xyXG4gICAgICAgIHRyZ1N0YXRlLmZyYW1lTGVuIC09IHRvQ29weTtcclxuICAgICAgICB0cmdTdGF0ZS5mcmFtZVBvcyArPSB0b0NvcHk7XHJcbiAgICAgICAgc3JjU3RhdGUuY2NQb3MgKz0gdG9Db3B5O1xyXG4gICAgICAgIGlmIChzcmNTdGF0ZS5jY1BvcyA+PSBjY0J1ZnNMZW4pIHtcclxuICAgICAgICAgIC8vIEludmFsaWRhdGUgY2FjaGVcclxuICAgICAgICAgIHRoaXMuX2NjQ2FjaGU9bnVsbDtcclxuICAgICAgICAgIHNyY1N0YXRlLmNpKys7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyQ2k9c3JjU3RhdGUuY2k7XHJcbiAgICAgICAgICBzcmNTdGF0ZS5jY1BvcyA9IDA7XHJcbiAgICAgICAgICBpZihvcmdGcmFtZUxlbj09PW51bGwpe1xyXG4gICAgICAgICAgICBzcmNTdGF0ZS5vcmdTcmNGcmFtZVBvcys9Y2NCdWZzTGVuO1xyXG4gICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgIHNyY1N0YXRlLm9yZ1NyY0ZyYW1lUG9zKz1vcmdGcmFtZUxlbjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIHNyY1N0YXRlLnNyY0ZyYW1lUG9zKz1jY0J1ZnNMZW47XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBmaWxsQnVmcyhiYXNlVXJsOnN0cmluZyxvcmdGcmFtZUxlbjpudW1iZXJ8bnVsbCx0cmdTdGF0ZTp7ZnJhbWVQb3M6bnVtYmVyLGZyYW1lTGVuOm51bWJlcix0cmdCdWZzOkZsb2F0MzJBcnJheVtdLGZpbGxlZDpudW1iZXJ9LHNyY1N0YXRlOntvcmdTcmNGcmFtZVBvczpudW1iZXIsc3JjRnJhbWVQb3M6bnVtYmVyLGNpOm51bWJlcixjY1BvczpudW1iZXIsY2NGaWxsZWQ6bnVtYmVyfSxjYjooZmlsbGVkOm51bWJlcik9PnZvaWQsY2JFbmQ6KGZpbGxlZDpudW1iZXIpPT52b2lkLGNiRXJyOihlcnI6RXJyb3IpPT52b2lkKXtcclxuICAgIC8vY29uc29sZS5kZWJ1ZygnSW5kZXhlZERiQXVkaW9CdWZmZXI6OmZpbGxCdWZzOiBmcmFtZVBvczonK2ZyYW1lUG9zKycsIGZyYW1lTGVuOiAnK2ZyYW1lTGVuKycsIGZpbGxlZDogJytmaWxsZWQrJywgc3JjRnJhbWVQb3M6ICcrc3JjRnJhbWVQb3MrJyxjaTogJytjaSsnLCBjY1BvczogJytjY1Bvcyk7XHJcbiAgICBpZih0aGlzLl9jY0NhY2hlKXtcclxuICAgICAgdGhpcy5fZmlsbEJ1ZnModGhpcy5fY2NDYWNoZSxvcmdGcmFtZUxlbix0cmdTdGF0ZSxzcmNTdGF0ZSk7XHJcbiAgICAgIC8vY29uc29sZS5kZWJ1ZygnSW5kZXhlZERiQXVkaW9CdWZmZXI6OmZpbGxCdWZzIGZyYW1lTGVuOiAnK2ZyYW1lTGVuKTtcclxuICAgICAgaWYodHJnU3RhdGUuZnJhbWVMZW49PT0wKXtcclxuICAgICAgICAvL2NvbnNvbGUuZGVidWcoJ0luZGV4ZWREYkF1ZGlvQnVmZmVyOjpmaWxsQnVmcyAoZnJhbWVsZW49PTApIGNhbGw6IGNiZW5kICcrZmlsbGVkKTtcclxuICAgICAgICBjYkVuZCh0cmdTdGF0ZS5maWxsZWQpO1xyXG4gICAgICB9ZWxzZSB7XHJcbiAgICAgICAgdGhpcy5maWxsQnVmcyhiYXNlVXJsLCBvcmdGcmFtZUxlbix0cmdTdGF0ZSwgc3JjU3RhdGUsIGNiLCBjYkVuZCwgY2JFcnIpO1xyXG4gICAgICB9XHJcbiAgICB9ZWxzZSB7XHJcbiAgICAgIHRoaXMuY2h1bmsoYmFzZVVybCwgc3JjU3RhdGUuY2ksIChjY0J1ZnMsb3JnRnJhbWVMZW5ndGgpID0+IHtcclxuICAgICAgICBpZiAoY2NCdWZzKSB7XHJcbiAgICAgICAgICB0aGlzLl9jdXJyQ2kgPSBzcmNTdGF0ZS5jaTtcclxuICAgICAgICAgIHRoaXMuX2NjQ2FjaGUgPSBjY0J1ZnM7XHJcblxyXG4gICAgICAgICAgdGhpcy5fZmlsbEJ1ZnMoY2NCdWZzLCBvcmdGcmFtZUxlbmd0aCx0cmdTdGF0ZSwgc3JjU3RhdGUpO1xyXG4gICAgICAgICAgLy9jb25zb2xlLmRlYnVnKCdJbmRleGVkRGJBdWRpb0J1ZmZlcjo6ZmlsbEJ1ZnMgZnJhbWVMZW46ICcrZnJhbWVMZW4pO1xyXG4gICAgICAgICAgaWYgKHRyZ1N0YXRlLmZyYW1lTGVuID09PSAwKSB7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnSW5kZXhlZERiQXVkaW9CdWZmZXI6OmZpbGxCdWZzIChmcmFtZWxlbj09MCkgY2FsbDogY2JlbmQgJytmaWxsZWQpO1xyXG4gICAgICAgICAgICBjYkVuZCh0cmdTdGF0ZS5maWxsZWQpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5maWxsQnVmcyhiYXNlVXJsLG9yZ0ZyYW1lTGVuLHRyZ1N0YXRlLCBzcmNTdGF0ZSwgY2IsIGNiRW5kLCBjYkVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vY29uc29sZS5kZWJ1ZygnSW5kZXhlZERiQXVkaW9CdWZmZXI6OmZpbGxCdWZzIChjaHVuayBub3QgZm91bmQpIGNhbGw6IGNiZW5kICcrZmlsbGVkKTtcclxuICAgICAgICAgIGNiRW5kKHRyZ1N0YXRlLmZpbGxlZCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCAoZXJyKSA9PiB7XHJcbiAgICAgICAgY2JFcnIoZXJyKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgZnJhbWVzT2JzKGZyYW1lUG9zOm51bWJlcixmcmFtZUxlbjpudW1iZXIsYnVmczpGbG9hdDMyQXJyYXlbXSk6T2JzZXJ2YWJsZTxudW1iZXI+e1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxudW1iZXI+KChzdWJzY3JpYmVyKT0+e1xyXG4gICAgICAvLyBQb3NpdGlvbmluZ1xyXG4gICAgICBsZXQgbmV3Q2k9TWF0aC5mbG9vcihmcmFtZVBvcy90aGlzLl9uZXRBYi5jaHVua0ZyYW1lTGVuKTtcclxuICAgICAgaWYobmV3Q2khPT10aGlzLl9jdXJyQ2kpe1xyXG4gICAgICAgIHRoaXMuX2N1cnJDaT1uZXdDaTtcclxuICAgICAgICB0aGlzLl9jY0NhY2hlPW51bGw7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IHNyY0ZyYW1lUG9zPW5ld0NpKnRoaXMuX25ldEFiLmNodW5rRnJhbWVMZW47XHJcbiAgICAgIGxldCB0cmdTdGF0ZT17ZnJhbWVQb3M6ZnJhbWVQb3MsZnJhbWVMZW46ZnJhbWVMZW4sdHJnQnVmczpidWZzLGZpbGxlZDowfTtcclxuICAgICAgbGV0IHNyY1N0YXRlPXtvcmdTcmNGcmFtZVBvczowLHNyY0ZyYW1lUG9zOnNyY0ZyYW1lUG9zLGNpOm5ld0NpLGNjUG9zOjAsY2NGaWxsZWQ6MH07XHJcbiAgICAgIHRoaXMuZmlsbEJ1ZnModGhpcy5fbmV0QWIuYmFzZVVybCx0aGlzLl9uZXRBYi5vcmdGZXRjaENodW5rRnJhbWVMZW4sdHJnU3RhdGUsc3JjU3RhdGUsKHZhbCk9Pnt9LChmaWxsZWQ6bnVtYmVyKT0+e1xyXG4gICAgICAgIHN1YnNjcmliZXIubmV4dChmaWxsZWQpO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgfSxlcnIgPT4ge1xyXG4gICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcclxuICAgICAgfSlcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLl9jdXJyQ2k9MDtcclxuICAgIHRoaXMuX2NjQ2FjaGU9bnVsbDtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBOZXRBdWRpb0lucHV0U3RyZWFtIGltcGxlbWVudHMgQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuXHJcbiAgcHJpdmF0ZSBmcmFtZVBvczpudW1iZXI9MDtcclxuICBwcml2YXRlIG5ldEFiU3RyOk5ldFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgbmV0QWI6TmV0QXVkaW9CdWZmZXIpIHtcclxuICAgICAgdGhpcy5uZXRBYlN0cj1uZXcgTmV0UmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0obmV0QWIpO1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLm5ldEFiU3RyLmNsb3NlKCk7XHJcbiAgfVxyXG5cclxuICByZWFkT2JzKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPG51bWJlcj4oc3Vic2NyPT4ge1xyXG4gICAgICBpZiAoYnVmZmVycyAmJiBidWZmZXJzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBsZXQgZmwgPSBidWZmZXJzWzBdLmxlbmd0aDtcclxuICAgICAgICB0aGlzLm5ldEFiU3RyLmZyYW1lc09icyh0aGlzLmZyYW1lUG9zLCBmbCwgYnVmZmVycykuc3Vic2NyaWJlKHtcclxuICAgICAgICAgIG5leHQ6IChyZWFkKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZnJhbWVQb3MgKz0gcmVhZDtcclxuICAgICAgICAgICAgc3Vic2NyLm5leHQocmVhZCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgY29tcGxldGU6ICgpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyLmNvbXBsZXRlKCk7XHJcbiAgICAgICAgICB9LFxyXG4gICAgICAgICAgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyLmVycm9yKGVycik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc3Vic2NyLm5leHQoMCk7XHJcbiAgICAgICAgc3Vic2NyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgc2tpcEZyYW1lcyhuOiBudW1iZXIpOnZvaWQge1xyXG4gICAgdGhpcy5mcmFtZVBvcys9bjtcclxuICB9XHJcblxyXG5cclxufVxyXG4iXX0=
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
export class AudioClip {
|
|
2
|
-
constructor(_audioDataHolder) {
|
|
3
|
-
this._audioDataHolder = _audioDataHolder;
|
|
4
|
-
this._selection = null;
|
|
5
|
-
this._levelInfos = null;
|
|
6
|
-
this.selectionObservers = new Array();
|
|
7
|
-
}
|
|
8
|
-
get audioDataHolder() {
|
|
9
|
-
return this._audioDataHolder;
|
|
10
|
-
}
|
|
11
|
-
get selection() {
|
|
12
|
-
return this._selection;
|
|
13
|
-
}
|
|
14
|
-
set selection(value) {
|
|
15
|
-
this._selection = value;
|
|
16
|
-
// let obsCnt=this.selectionObservers.length
|
|
17
|
-
// this.selectionObservers.forEach((obs)=> {
|
|
18
|
-
// console.log("Calling observer")
|
|
19
|
-
// obs(this)
|
|
20
|
-
// });
|
|
21
|
-
for (let selObs of this.selectionObservers) {
|
|
22
|
-
selObs(this);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
get levelInfos() {
|
|
26
|
-
return this._levelInfos;
|
|
27
|
-
}
|
|
28
|
-
set levelInfos(value) {
|
|
29
|
-
this._levelInfos = value;
|
|
30
|
-
}
|
|
31
|
-
addSelectionObserver(selectionObserver, init = false) {
|
|
32
|
-
let obsAlreadyInList = this.selectionObservers.find((obs) => (obs === selectionObserver));
|
|
33
|
-
if (!obsAlreadyInList) {
|
|
34
|
-
this.selectionObservers.push(selectionObserver);
|
|
35
|
-
}
|
|
36
|
-
if (init) {
|
|
37
|
-
selectionObserver(this);
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
removeSelectionObserver(selectionObserver) {
|
|
41
|
-
this.selectionObservers = this.selectionObservers.filter((obs) => obs !== selectionObserver);
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
// export interface Reader {
|
|
45
|
-
// read(data: Blob): AudioClip;
|
|
46
|
-
// }
|
|
47
|
-
// export interface Writer {
|
|
48
|
-
// write(audioData: AudioClip): Blob;
|
|
49
|
-
// }
|
|
50
|
-
export class Selection {
|
|
51
|
-
constructor(sampleRate, startFrame, endFrame) {
|
|
52
|
-
this._sampleRate = sampleRate;
|
|
53
|
-
this._startFrame = startFrame;
|
|
54
|
-
this._endFrame = endFrame;
|
|
55
|
-
}
|
|
56
|
-
get sampleRate() {
|
|
57
|
-
return this._sampleRate;
|
|
58
|
-
}
|
|
59
|
-
get endFrame() {
|
|
60
|
-
return this._endFrame;
|
|
61
|
-
}
|
|
62
|
-
get startFrame() {
|
|
63
|
-
return this._startFrame;
|
|
64
|
-
}
|
|
65
|
-
get leftFrame() {
|
|
66
|
-
return (this._startFrame <= this._endFrame) ? this._startFrame : this._endFrame;
|
|
67
|
-
}
|
|
68
|
-
get rightFrame() {
|
|
69
|
-
return (this._startFrame <= this._endFrame) ? this._endFrame : this._startFrame;
|
|
70
|
-
}
|
|
71
|
-
equals(otherSelection) {
|
|
72
|
-
if (otherSelection) {
|
|
73
|
-
return (this._sampleRate == otherSelection._sampleRate && this._startFrame === otherSelection._startFrame && this._endFrame === otherSelection._endFrame);
|
|
74
|
-
}
|
|
75
|
-
return false;
|
|
76
|
-
}
|
|
77
|
-
toString() {
|
|
78
|
-
return "Selection: from: " + this.leftFrame + " to: " + this.rightFrame + " frame. Refers to sample rate :" + this._sampleRate;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
1
|
+
export class AudioClip {
|
|
2
|
+
constructor(_audioDataHolder) {
|
|
3
|
+
this._audioDataHolder = _audioDataHolder;
|
|
4
|
+
this._selection = null;
|
|
5
|
+
this._levelInfos = null;
|
|
6
|
+
this.selectionObservers = new Array();
|
|
7
|
+
}
|
|
8
|
+
get audioDataHolder() {
|
|
9
|
+
return this._audioDataHolder;
|
|
10
|
+
}
|
|
11
|
+
get selection() {
|
|
12
|
+
return this._selection;
|
|
13
|
+
}
|
|
14
|
+
set selection(value) {
|
|
15
|
+
this._selection = value;
|
|
16
|
+
// let obsCnt=this.selectionObservers.length
|
|
17
|
+
// this.selectionObservers.forEach((obs)=> {
|
|
18
|
+
// console.log("Calling observer")
|
|
19
|
+
// obs(this)
|
|
20
|
+
// });
|
|
21
|
+
for (let selObs of this.selectionObservers) {
|
|
22
|
+
selObs(this);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
get levelInfos() {
|
|
26
|
+
return this._levelInfos;
|
|
27
|
+
}
|
|
28
|
+
set levelInfos(value) {
|
|
29
|
+
this._levelInfos = value;
|
|
30
|
+
}
|
|
31
|
+
addSelectionObserver(selectionObserver, init = false) {
|
|
32
|
+
let obsAlreadyInList = this.selectionObservers.find((obs) => (obs === selectionObserver));
|
|
33
|
+
if (!obsAlreadyInList) {
|
|
34
|
+
this.selectionObservers.push(selectionObserver);
|
|
35
|
+
}
|
|
36
|
+
if (init) {
|
|
37
|
+
selectionObserver(this);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
removeSelectionObserver(selectionObserver) {
|
|
41
|
+
this.selectionObservers = this.selectionObservers.filter((obs) => obs !== selectionObserver);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// export interface Reader {
|
|
45
|
+
// read(data: Blob): AudioClip;
|
|
46
|
+
// }
|
|
47
|
+
// export interface Writer {
|
|
48
|
+
// write(audioData: AudioClip): Blob;
|
|
49
|
+
// }
|
|
50
|
+
export class Selection {
|
|
51
|
+
constructor(sampleRate, startFrame, endFrame) {
|
|
52
|
+
this._sampleRate = sampleRate;
|
|
53
|
+
this._startFrame = startFrame;
|
|
54
|
+
this._endFrame = endFrame;
|
|
55
|
+
}
|
|
56
|
+
get sampleRate() {
|
|
57
|
+
return this._sampleRate;
|
|
58
|
+
}
|
|
59
|
+
get endFrame() {
|
|
60
|
+
return this._endFrame;
|
|
61
|
+
}
|
|
62
|
+
get startFrame() {
|
|
63
|
+
return this._startFrame;
|
|
64
|
+
}
|
|
65
|
+
get leftFrame() {
|
|
66
|
+
return (this._startFrame <= this._endFrame) ? this._startFrame : this._endFrame;
|
|
67
|
+
}
|
|
68
|
+
get rightFrame() {
|
|
69
|
+
return (this._startFrame <= this._endFrame) ? this._endFrame : this._startFrame;
|
|
70
|
+
}
|
|
71
|
+
equals(otherSelection) {
|
|
72
|
+
if (otherSelection) {
|
|
73
|
+
return (this._sampleRate == otherSelection._sampleRate && this._startFrame === otherSelection._startFrame && this._endFrame === otherSelection._endFrame);
|
|
74
|
+
}
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
toString() {
|
|
78
|
+
return "Selection: from: " + this.leftFrame + " to: " + this.rightFrame + " frame. Refers to sample rate :" + this._sampleRate;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
81
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGVyc2lzdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL3BlcnNpc3Rvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sU0FBUztJQU1wQixZQUFvQixnQkFBZ0M7UUFBaEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFnQjtRQUo1QyxlQUFVLEdBQWdCLElBQUksQ0FBQztRQUN6QixnQkFBVyxHQUFtQixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLGtCQUFrQixHQUFDLElBQUksS0FBSyxFQUErQixDQUFBO0lBQ2xFLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDL0IsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQztJQUN6QixDQUFDO0lBRUQsSUFBSSxTQUFTLENBQUMsS0FBcUI7UUFDakMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDeEIsNENBQTRDO1FBQzVDLDRDQUE0QztRQUM1QyxvQ0FBb0M7UUFDcEMsY0FBYztRQUNkLE1BQU07UUFDTixLQUFJLElBQUksTUFBTSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBQztZQUN4QyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7U0FDYjtJQUNILENBQUM7SUFFRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksVUFBVSxDQUFDLEtBQXdCO1FBQ3JDLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDO0lBQzNCLENBQUM7SUFFRCxvQkFBb0IsQ0FBQyxpQkFBNkMsRUFBQyxJQUFJLEdBQUMsS0FBSztRQUMzRSxJQUFJLGdCQUFnQixHQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFBLENBQUMsR0FBRyxLQUFHLGlCQUFpQixDQUFDLENBQUMsQ0FBQTtRQUNuRixJQUFHLENBQUMsZ0JBQWdCLEVBQUU7WUFDcEIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1NBQ2hEO1FBQ0QsSUFBRyxJQUFJLEVBQUM7WUFDTixpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQTtTQUN4QjtJQUNILENBQUM7SUFFRCx1QkFBdUIsQ0FBQyxpQkFBNkM7UUFDbkUsSUFBSSxDQUFDLGtCQUFrQixHQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLEVBQUMsRUFBRSxDQUFBLEdBQUcsS0FBRyxpQkFBaUIsQ0FBQyxDQUFDO0lBQ3pGLENBQUM7Q0FDRjtBQUVELDRCQUE0QjtBQUM1QixpQ0FBaUM7QUFDakMsSUFBSTtBQUNKLDRCQUE0QjtBQUM1Qix1Q0FBdUM7QUFDdkMsSUFBSTtBQUVKLE1BQU0sT0FBTyxTQUFTO0lBS3BCLFlBQVksVUFBaUIsRUFBQyxVQUFpQixFQUFDLFFBQWU7UUFDN0QsSUFBSSxDQUFDLFdBQVcsR0FBQyxVQUFVLENBQUM7UUFDNUIsSUFBSSxDQUFDLFdBQVcsR0FBQyxVQUFVLENBQUE7UUFDM0IsSUFBSSxDQUFDLFNBQVMsR0FBQyxRQUFRLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksVUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztJQUMxQixDQUFDO0lBQ0QsSUFBSSxRQUFRO1FBQ1YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQ3hCLENBQUM7SUFDRCxJQUFJLFVBQVU7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQztJQUVELElBQUksU0FBUztRQUNYLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQTtJQUNqRixDQUFDO0lBQ0QsSUFBSSxVQUFVO1FBQ1osT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFBO0lBQ2pGLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBdUM7UUFDNUMsSUFBRyxjQUFjLEVBQUU7WUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLElBQUksY0FBYyxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLGNBQWMsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLFNBQVMsS0FBSyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUM7U0FDM0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRCxRQUFRO1FBQ04sT0FBTyxtQkFBbUIsR0FBQyxJQUFJLENBQUMsU0FBUyxHQUFDLE9BQU8sR0FBQyxJQUFJLENBQUMsVUFBVSxHQUFDLGlDQUFpQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDdkgsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtMZXZlbEluZm9zfSBmcm9tIFwiLi9kc3AvbGV2ZWxfbWVhc3VyZVwiO1xyXG5pbXBvcnQge0F1ZGlvRGF0YUhvbGRlcn0gZnJvbSBcIi4vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0NsaXAge1xyXG5cclxuICBwcml2YXRlIF9zZWxlY3Rpb246U2VsZWN0aW9ufG51bGw9bnVsbDtcclxuICAgICAgICBwcml2YXRlIF9sZXZlbEluZm9zOkxldmVsSW5mb3MgfCBudWxsPW51bGw7XHJcbiAgcHJpdmF0ZSBzZWxlY3Rpb25PYnNlcnZlcnM6QXJyYXk8KGF1ZGlvQ2xpcDpBdWRpb0NsaXApPT52b2lkPjtcclxuXHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXVkaW9EYXRhSG9sZGVyOkF1ZGlvRGF0YUhvbGRlcikge1xyXG5cclxuICAgIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzPW5ldyBBcnJheTwoYXVkaW9DbGlwOkF1ZGlvQ2xpcCk9PnZvaWQ+KClcclxuICB9XHJcblxyXG4gIGdldCBhdWRpb0RhdGFIb2xkZXIoKTogQXVkaW9EYXRhSG9sZGVyIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb0RhdGFIb2xkZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgc2VsZWN0aW9uKCk6IFNlbGVjdGlvbnxudWxse1xyXG4gICAgcmV0dXJuIHRoaXMuX3NlbGVjdGlvbjtcclxuICB9XHJcblxyXG4gIHNldCBzZWxlY3Rpb24odmFsdWU6IFNlbGVjdGlvbnxudWxsKSB7XHJcbiAgICB0aGlzLl9zZWxlY3Rpb24gPSB2YWx1ZTtcclxuICAgIC8vIGxldCBvYnNDbnQ9dGhpcy5zZWxlY3Rpb25PYnNlcnZlcnMubGVuZ3RoXHJcbiAgICAvLyB0aGlzLnNlbGVjdGlvbk9ic2VydmVycy5mb3JFYWNoKChvYnMpPT4ge1xyXG4gICAgLy8gICBjb25zb2xlLmxvZyhcIkNhbGxpbmcgb2JzZXJ2ZXJcIilcclxuICAgIC8vICAgb2JzKHRoaXMpXHJcbiAgICAvLyB9KTtcclxuICAgIGZvcihsZXQgc2VsT2JzIG9mIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzKXtcclxuICAgICAgc2VsT2JzKHRoaXMpXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXQgbGV2ZWxJbmZvcygpOiBMZXZlbEluZm9zIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fbGV2ZWxJbmZvcztcclxuICB9XHJcblxyXG4gIHNldCBsZXZlbEluZm9zKHZhbHVlOiBMZXZlbEluZm9zIHwgbnVsbCkge1xyXG4gICAgdGhpcy5fbGV2ZWxJbmZvcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgYWRkU2VsZWN0aW9uT2JzZXJ2ZXIoc2VsZWN0aW9uT2JzZXJ2ZXI6KGF1ZGlvQ2xpcDpBdWRpb0NsaXApPT52b2lkLGluaXQ9ZmFsc2Upe1xyXG4gICAgbGV0IG9ic0FscmVhZHlJbkxpc3Q9dGhpcy5zZWxlY3Rpb25PYnNlcnZlcnMuZmluZCgob2JzKT0+KG9icz09PXNlbGVjdGlvbk9ic2VydmVyKSlcclxuICAgIGlmKCFvYnNBbHJlYWR5SW5MaXN0KSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0aW9uT2JzZXJ2ZXJzLnB1c2goc2VsZWN0aW9uT2JzZXJ2ZXIpXHJcbiAgICB9XHJcbiAgICBpZihpbml0KXtcclxuICAgICAgc2VsZWN0aW9uT2JzZXJ2ZXIodGhpcylcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZVNlbGVjdGlvbk9ic2VydmVyKHNlbGVjdGlvbk9ic2VydmVyOihhdWRpb0NsaXA6QXVkaW9DbGlwKT0+dm9pZCl7XHJcbiAgICB0aGlzLnNlbGVjdGlvbk9ic2VydmVycz10aGlzLnNlbGVjdGlvbk9ic2VydmVycy5maWx0ZXIoKG9icyk9Pm9icyE9PXNlbGVjdGlvbk9ic2VydmVyKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIGV4cG9ydCBpbnRlcmZhY2UgUmVhZGVyIHtcclxuLy8gICByZWFkKGRhdGE6IEJsb2IpOiBBdWRpb0NsaXA7XHJcbi8vIH1cclxuLy8gZXhwb3J0IGludGVyZmFjZSBXcml0ZXIge1xyXG4vLyAgIHdyaXRlKGF1ZGlvRGF0YTogQXVkaW9DbGlwKTogQmxvYjtcclxuLy8gfVxyXG5cclxuZXhwb3J0IGNsYXNzIFNlbGVjdGlvbntcclxuICBwcml2YXRlIHJlYWRvbmx5IF9zYW1wbGVSYXRlOm51bWJlcjtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9zdGFydEZyYW1lOm51bWJlcjtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9lbmRGcmFtZTpudW1iZXI7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHNhbXBsZVJhdGU6bnVtYmVyLHN0YXJ0RnJhbWU6bnVtYmVyLGVuZEZyYW1lOm51bWJlcil7XHJcbiAgICB0aGlzLl9zYW1wbGVSYXRlPXNhbXBsZVJhdGU7XHJcbiAgICB0aGlzLl9zdGFydEZyYW1lPXN0YXJ0RnJhbWVcclxuICAgIHRoaXMuX2VuZEZyYW1lPWVuZEZyYW1lO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zYW1wbGVSYXRlO1xyXG4gIH1cclxuICBnZXQgZW5kRnJhbWUoKTpudW1iZXJ7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5kRnJhbWU7XHJcbiAgfVxyXG4gIGdldCBzdGFydEZyYW1lKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc3RhcnRGcmFtZTtcclxuICB9XHJcblxyXG4gIGdldCBsZWZ0RnJhbWUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5fc3RhcnRGcmFtZSA8PSB0aGlzLl9lbmRGcmFtZSkgPyB0aGlzLl9zdGFydEZyYW1lIDogdGhpcy5fZW5kRnJhbWVcclxuICB9XHJcbiAgZ2V0IHJpZ2h0RnJhbWUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiAodGhpcy5fc3RhcnRGcmFtZSA8PSB0aGlzLl9lbmRGcmFtZSkgPyB0aGlzLl9lbmRGcmFtZSA6IHRoaXMuX3N0YXJ0RnJhbWVcclxuICB9XHJcblxyXG4gIGVxdWFscyhvdGhlclNlbGVjdGlvbjpTZWxlY3Rpb258bnVsbHx1bmRlZmluZWQpOmJvb2xlYW57XHJcbiAgICBpZihvdGhlclNlbGVjdGlvbikge1xyXG4gICAgICByZXR1cm4gKHRoaXMuX3NhbXBsZVJhdGUgPT0gb3RoZXJTZWxlY3Rpb24uX3NhbXBsZVJhdGUgJiYgdGhpcy5fc3RhcnRGcmFtZSA9PT0gb3RoZXJTZWxlY3Rpb24uX3N0YXJ0RnJhbWUgJiYgdGhpcy5fZW5kRnJhbWUgPT09IG90aGVyU2VsZWN0aW9uLl9lbmRGcmFtZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gZmFsc2U7XHJcbiAgfVxyXG5cclxuICB0b1N0cmluZygpe1xyXG4gICAgcmV0dXJuIFwiU2VsZWN0aW9uOiBmcm9tOiBcIit0aGlzLmxlZnRGcmFtZStcIiB0bzogXCIrdGhpcy5yaWdodEZyYW1lK1wiIGZyYW1lLiBSZWZlcnMgdG8gc2FtcGxlIHJhdGUgOlwiK3RoaXMuX3NhbXBsZVJhdGU7XHJcbiAgfVxyXG59XHJcblxyXG5cclxuIl19
|