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
package/public-api.d.ts
CHANGED
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
export { SpeechrecorderngModule } from './lib/speechrecorderng.module';
|
|
2
|
-
export { VERSION } from './lib/spr.module.version';
|
|
3
|
-
export { SPEECHRECORDER_CONFIG } from './lib/spr.config';
|
|
4
|
-
export { UUID } from "./lib/utils/utils";
|
|
5
|
-
export { Action } from "./lib/action/action";
|
|
6
|
-
export { ResponsiveComponent } from './lib/ui/responsive_component';
|
|
7
|
-
export { MessageDialog } from "./lib/ui/message_dialog";
|
|
8
|
-
export { ReadyStateProvider } from "./lib/recorder_component";
|
|
9
|
-
export { AudioClip, Selection } from './lib/audio/persistor';
|
|
10
|
-
export { WavWriter } from './lib/audio/impl/wavwriter';
|
|
11
|
-
export { RecorderComponent } from './lib/recorder_component';
|
|
12
|
-
export { AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType } from './lib/audio/playback/player';
|
|
13
|
-
export { AudioRecorder, AudioRecorderComponent } from './lib/speechrecorder/session/audiorecorder';
|
|
14
|
-
export { AudioDisplay } from './lib/audio/audio_display';
|
|
15
|
-
export { AudioDisplayPlayer } from './lib/audio/audio_player';
|
|
16
|
-
export { AudioClipUIContainer } from './lib/audio/ui/container';
|
|
17
|
-
export { ScrollPaneHorizontal } from './lib/audio/ui/scroll_pane_horizontal';
|
|
18
|
-
export { AudioDisplayScrollPane } from "./lib/audio/ui/audio_display_scroll_pane";
|
|
19
|
-
export { AudioContextProvider } from "./lib/audio/context";
|
|
20
|
-
export { AudioDisplayControl } from "./lib/audio/ui/audio_display_control";
|
|
21
|
-
export { LevelBar } from './lib/audio/ui/livelevel';
|
|
22
|
-
export { ProjectService } from './lib/speechrecorder/project/project.service';
|
|
23
|
-
export { Session } from './lib/speechrecorder/session/session';
|
|
24
|
-
export { SessionService } from './lib/speechrecorder/session/session.service';
|
|
25
|
-
export { ScriptService } from './lib/speechrecorder/script/script.service';
|
|
26
|
-
export { Script, Section, Group, PromptItem, Mediaitem, PromptPhase, Mode } from './lib/speechrecorder/script/script';
|
|
27
|
-
export { RecordingService } from './lib/speechrecorder/recordings/recordings.service';
|
|
28
|
-
export { SprRecordingFile } from './lib/speechrecorder/recording';
|
|
29
|
-
export { RecordingFileService } from './lib/speechrecorder/session/recordingfile/recordingfile-service';
|
|
30
|
-
export { RecordingFileViewComponent } from './lib/speechrecorder/session/recordingfile/recording-file-view.component';
|
|
31
|
-
export { RecordingFileUI } from './lib/speechrecorder/session/recordingfile/recording-file-u-i.component';
|
|
32
|
-
export { SpeechRecorderConfig, ApiType } from './lib/spr.config';
|
|
33
|
-
export { SpeechrecorderngComponent } from './lib/speechrecorderng.component';
|
|
1
|
+
export { SpeechrecorderngModule } from './lib/speechrecorderng.module';
|
|
2
|
+
export { VERSION } from './lib/spr.module.version';
|
|
3
|
+
export { SPEECHRECORDER_CONFIG } from './lib/spr.config';
|
|
4
|
+
export { UUID } from "./lib/utils/utils";
|
|
5
|
+
export { Action } from "./lib/action/action";
|
|
6
|
+
export { ResponsiveComponent } from './lib/ui/responsive_component';
|
|
7
|
+
export { MessageDialog } from "./lib/ui/message_dialog";
|
|
8
|
+
export { ReadyStateProvider } from "./lib/recorder_component";
|
|
9
|
+
export { AudioClip, Selection } from './lib/audio/persistor';
|
|
10
|
+
export { WavWriter } from './lib/audio/impl/wavwriter';
|
|
11
|
+
export { RecorderComponent } from './lib/recorder_component';
|
|
12
|
+
export { AudioPlayer, AudioPlayerListener, AudioPlayerEvent, EventType } from './lib/audio/playback/player';
|
|
13
|
+
export { AudioRecorder, AudioRecorderComponent } from './lib/speechrecorder/session/audiorecorder';
|
|
14
|
+
export { AudioDisplay } from './lib/audio/audio_display';
|
|
15
|
+
export { AudioDisplayPlayer } from './lib/audio/audio_player';
|
|
16
|
+
export { AudioClipUIContainer } from './lib/audio/ui/container';
|
|
17
|
+
export { ScrollPaneHorizontal } from './lib/audio/ui/scroll_pane_horizontal';
|
|
18
|
+
export { AudioDisplayScrollPane } from "./lib/audio/ui/audio_display_scroll_pane";
|
|
19
|
+
export { AudioContextProvider } from "./lib/audio/context";
|
|
20
|
+
export { AudioDisplayControl } from "./lib/audio/ui/audio_display_control";
|
|
21
|
+
export { LevelBar } from './lib/audio/ui/livelevel';
|
|
22
|
+
export { ProjectService } from './lib/speechrecorder/project/project.service';
|
|
23
|
+
export { Session } from './lib/speechrecorder/session/session';
|
|
24
|
+
export { SessionService } from './lib/speechrecorder/session/session.service';
|
|
25
|
+
export { ScriptService } from './lib/speechrecorder/script/script.service';
|
|
26
|
+
export { Script, Section, Group, PromptItem, Mediaitem, PromptPhase, Mode } from './lib/speechrecorder/script/script';
|
|
27
|
+
export { RecordingService } from './lib/speechrecorder/recordings/recordings.service';
|
|
28
|
+
export { SprRecordingFile } from './lib/speechrecorder/recording';
|
|
29
|
+
export { RecordingFileService } from './lib/speechrecorder/session/recordingfile/recordingfile-service';
|
|
30
|
+
export { RecordingFileViewComponent } from './lib/speechrecorder/session/recordingfile/recording-file-view.component';
|
|
31
|
+
export { RecordingFileUI } from './lib/speechrecorder/session/recordingfile/recording-file-u-i.component';
|
|
32
|
+
export { SpeechRecorderConfig, ApiType } from './lib/spr.config';
|
|
33
|
+
export { SpeechrecorderngComponent } from './lib/speechrecorderng.component';
|
|
@@ -1,73 +0,0 @@
|
|
|
1
|
-
export class ActionEvent {
|
|
2
|
-
constructor(_value = null) {
|
|
3
|
-
this._value = _value;
|
|
4
|
-
}
|
|
5
|
-
get value() {
|
|
6
|
-
return this._value;
|
|
7
|
-
}
|
|
8
|
-
}
|
|
9
|
-
export class Action {
|
|
10
|
-
constructor(name, value = null) {
|
|
11
|
-
this._disabled = true;
|
|
12
|
-
this._onAction = null;
|
|
13
|
-
this._name = name;
|
|
14
|
-
this._value = value;
|
|
15
|
-
this.listeners = new Array();
|
|
16
|
-
this.controls = [];
|
|
17
|
-
}
|
|
18
|
-
get value() {
|
|
19
|
-
return this._value;
|
|
20
|
-
}
|
|
21
|
-
get name() {
|
|
22
|
-
return this._name;
|
|
23
|
-
}
|
|
24
|
-
get onAction() {
|
|
25
|
-
return this._onAction;
|
|
26
|
-
}
|
|
27
|
-
set onAction(value) {
|
|
28
|
-
this._onAction = value;
|
|
29
|
-
}
|
|
30
|
-
createActionEvent(value = null) {
|
|
31
|
-
// default:
|
|
32
|
-
return new ActionEvent(value);
|
|
33
|
-
}
|
|
34
|
-
perform(value = null) {
|
|
35
|
-
this._value = value;
|
|
36
|
-
if (!this.disabled && this._onAction) {
|
|
37
|
-
let ae = this.createActionEvent(value);
|
|
38
|
-
this._onAction(ae);
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
set disabled(disabled) {
|
|
42
|
-
//console.debug("Action: "+this._name+" disabled: "+disabled)
|
|
43
|
-
this._disabled = disabled;
|
|
44
|
-
for (let c of this.controls) {
|
|
45
|
-
c.disabled = this._disabled;
|
|
46
|
-
}
|
|
47
|
-
//let disStr=this.disabled?"disabled":"enabled";
|
|
48
|
-
//console.log(this._name+": "+disStr);
|
|
49
|
-
}
|
|
50
|
-
get disabled() {
|
|
51
|
-
return this._disabled;
|
|
52
|
-
}
|
|
53
|
-
addControl(ctrl, actionEventName) {
|
|
54
|
-
if (ctrl) {
|
|
55
|
-
if (this.controls.indexOf(ctrl) < 0) {
|
|
56
|
-
ctrl.disabled = this.disabled;
|
|
57
|
-
this.controls.push(ctrl);
|
|
58
|
-
if (actionEventName) {
|
|
59
|
-
ctrl.addEventListener(actionEventName, () => {
|
|
60
|
-
this.perform();
|
|
61
|
-
});
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
removeControl(ctrl) {
|
|
67
|
-
const i = this.controls.indexOf(ctrl);
|
|
68
|
-
if (i >= 0) {
|
|
69
|
-
this.controls = this.controls.splice(i, 1);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWN0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2FjdGlvbi9hY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0ksTUFBTSxPQUFPLFdBQVc7SUFJcEIsWUFBb0IsU0FBYyxJQUFJO1FBQWxCLFdBQU0sR0FBTixNQUFNLENBQVk7SUFFdEMsQ0FBQztJQUxELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0NBSUo7QUFNRCxNQUFNLE9BQU8sTUFBTTtJQVlmLFlBQVksSUFBVyxFQUFDLFFBQWEsSUFBSTtRQUx6QyxjQUFTLEdBQUMsSUFBSSxDQUFDO1FBQ1AsY0FBUyxHQUE2QixJQUFJLENBQUM7UUFLL0MsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBQyxLQUFLLENBQUE7UUFDakIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEtBQUssRUFBMEIsQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztJQUN2QixDQUFDO0lBaEJELElBQUksS0FBSztRQUNMLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUN2QixDQUFDO0lBZ0JELElBQUksSUFBSTtRQUNKLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztJQUN0QixDQUFDO0lBR0QsSUFBSSxRQUFRO1FBQ1IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDO0lBQzFCLENBQUM7SUFFRCxJQUFJLFFBQVEsQ0FBQyxLQUFpQztRQUMxQyxJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUMzQixDQUFDO0lBRVUsaUJBQWlCLENBQUMsUUFBYyxJQUFJO1FBQzNDLFdBQVc7UUFDWCxPQUFPLElBQUksV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRCxPQUFPLENBQUMsUUFBYyxJQUFJO1FBQ3RCLElBQUksQ0FBQyxNQUFNLEdBQUMsS0FBSyxDQUFBO1FBQ2pCLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7WUFDbEMsSUFBSSxFQUFFLEdBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxDQUFBO1lBQ3BDLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDdEI7SUFDTCxDQUFDO0lBRUQsSUFBSSxRQUFRLENBQUMsUUFBZ0I7UUFDMUIsNkRBQTZEO1FBQzVELElBQUksQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDO1FBQzFCLEtBQUssSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUN6QixDQUFDLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUM7U0FDL0I7UUFDRCxnREFBZ0Q7UUFDaEQsc0NBQXNDO0lBQzFDLENBQUM7SUFFRCxJQUFJLFFBQVE7UUFDUixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUM7SUFDMUIsQ0FBQztJQUVELFVBQVUsQ0FBQyxJQUFzQixFQUFFLGVBQXdCO1FBQ3ZELElBQUksSUFBSSxFQUFFO1lBQ04sSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3pCLElBQUksZUFBZSxFQUFFO29CQUNqQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO29CQUNuQixDQUFDLENBQUMsQ0FBQztpQkFDTjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRUQsYUFBYSxDQUFDLElBQXFCO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQzlDO0lBQ0wsQ0FBQztDQUNKIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbiAgICBleHBvcnQgY2xhc3MgQWN0aW9uRXZlbnQ8VD4ge1xyXG4gICAgICAgIGdldCB2YWx1ZSgpOiBUfG51bGwge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0cnVjdG9yKHByaXZhdGUgX3ZhbHVlOlR8bnVsbD1udWxsKSB7XHJcblxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBleHBvcnQgaW50ZXJmYWNlIEFjdGlvbkV2ZW50TGlzdGVuZXI8VD57XHJcbiAgICAgICAgKGFlOkFjdGlvbkV2ZW50PFQ+KTp2b2lkO1xyXG4gICAgfVxyXG5cclxuICAgIGV4cG9ydCBjbGFzcyBBY3Rpb248VD4ge1xyXG4gICAgICAgIGdldCB2YWx1ZSgpOiBUfG51bGwge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IF9uYW1lOnN0cmluZztcclxuICAgICAgICBwcml2YXRlIF92YWx1ZTpUfG51bGw7XHJcbiAgICAgICAgX2Rpc2FibGVkPXRydWU7XHJcbiAgICAgICAgcHJpdmF0ZSBfb25BY3Rpb246QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsPW51bGw7XHJcbiAgICAgICAgbGlzdGVuZXJzOkFycmF5PEFjdGlvbkV2ZW50TGlzdGVuZXI8VD4+O1xyXG4gICAgICAgIHByaXZhdGUgY29udHJvbHM6SFRNTElucHV0RWxlbWVudFtdO1xyXG5cclxuICAgICAgICBjb25zdHJ1Y3RvcihuYW1lOnN0cmluZyx2YWx1ZTpUfG51bGw9bnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWU9dmFsdWVcclxuICAgICAgICAgICAgdGhpcy5saXN0ZW5lcnMgPSBuZXcgQXJyYXk8QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPj4oKTtcclxuICAgICAgICAgICAgdGhpcy5jb250cm9scyA9IFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZ2V0IG5hbWUoKTpzdHJpbmcge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbmFtZTtcclxuICAgICAgICB9XHJcblxyXG5cclxuICAgICAgICBnZXQgb25BY3Rpb24oKTpBY3Rpb25FdmVudExpc3RlbmVyPFQ+fG51bGwge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fb25BY3Rpb247XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXQgb25BY3Rpb24odmFsdWU6QWN0aW9uRXZlbnRMaXN0ZW5lcjxUPnxudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX29uQWN0aW9uID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwcm90ZWN0ZWQgIGNyZWF0ZUFjdGlvbkV2ZW50KHZhbHVlOiBUfG51bGw9bnVsbCk6QWN0aW9uRXZlbnQ8VD4ge1xyXG4gICAgICAgICAgICAvLyBkZWZhdWx0OlxyXG4gICAgICAgICAgICByZXR1cm4gbmV3IEFjdGlvbkV2ZW50KHZhbHVlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBlcmZvcm0odmFsdWU6IFR8bnVsbD1udWxsKTp2b2lkIHtcclxuICAgICAgICAgICAgdGhpcy5fdmFsdWU9dmFsdWVcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVkICYmIHRoaXMuX29uQWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgYWU9dGhpcy5jcmVhdGVBY3Rpb25FdmVudCh2YWx1ZSlcclxuICAgICAgICAgICAgICAgIHRoaXMuX29uQWN0aW9uKGFlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgc2V0IGRpc2FibGVkKGRpc2FibGVkOmJvb2xlYW4pIHtcclxuICAgICAgICAgICAvL2NvbnNvbGUuZGVidWcoXCJBY3Rpb246IFwiK3RoaXMuX25hbWUrXCIgZGlzYWJsZWQ6IFwiK2Rpc2FibGVkKVxyXG4gICAgICAgICAgICB0aGlzLl9kaXNhYmxlZCA9IGRpc2FibGVkO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBjIG9mIHRoaXMuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgIGMuZGlzYWJsZWQgPSB0aGlzLl9kaXNhYmxlZDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2xldCBkaXNTdHI9dGhpcy5kaXNhYmxlZD9cImRpc2FibGVkXCI6XCJlbmFibGVkXCI7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5fbmFtZStcIjogXCIrZGlzU3RyKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGdldCBkaXNhYmxlZCgpOmJvb2xlYW4ge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGlzYWJsZWQ7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBhZGRDb250cm9sKGN0cmw6IEhUTUxJbnB1dEVsZW1lbnQsIGFjdGlvbkV2ZW50TmFtZT86IHN0cmluZykge1xyXG4gICAgICAgICAgICBpZiAoY3RybCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuY29udHJvbHMuaW5kZXhPZihjdHJsKSA8IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBjdHJsLmRpc2FibGVkID0gdGhpcy5kaXNhYmxlZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzLnB1c2goY3RybCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbkV2ZW50TmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjdHJsLmFkZEV2ZW50TGlzdGVuZXIoYWN0aW9uRXZlbnROYW1lLCAoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBlcmZvcm0oKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZW1vdmVDb250cm9sKGN0cmw6SFRNTElucHV0RWxlbWVudCkge1xyXG4gICAgICAgICAgICBjb25zdCBpID0gdGhpcy5jb250cm9scy5pbmRleE9mKGN0cmwpO1xyXG4gICAgICAgICAgICBpZiAoaSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRyb2xzID0gdGhpcy5jb250cm9scy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4iXX0=
|
|
@@ -1,264 +0,0 @@
|
|
|
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
|
-
}
|
|
76
|
-
export class AudioDataHolder {
|
|
77
|
-
constructor(_audioSource) {
|
|
78
|
-
this._audioSource = _audioSource;
|
|
79
|
-
this._numberOfChannels = 0;
|
|
80
|
-
this._sampleRate = 0;
|
|
81
|
-
this._frameLen = 0;
|
|
82
|
-
this._duration = 0;
|
|
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;
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
get audioSource() {
|
|
91
|
-
return this._audioSource;
|
|
92
|
-
}
|
|
93
|
-
get duration() {
|
|
94
|
-
return this._duration;
|
|
95
|
-
}
|
|
96
|
-
addOnReadyListener(onReady) {
|
|
97
|
-
this._audioSource?.addOnReadyListener(onReady);
|
|
98
|
-
}
|
|
99
|
-
get sampleRate() {
|
|
100
|
-
return this._sampleRate;
|
|
101
|
-
}
|
|
102
|
-
get numberOfChannels() {
|
|
103
|
-
return this._numberOfChannels;
|
|
104
|
-
}
|
|
105
|
-
get frameLen() {
|
|
106
|
-
return this._frameLen;
|
|
107
|
-
}
|
|
108
|
-
sampleCounts() {
|
|
109
|
-
return this._numberOfChannels * this._frameLen;
|
|
110
|
-
}
|
|
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;
|
|
222
|
-
let toRead = frameLen;
|
|
223
|
-
if (this._buffer.length < framePos + frameLen) {
|
|
224
|
-
toRead = this._buffer.length - framePos;
|
|
225
|
-
}
|
|
226
|
-
for (let ch = 0; ch < bufs.length; ch++) {
|
|
227
|
-
let chData = this._buffer.getChannelData(ch);
|
|
228
|
-
for (let i = 0; i < toRead; i++) {
|
|
229
|
-
bufs[ch][i] = chData[framePos + i];
|
|
230
|
-
}
|
|
231
|
-
}
|
|
232
|
-
read = toRead;
|
|
233
|
-
subscriber.next(read);
|
|
234
|
-
subscriber.complete();
|
|
235
|
-
});
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
export class AudioBufferInputStream {
|
|
239
|
-
constructor(audioBuffer) {
|
|
240
|
-
this.audioBuffer = audioBuffer;
|
|
241
|
-
this.framePos = 0;
|
|
242
|
-
}
|
|
243
|
-
close() {
|
|
244
|
-
}
|
|
245
|
-
skipFrames(n) {
|
|
246
|
-
this.framePos += n;
|
|
247
|
-
}
|
|
248
|
-
read(buffers) {
|
|
249
|
-
let read = 0;
|
|
250
|
-
let toRead = buffers[0].length;
|
|
251
|
-
if (this.framePos + toRead > this.audioBuffer.length) {
|
|
252
|
-
toRead = this.audioBuffer.length - this.framePos;
|
|
253
|
-
}
|
|
254
|
-
for (let ch = 0; ch < buffers.length; ch++) {
|
|
255
|
-
for (let i = 0; i < toRead; i++) {
|
|
256
|
-
buffers[ch][i] = this.audioBuffer.getChannelData(ch)[this.framePos + i];
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
read = toRead;
|
|
260
|
-
this.framePos += toRead;
|
|
261
|
-
return read;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGF0YV9ob2xkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9zcGVlY2hyZWNvcmRlcm5nL3NyYy9saWIvYXVkaW8vYXVkaW9fZGF0YV9ob2xkZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFDLFVBQVUsRUFBQyxNQUFNLE1BQU0sQ0FBQztBQWlCaEMsTUFBTSxPQUFnQixnQkFBZ0I7SUFBdEM7UUFDWSxXQUFNLEdBQVMsS0FBSyxDQUFDO1FBQ3JCLHFCQUFnQixHQUFxQixJQUFJLEtBQUssRUFBYyxDQUFDO0lBbUR6RSxDQUFDO0lBakRDLGtCQUFrQixDQUFDLE9BQXFCO1FBQ3RDLDBCQUEwQjtRQUMxQix3Q0FBd0M7UUFDeEMsc0JBQXNCO1FBQ3RCLHlCQUF5QjtRQUN6QixhQUFhO1FBQ2IsTUFBTTtRQUNOLElBQUk7UUFDSixzQkFBc0I7UUFDdEIseUNBQXlDO1FBQ3pDLElBQUk7UUFFSixJQUFHLENBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFDLEVBQUUsQ0FBQSxFQUFFLEtBQUcsT0FBTyxDQUFDLENBQUMsRUFBQztZQUNwRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1NBQ3JDO1FBRUQsSUFBRyxJQUFJLENBQUMsTUFBTSxFQUFDO1lBQ2IsT0FBTyxFQUFFLENBQUM7U0FDWDtJQUNILENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxPQUFxQjtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBQyxFQUFFLENBQUEsRUFBRSxLQUFHLE9BQU8sQ0FBQyxDQUFDO0lBQ3pFLENBQUM7SUFFRCxLQUFLO1FBQ0gsSUFBSSxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUM7UUFDakIsS0FBSSxJQUFJLE9B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QUMsQ0FBQyxDQUFDO0lBR25CLENBQUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQztJQUVELFVBQVUsQ0FBQyxDQUFTO1FBQ2xCLElBQUksQ0FBQyxRQUFRLElBQUUsQ0FBQyxDQUFDO0lBQ25CLENBQUM7SUFFRCxJQUFJLENBQUMsT0FBNEI7UUFDL0IsSUFBSSxJQUFJLEdBQUMsQ0FBQyxDQUFDO1FBQ1gsSUFBSSxNQUFNLEdBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFHLElBQUksQ0FBQyxRQUFRLEdBQUMsTUFBTSxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsTUFBTSxFQUFDO1lBQzlDLE1BQU0sR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO1NBQzlDO1FBQ0QsS0FBSSxJQUFJLEVBQUUsR0FBQyxDQUFDLEVBQUMsRUFBRSxHQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUMsRUFBRSxFQUFFLEVBQUU7WUFDbkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDL0IsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUMsQ0FBQyxDQUFDLENBQUM7YUFDckU7U0FDRjtRQUNELElBQUksR0FBQyxNQUFNLENBQUM7UUFDWixJQUFJLENBQUMsUUFBUSxJQUFFLE1BQU0sQ0FBQztRQUN0QixPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7Q0FFRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7QXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSwgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW19IGZyb20gXCIuLi9pby9zdHJlYW1cIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuZXhwb3J0IGludGVyZmFjZSBBdWRpb1NvdXJjZSB7XHJcbiAgZ2V0IGR1cmF0aW9uKCk6bnVtYmVyO1xyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlcjtcclxuICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXI7XHJcbiAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlcjtcclxuICBzYW1wbGVDb3VudHMoKTogbnVtYmVyO1xyXG4gIGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG4gIGFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpOiBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbDtcclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOlJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtO1xyXG4gIHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPjtcclxuICBhZGRPblJlYWR5TGlzdGVuZXIob25SZWFkeTooKCk9PnZvaWQpfG51bGwpOnZvaWQ7XHJcbiAgcmVtb3ZlT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6KCgpPT52b2lkKXxudWxsKTp2b2lkO1xyXG4gIHJlYWR5KCk6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2ljQXVkaW9Tb3VyY2UgaW1wbGVtZW50cyBBdWRpb1NvdXJjZXtcclxuICBwcm90ZWN0ZWQgX3JlYWR5OmJvb2xlYW49ZmFsc2U7XHJcbiAgcHJvdGVjdGVkIG9uUmVhZHlMaXN0ZW5lcnM6QXJyYXk8KCgpID0+IHZvaWQpPj1uZXcgQXJyYXk8KCkgPT4gdm9pZD4oKTtcclxuXHJcbiAgYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6ICgoKSA9PiB2b2lkKSk6IHZvaWQge1xyXG4gICAgLy8gbGV0IGFscmVhZHlBZGRlZD1mYWxzZTtcclxuICAgIC8vIGZvcihsZXQgb3Igb2YgdGhpcy5vblJlYWR5TGlzdGVuZXJzKXtcclxuICAgIC8vICAgaWYob3I9PT1vblJlYWR5KXtcclxuICAgIC8vICAgICBhbHJlYWR5QWRkZWQ9dHJ1ZTtcclxuICAgIC8vICAgICBicmVhaztcclxuICAgIC8vICAgfVxyXG4gICAgLy8gfVxyXG4gICAgLy8gaWYoIWFscmVhZHlBZGRlZCkge1xyXG4gICAgLy8gICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMucHVzaChvblJlYWR5KTtcclxuICAgIC8vIH1cclxuXHJcbiAgICBpZighICh0aGlzLm9uUmVhZHlMaXN0ZW5lcnMuZmluZCgob3IpPT5vcj09PW9uUmVhZHkpKSl7XHJcbiAgICAgIHRoaXMub25SZWFkeUxpc3RlbmVycy5wdXNoKG9uUmVhZHkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmKHRoaXMuX3JlYWR5KXtcclxuICAgICAgb25SZWFkeSgpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcmVtb3ZlT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6ICgoKSA9PiB2b2lkKSk6dm9pZCB7XHJcbiAgICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnM9dGhpcy5vblJlYWR5TGlzdGVuZXJzLmZpbHRlcigob3IpPT5vciE9PW9uUmVhZHkpO1xyXG4gIH1cclxuXHJcbiAgcmVhZHkoKTp2b2lke1xyXG4gICAgdGhpcy5fcmVhZHk9dHJ1ZTtcclxuICAgIGZvcihsZXQgb25SZWFkeSBvZiB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMpe1xyXG4gICAgICBvblJlYWR5LmNhbGwodGhpcyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhYnN0cmFjdCBhc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTogQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGw7XHJcblxyXG4gIGFic3RyYWN0IGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG5cclxuICBhYnN0cmFjdCAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IGZyYW1lTGVuKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyO1xyXG5cclxuICBhYnN0cmFjdCByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSA7XHJcblxyXG4gIGFic3RyYWN0IHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPiA7XHJcblxyXG4gIGFic3RyYWN0IHNhbXBsZUNvdW50cygpOiBudW1iZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldCBzYW1wbGVSYXRlKCk6IG51bWJlcjtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvQnVmZmVyU291cmNlIGV4dGVuZHMgQmFzaWNBdWRpb1NvdXJjZXtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9kdXJhdGlvbjpudW1iZXI7XHJcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBfYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICAgIHN1cGVyKCk7XHJcbiAgICB0aGlzLl9kdXJhdGlvbj10aGlzLl9hdWRpb0J1ZmZlci5sZW5ndGgvdGhpcy5fYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIHRoaXMucmVhZHkoKTtcclxuICB9XHJcblxyXG4gIGdldCBhdWRpb0J1ZmZlcigpOiBBdWRpb0J1ZmZlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXI7XHJcbiAgfVxyXG5cclxuICBnZXQgZHVyYXRpb24oKTogbnVtYmVyIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gICAgfVxyXG4gICAgZ2V0IHNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIuc2FtcGxlUmF0ZTtcclxuICAgIH1cclxuICAgIGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyLm51bWJlck9mQ2hhbm5lbHM7XHJcbiAgICB9XHJcbiAgICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIubGVuZ3RoO1xyXG4gICAgfVxyXG4gICAgc2FtcGxlQ291bnRzKCk6IG51bWJlciB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzKnRoaXMuX2F1ZGlvQnVmZmVyLmxlbmd0aDtcclxuICAgIH1cclxuICAgIGF1ZGlvSW5wdXRTdHJlYW0oKTogRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbmV3IEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYXVkaW9CdWZmZXIpO1xyXG4gICAgfVxyXG4gICAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsIHtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHJlbGVhc2VBdWRpb0RhdGEoKTogT2JzZXJ2YWJsZTx2b2lkPiB7XHJcbiAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICByYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSgpOiBSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbSB7XHJcbiAgICByZXR1cm4gbmV3IFJhbmRvbUFjY2Vzc0F1ZGlvQnVmZmVyU3RyZWFtKHRoaXMuX2F1ZGlvQnVmZmVyKTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcbiAgZnJhbWVzT2JzKGZyYW1lUG9zOm51bWJlcixmcmFtZUxlbjpudW1iZXIsYnVmczpGbG9hdDMyQXJyYXlbXSk6T2JzZXJ2YWJsZTxudW1iZXI+O1xyXG4gIGNsb3NlKCk6dm9pZDtcclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvRGF0YUhvbGRlcntcclxuICBnZXQgYXVkaW9Tb3VyY2UoKTogQXVkaW9Tb3VyY2UgfCBudWxsIHtcclxuICAgIHJldHVybiB0aGlzLl9hdWRpb1NvdXJjZTtcclxuICB9XHJcbiAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZHVyYXRpb247XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IF9udW1iZXJPZkNoYW5uZWxzOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX3NhbXBsZVJhdGU6bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZnJhbWVMZW46bnVtYmVyPTA7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246bnVtYmVyPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1ZGlvU291cmNlOkF1ZGlvU291cmNlfG51bGwpIHtcclxuICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKSB7XHJcbiAgICAgIHRoaXMuX251bWJlck9mQ2hhbm5lbHMgPSB0aGlzLl9hdWRpb1NvdXJjZS5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgICB0aGlzLl9zYW1wbGVSYXRlID0gdGhpcy5fYXVkaW9Tb3VyY2Uuc2FtcGxlUmF0ZTtcclxuICAgICAgdGhpcy5fZnJhbWVMZW4gPSB0aGlzLl9hdWRpb1NvdXJjZS5mcmFtZUxlbjtcclxuICAgICAgdGhpcy5fZHVyYXRpb24gPSB0aGlzLl9mcmFtZUxlbiAvIHRoaXMuX3NhbXBsZVJhdGU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhZGRPblJlYWR5TGlzdGVuZXIob25SZWFkeTooKCk9PnZvaWQpfG51bGwpOnZvaWR7XHJcbiAgICB0aGlzLl9hdWRpb1NvdXJjZT8uYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHkpO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHNhbXBsZVJhdGUoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9zYW1wbGVSYXRlO1xyXG4gIH1cclxuICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX251bWJlck9mQ2hhbm5lbHM7XHJcbiAgfVxyXG5cclxuICBnZXQgZnJhbWVMZW4oKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIHNhbXBsZUNvdW50cygpOm51bWJlcntcclxuICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkNoYW5uZWxzKnRoaXMuX2ZyYW1lTGVuO1xyXG4gIH1cclxuXHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTpSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbXtcclxuXHJcbiAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKXtcclxuICAgICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UucmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTtcclxuICAgICAgfWVsc2Uge1xyXG4gICAgICAgIHRocm93IEVycm9yKCdObyBhdWRpbyBzb3VyY2Ugc2V0Jyk7XHJcbiAgICAgIH1cclxuICB9XHJcblxyXG5cclxuICAvLyBwcml2YXRlIGZyYW1lcyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOm51bWJlcntcclxuICAvLyAgIGxldCByZWFkPTA7XHJcbiAgLy8gICBpZih0aGlzLl9idWZmZXIpe1xyXG4gIC8vICAgICBsZXQgdG9SZWFkPWZyYW1lTGVuO1xyXG4gIC8vICAgICBpZih0aGlzLl9idWZmZXIubGVuZ3RoPGZyYW1lUG9zK2ZyYW1lTGVuKXtcclxuICAvLyAgICAgICB0b1JlYWQ9dGhpcy5fYnVmZmVyLmxlbmd0aC1mcmFtZVBvcztcclxuICAvLyAgICAgfVxyXG4gIC8vICAgICBmb3IobGV0IGNoPTA7Y2g8YnVmcy5sZW5ndGg7Y2grKyl7XHJcbiAgLy8gICAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gIC8vICAgICAgIGZvcihsZXQgaT0wO2k8dG9SZWFkO2krKyl7XHJcbiAgLy8gICAgICAgICBidWZzW2NoXVtpXT1jaERhdGFbZnJhbWVQb3MraV07XHJcbiAgLy8gICAgICAgfVxyXG4gIC8vICAgICB9XHJcbiAgLy8gICAgIHJlYWQ9dG9SZWFkO1xyXG4gIC8vICAgfWVsc2UgaWYodGhpcy5fYXJyYXlCdWZmZXIpe1xyXG4gIC8vICAgICByZWFkPXRoaXMuX2FycmF5QnVmZmVyLmZyYW1lcyhmcmFtZVBvcyxmcmFtZUxlbixidWZzKTtcclxuICAvLyAgIH1cclxuICAvLyAgIHJldHVybiByZWFkO1xyXG4gIC8vIH1cclxuXHJcbiAgYXVkaW9JbnB1dFN0cmVhbSgpOkZsb2F0MzJBcnJheUlucHV0U3RyZWFtfG51bGx7XHJcbiAgICAvLyBpZih0aGlzLl9idWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYnVmZmVyKTtcclxuICAgIC8vIH1cclxuICAgIC8vIGlmKHRoaXMuX2FycmF5QnVmZmVyKXtcclxuICAgIC8vICAgcmV0dXJuIG5ldyBBcnJheUF1ZGlvQnVmZmVySW5wdXRTdHJlYW0odGhpcy5fYXJyYXlCdWZmZXIpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIG51bGw7XHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UuYXVkaW9JbnB1dFN0cmVhbSgpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW18bnVsbHtcclxuICAgIC8vIGlmKHRoaXMuX2luZGRiQXVkaW9CdWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IEluZGV4ZWREYkF1ZGlvSW5wdXRTdHJlYW0odGhpcy5faW5kZGJBdWRpb0J1ZmZlcik7XHJcbiAgICAvLyB9ZWxzZSBpZih0aGlzLl9uZXRBdWRpb0J1ZmZlcil7XHJcbiAgICAvLyAgIHJldHVybiBuZXcgTmV0QXVkaW9JbnB1dFN0cmVhbSh0aGlzLl9uZXRBdWRpb0J1ZmZlcik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyByZXR1cm4gbnVsbDtcclxuXHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2UuYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk7XHJcbiAgICB9ZWxzZXtcclxuICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvLyBnZXQgYnVmZmVyKCk6IEF1ZGlvQnVmZmVyIHwgbnVsbCB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBhcnJheUJ1ZmZlcigpOiBBcnJheUF1ZGlvQnVmZmVyIHwgbnVsbCB7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5fYXJyYXlCdWZmZXI7XHJcbiAgLy8gfVxyXG4gIC8vXHJcbiAgLy8gZ2V0IGluZGRiQnVmZmVyKCk6SW5kZXhlZERiQXVkaW9CdWZmZXJ8bnVsbHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBuZXRCdWZmZXIoKTpOZXRBdWRpb0J1ZmZlcnxudWxse1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX25ldEF1ZGlvQnVmZmVyO1xyXG4gIC8vIH1cclxuXHJcbiAgcmVsZWFzZUF1ZGlvRGF0YSgpOk9ic2VydmFibGU8dm9pZD57XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8dm9pZD4oc3Vic2NyaWJlciA9PiB7XHJcbiAgICAgIC8vaWYgKHRoaXMuX2F1ZGlvU291cmNlIGluc3RhbmNlb2YgIEluZGV4ZWREYkF1ZGlvQnVmZmVyKSB7XHJcbiAgICAgIGlmKHRoaXMuX2F1ZGlvU291cmNlKSB7XHJcbiAgICAgICAgdGhpcy5fYXVkaW9Tb3VyY2UucmVsZWFzZUF1ZGlvRGF0YSgpLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAgICAgfSxcclxuICAgICAgICAgIGNvbXBsZXRlOiAoKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuX2F1ZGlvU291cmNlID0gbnVsbDtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICAgICAgfSwgZXJyb3I6IChlcnIpID0+IHtcclxuICAgICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9ZWxzZXtcclxuICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gfWVsc2V7XHJcbiAgICAgIC8vICAgLy8gT3RoZXJzIGhhdmUgbm8gcGVyc2lzdGVudCByZXNwZWN0aXZlbHkgYXN5bmMgZGVsZXRhYmxlIHN0b3JhZ2UsIHRoZXkgc2hvdWxkIGJlIGZpbmFsbHkgcmVtb3ZlZCBieSB0aGUgR0NcclxuICAgICAgLy8gICAvL3RoaXMuX2J1ZmZlcj1udWxsO1xyXG4gICAgICAvLyAgIC8vdGhpcy5fYXJyYXlCdWZmZXI9bnVsbDtcclxuICAgICAgLy8gICB0aGlzLl9hdWRpb1NvdXJjZT1udWxsO1xyXG4gICAgICAvLyAgIHN1YnNjcmliZXIubmV4dCgpO1xyXG4gICAgICAvLyAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgLy8gfVxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFJhbmRvbUFjY2Vzc0F1ZGlvQnVmZmVyU3RyZWFtIGltcGxlbWVudHMgUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2J1ZmZlcjpBdWRpb0J1ZmZlcikge1xyXG4gIH1cclxuXHJcbiAgY2xvc2UoKTogdm9pZCB7XHJcbiAgfVxyXG5cclxuICBmcmFtZXNPYnMoZnJhbWVQb3M6IG51bWJlciwgZnJhbWVMZW46IG51bWJlciwgYnVmczogRmxvYXQzMkFycmF5W10pOiBPYnNlcnZhYmxlPG51bWJlcj4ge1xyXG5cclxuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxudW1iZXI+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICBsZXQgcmVhZD0wO1xyXG4gICAgICAgIGxldCB0b1JlYWQ9ZnJhbWVMZW47XHJcbiAgICAgICAgaWYodGhpcy5fYnVmZmVyLmxlbmd0aDxmcmFtZVBvcytmcmFtZUxlbil7XHJcbiAgICAgICAgICB0b1JlYWQ9dGhpcy5fYnVmZmVyLmxlbmd0aC1mcmFtZVBvcztcclxuICAgICAgICB9XHJcbiAgICAgICAgZm9yKGxldCBjaD0wO2NoPGJ1ZnMubGVuZ3RoO2NoKyspe1xyXG4gICAgICAgICAgbGV0IGNoRGF0YT10aGlzLl9idWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpO1xyXG4gICAgICAgICAgZm9yKGxldCBpPTA7aTx0b1JlYWQ7aSsrKXtcclxuICAgICAgICAgICAgYnVmc1tjaF1baV09Y2hEYXRhW2ZyYW1lUG9zK2ldO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZWFkPXRvUmVhZDtcclxuXHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KHJlYWQpO1xyXG4gICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIEF1ZGlvQnVmZmVySW5wdXRTdHJlYW0gaW1wbGVtZW50cyBGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXtcclxuICBwcml2YXRlIGZyYW1lUG9zPTA7XHJcblxyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgYXVkaW9CdWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgc2tpcEZyYW1lcyhuOiBudW1iZXIpIHtcclxuICAgIHRoaXMuZnJhbWVQb3MrPW47XHJcbiAgfVxyXG5cclxuICByZWFkKGJ1ZmZlcnM6IEFycmF5PEZsb2F0MzJBcnJheT4pOiBudW1iZXIge1xyXG4gICAgbGV0IHJlYWQ9MDtcclxuICAgIGxldCB0b1JlYWQ9YnVmZmVyc1swXS5sZW5ndGg7XHJcbiAgICBpZih0aGlzLmZyYW1lUG9zK3RvUmVhZD50aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aCl7XHJcbiAgICAgIHRvUmVhZD10aGlzLmF1ZGlvQnVmZmVyLmxlbmd0aC10aGlzLmZyYW1lUG9zO1xyXG4gICAgfVxyXG4gICAgZm9yKGxldCBjaD0wO2NoPGJ1ZmZlcnMubGVuZ3RoO2NoKyspIHtcclxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0b1JlYWQ7IGkrKykge1xyXG4gICAgICAgIGJ1ZmZlcnNbY2hdW2ldPXRoaXMuYXVkaW9CdWZmZXIuZ2V0Q2hhbm5lbERhdGEoY2gpW3RoaXMuZnJhbWVQb3MraV07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJlYWQ9dG9SZWFkO1xyXG4gICAgdGhpcy5mcmFtZVBvcys9dG9SZWFkO1xyXG4gICAgcmV0dXJuIHJlYWQ7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|