speechrecorderng 3.6.1 → 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 +113 -113
- 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 -16514
- 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 -80
- 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 -109
- 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 -129
- 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 -416
- 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 -1386
- 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 -17768
- package/fesm2015/speechrecorderng.mjs.map +0 -1
- package/fesm2020/speechrecorderng.mjs.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { Observable } from "rxjs";
|
|
2
|
-
export class ArrayAudioBufferRandomAccessStream {
|
|
3
|
-
constructor(_arrayBuffer) {
|
|
4
|
-
this._arrayBuffer = _arrayBuffer;
|
|
5
|
-
}
|
|
6
|
-
close() {
|
|
7
|
-
}
|
|
8
|
-
framesObs(framePos, frameLen, bufs) {
|
|
9
|
-
return new Observable(subscriber => {
|
|
10
|
-
let read = this._arrayBuffer.frames(framePos, frameLen, bufs);
|
|
11
|
-
subscriber.next(read);
|
|
12
|
-
subscriber.complete();
|
|
13
|
-
});
|
|
14
|
-
}
|
|
15
|
-
}
|
|
1
|
+
import { Observable } from "rxjs";
|
|
2
|
+
export class ArrayAudioBufferRandomAccessStream {
|
|
3
|
+
constructor(_arrayBuffer) {
|
|
4
|
+
this._arrayBuffer = _arrayBuffer;
|
|
5
|
+
}
|
|
6
|
+
close() {
|
|
7
|
+
}
|
|
8
|
+
framesObs(framePos, frameLen, bufs) {
|
|
9
|
+
return new Observable(subscriber => {
|
|
10
|
+
let read = this._arrayBuffer.frames(framePos, frameLen, bufs);
|
|
11
|
+
subscriber.next(read);
|
|
12
|
+
subscriber.complete();
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
16
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJyYXlfYXVkaW9fYnVmZmVyX3JhbmRvbV9hY2Nlc3Nfc3RyZWFtLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc3BlZWNocmVjb3JkZXJuZy9zcmMvbGliL2F1ZGlvL2FycmF5X2F1ZGlvX2J1ZmZlcl9yYW5kb21fYWNjZXNzX3N0cmVhbS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFFQSxPQUFPLEVBQUMsVUFBVSxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBQ2hDLE1BQU0sT0FBTyxrQ0FBa0M7SUFFN0MsWUFBb0IsWUFBNkI7UUFBN0IsaUJBQVksR0FBWixZQUFZLENBQWlCO0lBQ2pELENBQUM7SUFFRCxLQUFLO0lBQ0wsQ0FBQztJQUVELFNBQVMsQ0FBQyxRQUFnQixFQUFFLFFBQWdCLEVBQUUsSUFBb0I7UUFDaEUsT0FBTyxJQUFJLFVBQVUsQ0FBUyxVQUFVLENBQUMsRUFBRTtZQUN6QyxJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlELFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDdEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3hCLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtBcnJheUF1ZGlvQnVmZmVyfSBmcm9tIFwiLi9hcnJheV9hdWRpb19idWZmZXJcIjtcclxuaW1wb3J0IHtSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbX0gZnJvbSBcIi4vYXVkaW9fZGF0YV9ob2xkZXJcIjtcclxuaW1wb3J0IHtPYnNlcnZhYmxlfSBmcm9tIFwicnhqc1wiO1xyXG5leHBvcnQgY2xhc3MgQXJyYXlBdWRpb0J1ZmZlclJhbmRvbUFjY2Vzc1N0cmVhbSBpbXBsZW1lbnRzIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFte1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hcnJheUJ1ZmZlcjpBcnJheUF1ZGlvQnVmZmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIGZyYW1lc09icyhmcmFtZVBvczogbnVtYmVyLCBmcmFtZUxlbjogbnVtYmVyLCBidWZzOiBGbG9hdDMyQXJyYXlbXSk6IE9ic2VydmFibGU8bnVtYmVyPiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8bnVtYmVyPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgbGV0IHJlYWQgPSB0aGlzLl9hcnJheUJ1ZmZlci5mcmFtZXMoZnJhbWVQb3MsIGZyYW1lTGVuLCBidWZzKTtcclxuICAgICAgc3Vic2NyaWJlci5uZXh0KHJlYWQpO1xyXG4gICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuIl19
|
|
@@ -0,0 +1,264 @@
|
|
|
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
|
+
get audioSource() {
|
|
78
|
+
return this._audioSource;
|
|
79
|
+
}
|
|
80
|
+
get duration() {
|
|
81
|
+
return this._duration;
|
|
82
|
+
}
|
|
83
|
+
constructor(_audioSource) {
|
|
84
|
+
this._audioSource = _audioSource;
|
|
85
|
+
this._numberOfChannels = 0;
|
|
86
|
+
this._sampleRate = 0;
|
|
87
|
+
this._frameLen = 0;
|
|
88
|
+
this._duration = 0;
|
|
89
|
+
if (this._audioSource) {
|
|
90
|
+
this._numberOfChannels = this._audioSource.numberOfChannels;
|
|
91
|
+
this._sampleRate = this._audioSource.sampleRate;
|
|
92
|
+
this._frameLen = this._audioSource.frameLen;
|
|
93
|
+
this._duration = this._frameLen / this._sampleRate;
|
|
94
|
+
}
|
|
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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LENBQUMsQ0FBQztJQUduQixDQUFDO0lBRUQsS0FBSztJQUNMLENBQUM7SUFFRCxVQUFVLENBQUMsQ0FBUztRQUNsQixJQUFJLENBQUMsUUFBUSxJQUFFLENBQUMsQ0FBQztJQUNuQixDQUFDO0lBRUQsSUFBSSxDQUFDLE9BQTRCO1FBQy9CLElBQUksSUFBSSxHQUFDLENBQUMsQ0FBQztRQUNYLElBQUksTUFBTSxHQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUM7UUFDN0IsSUFBRyxJQUFJLENBQUMsUUFBUSxHQUFDLE1BQU0sR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBQztZQUM5QyxNQUFNLEdBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztTQUM5QztRQUNELEtBQUksSUFBSSxFQUFFLEdBQUMsQ0FBQyxFQUFDLEVBQUUsR0FBQyxPQUFPLENBQUMsTUFBTSxFQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQy9CLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxHQUFDLENBQUMsQ0FBQyxDQUFDO2FBQ3JFO1NBQ0Y7UUFDRCxJQUFJLEdBQUMsTUFBTSxDQUFDO1FBQ1osSUFBSSxDQUFDLFFBQVEsSUFBRSxNQUFNLENBQUM7UUFDdEIsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0FzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0sIEZsb2F0MzJBcnJheUlucHV0U3RyZWFtfSBmcm9tIFwiLi4vaW8vc3RyZWFtXCI7XHJcbmltcG9ydCB7T2JzZXJ2YWJsZX0gZnJvbSBcInJ4anNcIjtcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXVkaW9Tb3VyY2Uge1xyXG4gIGdldCBkdXJhdGlvbigpOm51bWJlcjtcclxuICBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXI7XHJcbiAgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyO1xyXG4gIGdldCBmcmFtZUxlbigpOiBudW1iZXI7XHJcbiAgc2FtcGxlQ291bnRzKCk6IG51bWJlcjtcclxuICBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbDtcclxuICBhc3luY0F1ZGlvSW5wdXRTdHJlYW0oKTogQXN5bmNGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbSB8IG51bGw7XHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTpSYW5kb21BY2Nlc3NBdWRpb1N0cmVhbTtcclxuICByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD47XHJcbiAgYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6KCgpPT52b2lkKXxudWxsKTp2b2lkO1xyXG4gIHJlbW92ZU9uUmVhZHlMaXN0ZW5lcihvblJlYWR5OigoKT0+dm9pZCl8bnVsbCk6dm9pZDtcclxuICByZWFkeSgpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNpY0F1ZGlvU291cmNlIGltcGxlbWVudHMgQXVkaW9Tb3VyY2V7XHJcbiAgcHJvdGVjdGVkIF9yZWFkeTpib29sZWFuPWZhbHNlO1xyXG4gIHByb3RlY3RlZCBvblJlYWR5TGlzdGVuZXJzOkFycmF5PCgoKSA9PiB2b2lkKT49bmV3IEFycmF5PCgpID0+IHZvaWQ+KCk7XHJcblxyXG4gIGFkZE9uUmVhZHlMaXN0ZW5lcihvblJlYWR5OiAoKCkgPT4gdm9pZCkpOiB2b2lkIHtcclxuICAgIC8vIGxldCBhbHJlYWR5QWRkZWQ9ZmFsc2U7XHJcbiAgICAvLyBmb3IobGV0IG9yIG9mIHRoaXMub25SZWFkeUxpc3RlbmVycyl7XHJcbiAgICAvLyAgIGlmKG9yPT09b25SZWFkeSl7XHJcbiAgICAvLyAgICAgYWxyZWFkeUFkZGVkPXRydWU7XHJcbiAgICAvLyAgICAgYnJlYWs7XHJcbiAgICAvLyAgIH1cclxuICAgIC8vIH1cclxuICAgIC8vIGlmKCFhbHJlYWR5QWRkZWQpIHtcclxuICAgIC8vICAgdGhpcy5vblJlYWR5TGlzdGVuZXJzLnB1c2gob25SZWFkeSk7XHJcbiAgICAvLyB9XHJcblxyXG4gICAgaWYoISAodGhpcy5vblJlYWR5TGlzdGVuZXJzLmZpbmQoKG9yKT0+b3I9PT1vblJlYWR5KSkpe1xyXG4gICAgICB0aGlzLm9uUmVhZHlMaXN0ZW5lcnMucHVzaChvblJlYWR5KTtcclxuICAgIH1cclxuXHJcbiAgICBpZih0aGlzLl9yZWFkeSl7XHJcbiAgICAgIG9uUmVhZHkoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHJlbW92ZU9uUmVhZHlMaXN0ZW5lcihvblJlYWR5OiAoKCkgPT4gdm9pZCkpOnZvaWQge1xyXG4gICAgdGhpcy5vblJlYWR5TGlzdGVuZXJzPXRoaXMub25SZWFkeUxpc3RlbmVycy5maWx0ZXIoKG9yKT0+b3IhPT1vblJlYWR5KTtcclxuICB9XHJcblxyXG4gIHJlYWR5KCk6dm9pZHtcclxuICAgIHRoaXMuX3JlYWR5PXRydWU7XHJcbiAgICBmb3IobGV0IG9uUmVhZHkgb2YgdGhpcy5vblJlYWR5TGlzdGVuZXJzKXtcclxuICAgICAgb25SZWFkeS5jYWxsKHRoaXMpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWJzdHJhY3QgYXN5bmNBdWRpb0lucHV0U3RyZWFtKCk6IEFzeW5jRmxvYXQzMkFycmF5SW5wdXRTdHJlYW0gfCBudWxsO1xyXG5cclxuICBhYnN0cmFjdCBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbDtcclxuXHJcbiAgYWJzdHJhY3QgIGdldCBkdXJhdGlvbigpOiBudW1iZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldCBmcmFtZUxlbigpOiBudW1iZXI7XHJcblxyXG4gIGFic3RyYWN0IGdldCBudW1iZXJPZkNoYW5uZWxzKCk6IG51bWJlcjtcclxuXHJcbiAgYWJzdHJhY3QgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTogUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0gO1xyXG5cclxuICBhYnN0cmFjdCByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD4gO1xyXG5cclxuICBhYnN0cmFjdCBzYW1wbGVDb3VudHMoKTogbnVtYmVyO1xyXG5cclxuICBhYnN0cmFjdCBnZXQgc2FtcGxlUmF0ZSgpOiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0J1ZmZlclNvdXJjZSBleHRlbmRzIEJhc2ljQXVkaW9Tb3VyY2V7XHJcbiAgcHJpdmF0ZSByZWFkb25seSBfZHVyYXRpb246bnVtYmVyO1xyXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgX2F1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKSB7XHJcbiAgICBzdXBlcigpO1xyXG4gICAgdGhpcy5fZHVyYXRpb249dGhpcy5fYXVkaW9CdWZmZXIubGVuZ3RoL3RoaXMuX2F1ZGlvQnVmZmVyLnNhbXBsZVJhdGU7XHJcbiAgICB0aGlzLnJlYWR5KCk7XHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9CdWZmZXIoKTogQXVkaW9CdWZmZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGR1cmF0aW9uKCk6IG51bWJlciB7XHJcbiAgICAgIHJldHVybiB0aGlzLl9kdXJhdGlvbjtcclxuICAgIH1cclxuICAgIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyLnNhbXBsZVJhdGU7XHJcbiAgICB9XHJcbiAgICBnZXQgbnVtYmVyT2ZDaGFubmVscygpOiBudW1iZXIge1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9hdWRpb0J1ZmZlci5udW1iZXJPZkNoYW5uZWxzO1xyXG4gICAgfVxyXG4gICAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlciB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvQnVmZmVyLmxlbmd0aDtcclxuICAgIH1cclxuICAgIHNhbXBsZUNvdW50cygpOiBudW1iZXIge1xyXG4gICAgICByZXR1cm4gdGhpcy5fYXVkaW9CdWZmZXIubnVtYmVyT2ZDaGFubmVscyp0aGlzLl9hdWRpb0J1ZmZlci5sZW5ndGg7XHJcbiAgICB9XHJcbiAgICBhdWRpb0lucHV0U3RyZWFtKCk6IEZsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIG5ldyBBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2F1ZGlvQnVmZmVyKTtcclxuICAgIH1cclxuICAgIGFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpOiBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtIHwgbnVsbCB7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcbiAgICByZWxlYXNlQXVkaW9EYXRhKCk6IE9ic2VydmFibGU8dm9pZD4ge1xyXG4gICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgcmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0oKTogUmFuZG9tQWNjZXNzQXVkaW9TdHJlYW0ge1xyXG4gICAgcmV0dXJuIG5ldyBSYW5kb21BY2Nlc3NBdWRpb0J1ZmZlclN0cmVhbSh0aGlzLl9hdWRpb0J1ZmZlcik7XHJcbiAgfVxyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFte1xyXG4gIGZyYW1lc09icyhmcmFtZVBvczpudW1iZXIsZnJhbWVMZW46bnVtYmVyLGJ1ZnM6RmxvYXQzMkFycmF5W10pOk9ic2VydmFibGU8bnVtYmVyPjtcclxuICBjbG9zZSgpOnZvaWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0RhdGFIb2xkZXJ7XHJcbiAgZ2V0IGF1ZGlvU291cmNlKCk6IEF1ZGlvU291cmNlIHwgbnVsbCB7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9Tb3VyY2U7XHJcbiAgfVxyXG4gIGdldCBkdXJhdGlvbigpOiBudW1iZXIge1xyXG4gICAgcmV0dXJuIHRoaXMuX2R1cmF0aW9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZWFkb25seSBfbnVtYmVyT2ZDaGFubmVsczpudW1iZXI9MDtcclxuICBwcml2YXRlIHJlYWRvbmx5IF9zYW1wbGVSYXRlOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2ZyYW1lTGVuOm51bWJlcj0wO1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgX2R1cmF0aW9uOm51bWJlcj0wO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9hdWRpb1NvdXJjZTpBdWRpb1NvdXJjZXxudWxsKSB7XHJcbiAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICB0aGlzLl9udW1iZXJPZkNoYW5uZWxzID0gdGhpcy5fYXVkaW9Tb3VyY2UubnVtYmVyT2ZDaGFubmVscztcclxuICAgICAgdGhpcy5fc2FtcGxlUmF0ZSA9IHRoaXMuX2F1ZGlvU291cmNlLnNhbXBsZVJhdGU7XHJcbiAgICAgIHRoaXMuX2ZyYW1lTGVuID0gdGhpcy5fYXVkaW9Tb3VyY2UuZnJhbWVMZW47XHJcbiAgICAgIHRoaXMuX2R1cmF0aW9uID0gdGhpcy5fZnJhbWVMZW4gLyB0aGlzLl9zYW1wbGVSYXRlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWRkT25SZWFkeUxpc3RlbmVyKG9uUmVhZHk6KCgpPT52b2lkKXxudWxsKTp2b2lke1xyXG4gICAgdGhpcy5fYXVkaW9Tb3VyY2U/LmFkZE9uUmVhZHlMaXN0ZW5lcihvblJlYWR5KTtcclxuICB9XHJcblxyXG4gIGdldCBzYW1wbGVSYXRlKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fc2FtcGxlUmF0ZTtcclxuICB9XHJcbiAgZ2V0IG51bWJlck9mQ2hhbm5lbHMoKTogbnVtYmVyIHtcclxuICAgIHJldHVybiB0aGlzLl9udW1iZXJPZkNoYW5uZWxzO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGZyYW1lTGVuKCk6IG51bWJlciB7XHJcbiAgICByZXR1cm4gdGhpcy5fZnJhbWVMZW47XHJcbiAgfVxyXG5cclxuICBzYW1wbGVDb3VudHMoKTpudW1iZXJ7XHJcbiAgICByZXR1cm4gdGhpcy5fbnVtYmVyT2ZDaGFubmVscyp0aGlzLl9mcmFtZUxlbjtcclxuICB9XHJcblxyXG4gIHJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtKCk6UmFuZG9tQWNjZXNzQXVkaW9TdHJlYW17XHJcblxyXG4gICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSl7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlLnJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFtKCk7XHJcbiAgICAgIH1lbHNlIHtcclxuICAgICAgICB0aHJvdyBFcnJvcignTm8gYXVkaW8gc291cmNlIHNldCcpO1xyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgLy8gcHJpdmF0ZSBmcmFtZXMoZnJhbWVQb3M6bnVtYmVyLGZyYW1lTGVuOm51bWJlcixidWZzOkZsb2F0MzJBcnJheVtdKTpudW1iZXJ7XHJcbiAgLy8gICBsZXQgcmVhZD0wO1xyXG4gIC8vICAgaWYodGhpcy5fYnVmZmVyKXtcclxuICAvLyAgICAgbGV0IHRvUmVhZD1mcmFtZUxlbjtcclxuICAvLyAgICAgaWYodGhpcy5fYnVmZmVyLmxlbmd0aDxmcmFtZVBvcytmcmFtZUxlbil7XHJcbiAgLy8gICAgICAgdG9SZWFkPXRoaXMuX2J1ZmZlci5sZW5ndGgtZnJhbWVQb3M7XHJcbiAgLy8gICAgIH1cclxuICAvLyAgICAgZm9yKGxldCBjaD0wO2NoPGJ1ZnMubGVuZ3RoO2NoKyspe1xyXG4gIC8vICAgICAgIGxldCBjaERhdGE9dGhpcy5fYnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKTtcclxuICAvLyAgICAgICBmb3IobGV0IGk9MDtpPHRvUmVhZDtpKyspe1xyXG4gIC8vICAgICAgICAgYnVmc1tjaF1baV09Y2hEYXRhW2ZyYW1lUG9zK2ldO1xyXG4gIC8vICAgICAgIH1cclxuICAvLyAgICAgfVxyXG4gIC8vICAgICByZWFkPXRvUmVhZDtcclxuICAvLyAgIH1lbHNlIGlmKHRoaXMuX2FycmF5QnVmZmVyKXtcclxuICAvLyAgICAgcmVhZD10aGlzLl9hcnJheUJ1ZmZlci5mcmFtZXMoZnJhbWVQb3MsZnJhbWVMZW4sYnVmcyk7XHJcbiAgLy8gICB9XHJcbiAgLy8gICByZXR1cm4gcmVhZDtcclxuICAvLyB9XHJcblxyXG4gIGF1ZGlvSW5wdXRTdHJlYW0oKTpGbG9hdDMyQXJyYXlJbnB1dFN0cmVhbXxudWxse1xyXG4gICAgLy8gaWYodGhpcy5fYnVmZmVyKXtcclxuICAgIC8vICAgcmV0dXJuIG5ldyBBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2J1ZmZlcik7XHJcbiAgICAvLyB9XHJcbiAgICAvLyBpZih0aGlzLl9hcnJheUJ1ZmZlcil7XHJcbiAgICAvLyAgIHJldHVybiBuZXcgQXJyYXlBdWRpb0J1ZmZlcklucHV0U3RyZWFtKHRoaXMuX2FycmF5QnVmZmVyKTtcclxuICAgIC8vIH1cclxuICAgIC8vIHJldHVybiBudWxsO1xyXG4gICAgaWYodGhpcy5fYXVkaW9Tb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlLmF1ZGlvSW5wdXRTdHJlYW0oKTtcclxuICAgIH1lbHNle1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpOiBBc3luY0Zsb2F0MzJBcnJheUlucHV0U3RyZWFtfG51bGx7XHJcbiAgICAvLyBpZih0aGlzLl9pbmRkYkF1ZGlvQnVmZmVyKXtcclxuICAgIC8vICAgcmV0dXJuIG5ldyBJbmRleGVkRGJBdWRpb0lucHV0U3RyZWFtKHRoaXMuX2luZGRiQXVkaW9CdWZmZXIpO1xyXG4gICAgLy8gfWVsc2UgaWYodGhpcy5fbmV0QXVkaW9CdWZmZXIpe1xyXG4gICAgLy8gICByZXR1cm4gbmV3IE5ldEF1ZGlvSW5wdXRTdHJlYW0odGhpcy5fbmV0QXVkaW9CdWZmZXIpO1xyXG4gICAgLy8gfVxyXG4gICAgLy8gcmV0dXJuIG51bGw7XHJcblxyXG4gICAgaWYodGhpcy5fYXVkaW9Tb3VyY2UpIHtcclxuICAgICAgcmV0dXJuIHRoaXMuX2F1ZGlvU291cmNlLmFzeW5jQXVkaW9JbnB1dFN0cmVhbSgpO1xyXG4gICAgfWVsc2V7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLy8gZ2V0IGJ1ZmZlcigpOiBBdWRpb0J1ZmZlciB8IG51bGwge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2J1ZmZlcjtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBnZXQgYXJyYXlCdWZmZXIoKTogQXJyYXlBdWRpb0J1ZmZlciB8IG51bGwge1xyXG4gIC8vICAgcmV0dXJuIHRoaXMuX2FycmF5QnVmZmVyO1xyXG4gIC8vIH1cclxuICAvL1xyXG4gIC8vIGdldCBpbmRkYkJ1ZmZlcigpOkluZGV4ZWREYkF1ZGlvQnVmZmVyfG51bGx7XHJcbiAgLy8gICByZXR1cm4gdGhpcy5faW5kZGJBdWRpb0J1ZmZlcjtcclxuICAvLyB9XHJcbiAgLy9cclxuICAvLyBnZXQgbmV0QnVmZmVyKCk6TmV0QXVkaW9CdWZmZXJ8bnVsbHtcclxuICAvLyAgIHJldHVybiB0aGlzLl9uZXRBdWRpb0J1ZmZlcjtcclxuICAvLyB9XHJcblxyXG4gIHJlbGVhc2VBdWRpb0RhdGEoKTpPYnNlcnZhYmxlPHZvaWQ+e1xyXG4gICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlPHZvaWQ+KHN1YnNjcmliZXIgPT4ge1xyXG4gICAgICAvL2lmICh0aGlzLl9hdWRpb1NvdXJjZSBpbnN0YW5jZW9mICBJbmRleGVkRGJBdWRpb0J1ZmZlcikge1xyXG4gICAgICBpZih0aGlzLl9hdWRpb1NvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuX2F1ZGlvU291cmNlLnJlbGVhc2VBdWRpb0RhdGEoKS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgbmV4dDogKCkgPT4ge1xyXG4gICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBjb21wbGV0ZTogKCkgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLl9hdWRpb1NvdXJjZSA9IG51bGw7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTtcclxuICAgICAgICAgIH0sIGVycm9yOiAoZXJyKSA9PiB7XHJcbiAgICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfWVsc2V7XHJcbiAgICAgICAgc3Vic2NyaWJlci5uZXh0KCk7XHJcbiAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xyXG4gICAgICB9XHJcbiAgICAgIC8vIH1lbHNle1xyXG4gICAgICAvLyAgIC8vIE90aGVycyBoYXZlIG5vIHBlcnNpc3RlbnQgcmVzcGVjdGl2ZWx5IGFzeW5jIGRlbGV0YWJsZSBzdG9yYWdlLCB0aGV5IHNob3VsZCBiZSBmaW5hbGx5IHJlbW92ZWQgYnkgdGhlIEdDXHJcbiAgICAgIC8vICAgLy90aGlzLl9idWZmZXI9bnVsbDtcclxuICAgICAgLy8gICAvL3RoaXMuX2FycmF5QnVmZmVyPW51bGw7XHJcbiAgICAgIC8vICAgdGhpcy5fYXVkaW9Tb3VyY2U9bnVsbDtcclxuICAgICAgLy8gICBzdWJzY3JpYmVyLm5leHQoKTtcclxuICAgICAgLy8gICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICAgIC8vIH1cclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBSYW5kb21BY2Nlc3NBdWRpb0J1ZmZlclN0cmVhbSBpbXBsZW1lbnRzIFJhbmRvbUFjY2Vzc0F1ZGlvU3RyZWFte1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIF9idWZmZXI6QXVkaW9CdWZmZXIpIHtcclxuICB9XHJcblxyXG4gIGNsb3NlKCk6IHZvaWQge1xyXG4gIH1cclxuXHJcbiAgZnJhbWVzT2JzKGZyYW1lUG9zOiBudW1iZXIsIGZyYW1lTGVuOiBudW1iZXIsIGJ1ZnM6IEZsb2F0MzJBcnJheVtdKTogT2JzZXJ2YWJsZTxudW1iZXI+IHtcclxuXHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGU8bnVtYmVyPihzdWJzY3JpYmVyID0+IHtcclxuICAgICAgbGV0IHJlYWQ9MDtcclxuICAgICAgICBsZXQgdG9SZWFkPWZyYW1lTGVuO1xyXG4gICAgICAgIGlmKHRoaXMuX2J1ZmZlci5sZW5ndGg8ZnJhbWVQb3MrZnJhbWVMZW4pe1xyXG4gICAgICAgICAgdG9SZWFkPXRoaXMuX2J1ZmZlci5sZW5ndGgtZnJhbWVQb3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvcihsZXQgY2g9MDtjaDxidWZzLmxlbmd0aDtjaCsrKXtcclxuICAgICAgICAgIGxldCBjaERhdGE9dGhpcy5fYnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKTtcclxuICAgICAgICAgIGZvcihsZXQgaT0wO2k8dG9SZWFkO2krKyl7XHJcbiAgICAgICAgICAgIGJ1ZnNbY2hdW2ldPWNoRGF0YVtmcmFtZVBvcytpXTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmVhZD10b1JlYWQ7XHJcblxyXG4gICAgICAgIHN1YnNjcmliZXIubmV4dChyZWFkKTtcclxuICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7XHJcbiAgICB9KTtcclxuICB9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBBdWRpb0J1ZmZlcklucHV0U3RyZWFtIGltcGxlbWVudHMgRmxvYXQzMkFycmF5SW5wdXRTdHJlYW17XHJcbiAgcHJpdmF0ZSBmcmFtZVBvcz0wO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGF1ZGlvQnVmZmVyOkF1ZGlvQnVmZmVyKSB7XHJcbiAgfVxyXG5cclxuICBjbG9zZSgpOiB2b2lkIHtcclxuICB9XHJcblxyXG4gIHNraXBGcmFtZXMobjogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmZyYW1lUG9zKz1uO1xyXG4gIH1cclxuXHJcbiAgcmVhZChidWZmZXJzOiBBcnJheTxGbG9hdDMyQXJyYXk+KTogbnVtYmVyIHtcclxuICAgIGxldCByZWFkPTA7XHJcbiAgICBsZXQgdG9SZWFkPWJ1ZmZlcnNbMF0ubGVuZ3RoO1xyXG4gICAgaWYodGhpcy5mcmFtZVBvcyt0b1JlYWQ+dGhpcy5hdWRpb0J1ZmZlci5sZW5ndGgpe1xyXG4gICAgICB0b1JlYWQ9dGhpcy5hdWRpb0J1ZmZlci5sZW5ndGgtdGhpcy5mcmFtZVBvcztcclxuICAgIH1cclxuICAgIGZvcihsZXQgY2g9MDtjaDxidWZmZXJzLmxlbmd0aDtjaCsrKSB7XHJcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdG9SZWFkOyBpKyspIHtcclxuICAgICAgICBidWZmZXJzW2NoXVtpXT10aGlzLmF1ZGlvQnVmZmVyLmdldENoYW5uZWxEYXRhKGNoKVt0aGlzLmZyYW1lUG9zK2ldO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZWFkPXRvUmVhZDtcclxuICAgIHRoaXMuZnJhbWVQb3MrPXRvUmVhZDtcclxuICAgIHJldHVybiByZWFkO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -1,75 +1,74 @@
|
|
|
1
|
-
import { Component, ViewChild, Input, } from '@angular/core';
|
|
2
|
-
import { Action } from "../action/action";
|
|
3
|
-
import { AudioDisplayScrollPane } from "./ui/audio_display_scroll_pane";
|
|
4
|
-
import * as i0 from "@angular/core";
|
|
5
|
-
import * as i1 from "./ui/audio_display_scroll_pane";
|
|
6
|
-
import * as i2 from "./ui/audio_display_control";
|
|
7
|
-
export class AudioDisplay {
|
|
8
|
-
constructor(ref, eRef) {
|
|
9
|
-
this.ref = ref;
|
|
10
|
-
this.eRef = eRef;
|
|
11
|
-
this._audioClip = null;
|
|
12
|
-
//console.log("constructor: "+this.ac);
|
|
13
|
-
this.parentE = this.eRef.nativeElement;
|
|
14
|
-
this.playStartAction = new Action("Start");
|
|
15
|
-
this.playSelectionAction = new Action("Play selected");
|
|
16
|
-
this.playStopAction = new Action("Stop");
|
|
17
|
-
this.status = "Player created.";
|
|
18
|
-
}
|
|
19
|
-
ngOnInit() {
|
|
20
|
-
this.zoomSelectedAction = this.audioDisplayScrollPane.zoomSelectedAction;
|
|
21
|
-
this.zoomFitToPanelAction = this.audioDisplayScrollPane.zoomFitToPanelAction;
|
|
22
|
-
this.zoomOutAction = this.audioDisplayScrollPane.zoomOutAction;
|
|
23
|
-
this.zoomInAction = this.audioDisplayScrollPane.zoomInAction;
|
|
24
|
-
}
|
|
25
|
-
ngAfterViewInit() {
|
|
26
|
-
this.layout();
|
|
27
|
-
let heightListener = new MutationObserver((mrs, mo) => {
|
|
28
|
-
mrs.forEach((mr) => {
|
|
29
|
-
if ('attributes' === mr.type && ('class' === mr.attributeName || 'style' === mr.attributeName)) {
|
|
30
|
-
this.layout();
|
|
31
|
-
}
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
heightListener.observe(this.parentE, { attributes: true, childList: true, characterData: true });
|
|
35
|
-
}
|
|
36
|
-
layout() {
|
|
37
|
-
this.audioDisplayScrollPane.layout();
|
|
38
|
-
}
|
|
39
|
-
started() {
|
|
40
|
-
console.log("Play started");
|
|
41
|
-
this.status = 'Playing...';
|
|
42
|
-
}
|
|
43
|
-
set audioData(audioData) {
|
|
44
|
-
this.audioDisplayScrollPane.audioData = audioData;
|
|
45
|
-
if (this.playStartAction) {
|
|
46
|
-
console.debug("Play start action (by AudioDisplay::set audioData) disabled: " + (audioData == null));
|
|
47
|
-
this.playStartAction.disabled = (audioData == null);
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
set audioClip(audioClip) {
|
|
51
|
-
//let audioData:AudioBuffer|null=null;
|
|
52
|
-
let sel = null;
|
|
53
|
-
if (audioClip) {
|
|
54
|
-
//audioData=audioClip.audioDataHolder.buffer;
|
|
55
|
-
sel = audioClip.selection;
|
|
56
|
-
}
|
|
57
|
-
this._audioClip = audioClip;
|
|
58
|
-
this.audioDisplayScrollPane.audioClip = audioClip;
|
|
59
|
-
//this.playStartAction.disabled = (audioData!==null)
|
|
60
|
-
}
|
|
61
|
-
get audioClip() {
|
|
62
|
-
return this._audioClip;
|
|
63
|
-
}
|
|
64
|
-
set playFramePosition(playFramePosition) {
|
|
65
|
-
this.audioDisplayScrollPane.playFramePosition = playFramePosition;
|
|
66
|
-
}
|
|
67
|
-
error() {
|
|
68
|
-
this.status = 'ERROR';
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplay, selector: "app-audiodisplay", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
|
|
1
|
+
import { Component, ViewChild, Input, } from '@angular/core';
|
|
2
|
+
import { Action } from "../action/action";
|
|
3
|
+
import { AudioDisplayScrollPane } from "./ui/audio_display_scroll_pane";
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
import * as i1 from "./ui/audio_display_scroll_pane";
|
|
6
|
+
import * as i2 from "./ui/audio_display_control";
|
|
7
|
+
export class AudioDisplay {
|
|
8
|
+
constructor(ref, eRef) {
|
|
9
|
+
this.ref = ref;
|
|
10
|
+
this.eRef = eRef;
|
|
11
|
+
this._audioClip = null;
|
|
12
|
+
//console.log("constructor: "+this.ac);
|
|
13
|
+
this.parentE = this.eRef.nativeElement;
|
|
14
|
+
this.playStartAction = new Action("Start");
|
|
15
|
+
this.playSelectionAction = new Action("Play selected");
|
|
16
|
+
this.playStopAction = new Action("Stop");
|
|
17
|
+
this.status = "Player created.";
|
|
18
|
+
}
|
|
19
|
+
ngOnInit() {
|
|
20
|
+
this.zoomSelectedAction = this.audioDisplayScrollPane.zoomSelectedAction;
|
|
21
|
+
this.zoomFitToPanelAction = this.audioDisplayScrollPane.zoomFitToPanelAction;
|
|
22
|
+
this.zoomOutAction = this.audioDisplayScrollPane.zoomOutAction;
|
|
23
|
+
this.zoomInAction = this.audioDisplayScrollPane.zoomInAction;
|
|
24
|
+
}
|
|
25
|
+
ngAfterViewInit() {
|
|
26
|
+
this.layout();
|
|
27
|
+
let heightListener = new MutationObserver((mrs, mo) => {
|
|
28
|
+
mrs.forEach((mr) => {
|
|
29
|
+
if ('attributes' === mr.type && ('class' === mr.attributeName || 'style' === mr.attributeName)) {
|
|
30
|
+
this.layout();
|
|
31
|
+
}
|
|
32
|
+
});
|
|
33
|
+
});
|
|
34
|
+
heightListener.observe(this.parentE, { attributes: true, childList: true, characterData: true });
|
|
35
|
+
}
|
|
36
|
+
layout() {
|
|
37
|
+
this.audioDisplayScrollPane.layout();
|
|
38
|
+
}
|
|
39
|
+
started() {
|
|
40
|
+
console.log("Play started");
|
|
41
|
+
this.status = 'Playing...';
|
|
42
|
+
}
|
|
43
|
+
set audioData(audioData) {
|
|
44
|
+
this.audioDisplayScrollPane.audioData = audioData;
|
|
45
|
+
if (this.playStartAction) {
|
|
46
|
+
console.debug("Play start action (by AudioDisplay::set audioData) disabled: " + (audioData == null));
|
|
47
|
+
this.playStartAction.disabled = (audioData == null);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
set audioClip(audioClip) {
|
|
51
|
+
//let audioData:AudioBuffer|null=null;
|
|
52
|
+
let sel = null;
|
|
53
|
+
if (audioClip) {
|
|
54
|
+
//audioData=audioClip.audioDataHolder.buffer;
|
|
55
|
+
sel = audioClip.selection;
|
|
56
|
+
}
|
|
57
|
+
this._audioClip = audioClip;
|
|
58
|
+
this.audioDisplayScrollPane.audioClip = audioClip;
|
|
59
|
+
//this.playStartAction.disabled = (audioData!==null)
|
|
60
|
+
}
|
|
61
|
+
get audioClip() {
|
|
62
|
+
return this._audioClip;
|
|
63
|
+
}
|
|
64
|
+
set playFramePosition(playFramePosition) {
|
|
65
|
+
this.audioDisplayScrollPane.playFramePosition = playFramePosition;
|
|
66
|
+
}
|
|
67
|
+
error() {
|
|
68
|
+
this.status = 'ERROR';
|
|
69
|
+
}
|
|
70
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AudioDisplay, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "17.0.6", type: AudioDisplay, selector: "app-audiodisplay", inputs: { playStartAction: "playStartAction", playStopAction: "playStopAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", audioData: "audioData", audioClip: "audioClip" }, viewQueries: [{ propertyName: "audioDisplayScrollPane", first: true, predicate: AudioDisplayScrollPane, descendants: true, static: true }], ngImport: i0, template: `
|
|
73
72
|
|
|
74
73
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
75
74
|
|
|
@@ -82,9 +81,10 @@ AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
82
81
|
[zoomOutAction]="zoomOutAction"
|
|
83
82
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
84
83
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
85
|
-
`, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"], dependencies: [{ kind: "component", type: i1.AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: i2.AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
|
|
86
|
-
|
|
87
|
-
|
|
84
|
+
`, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"], dependencies: [{ kind: "component", type: i1.AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: i2.AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] }); }
|
|
85
|
+
}
|
|
86
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.6", ngImport: i0, type: AudioDisplay, decorators: [{
|
|
87
|
+
type: Component,
|
|
88
88
|
args: [{ selector: 'app-audiodisplay', template: `
|
|
89
89
|
|
|
90
90
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -98,21 +98,21 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
98
98
|
[zoomOutAction]="zoomOutAction"
|
|
99
99
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
100
100
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
101
|
-
`, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"] }]
|
|
102
|
-
}], ctorParameters:
|
|
103
|
-
type: Input
|
|
104
|
-
}], playStopAction: [{
|
|
105
|
-
type: Input
|
|
106
|
-
}], playSelectionAction: [{
|
|
107
|
-
type: Input
|
|
108
|
-
}], autoPlayOnSelectToggleAction: [{
|
|
109
|
-
type: Input
|
|
110
|
-
}], audioDisplayScrollPane: [{
|
|
111
|
-
type: ViewChild,
|
|
112
|
-
args: [AudioDisplayScrollPane, { static: true }]
|
|
113
|
-
}], audioData: [{
|
|
114
|
-
type: Input
|
|
115
|
-
}], audioClip: [{
|
|
116
|
-
type: Input
|
|
117
|
-
}] } });
|
|
118
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGlzcGxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9hdWRpb19kaXNwbGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUVNLEtBQUssR0FDdkIsTUFBTSxlQUFlLENBQUE7QUFHdEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOzs7O0FBNEN0RSxNQUFNLE9BQU8sWUFBWTtJQTRCdkIsWUFBb0IsR0FBc0IsRUFBUyxJQUFlO1FBQTlDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBVztRQXpCMUQsZUFBVSxHQUFnQixJQUFJLENBQUE7UUEwQnBDLHVDQUF1QztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBQyxpQkFBaUIsQ0FBQztJQUVoQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUE7UUFDdEUsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQTtRQUMxRSxJQUFJLENBQUMsYUFBYSxHQUFDLElBQUks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IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEFmdGVyVmlld0luaXQsIElucHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuXHJcbmltcG9ydCB7QXVkaW9DbGlwLCBTZWxlY3Rpb259IGZyb20gJy4vcGVyc2lzdG9yJ1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lfSBmcm9tIFwiLi91aS9hdWRpb19kaXNwbGF5X3Njcm9sbF9wYW5lXCI7XHJcbmltcG9ydCB7QXVkaW9EYXRhSG9sZGVyfSBmcm9tIFwiLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLWF1ZGlvZGlzcGxheScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPGF1ZGlvLWRpc3BsYXktc2Nyb2xsLXBhbmUgI2F1ZGlvRGlzcGxheVNjcm9sbFBhbmU+PC9hdWRpby1kaXNwbGF5LXNjcm9sbC1wYW5lPlxyXG5cclxuICAgIDxhdWRpby1kaXNwbGF5LWNvbnRyb2wgW2F1ZGlvQ2xpcF09XCJhdWRpb0NsaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwicGxheVN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiXHJcbiAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJhdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXCJcclxuICAgIFt6b29tSW5BY3Rpb25dPVwiem9vbUluQWN0aW9uXCJcclxuICAgIFt6b29tT3V0QWN0aW9uXT1cInpvb21PdXRBY3Rpb25cIlxyXG4gICAgW3pvb21TZWxlY3RlZEFjdGlvbl09XCJ6b29tU2VsZWN0ZWRBY3Rpb25cIlxyXG4gICAgW3pvb21GaXRUb1BhbmVsQWN0aW9uXT1cInpvb21GaXRUb1BhbmVsQWN0aW9uXCI+PC9hdWRpby1kaXNwbGF5LWNvbnRyb2w+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtcclxuICAgICAgYDpob3N0IHtcclxuICAgICAgZGlzcGxheTogZmxleDtcclxuICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjtcclxuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICBib3R0b206IDBweDtcclxuICAgICAgaGVpZ2h0OiAxMDAlO1xyXG4gICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcclxuICAgICAgcGFkZGluZzogMjBweDtcclxuICAgICAgei1pbmRleDogNTtcclxuICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDtcclxuICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyMzAsIDIzMCwgMjMwLCAxLjApXHJcbiAgICB9YCxgXHJcbiAgICAgICAgICBsZWdlbmR7XHJcbiAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDFlbTsgcGFkZGluZzogMC4yZW0gMC44ZW07Zm9udC1zaXplOiAwLjhlbTtcclxuICAgICAgfWAsYFxyXG4gICAgICAgIGZpZWxkc2V0e1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBkYXJrZ3JheSBzb2xpZFxyXG4gICAgICB9XHJcbiAgICAgIGBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaW9EaXNwbGF5IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQge1xyXG5cclxuICBwYXJlbnRFOiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIF9hdWRpb0NsaXA6QXVkaW9DbGlwfG51bGw9bnVsbFxyXG5cclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcGxheVNlbGVjdGlvbkFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbiE6QWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuXHJcbiAgem9vbUZpdFRvUGFuZWxBY3Rpb24hOkFjdGlvbjx2b2lkPjtcclxuICB6b29tU2VsZWN0ZWRBY3Rpb24hOkFjdGlvbjx2b2lkPlxyXG4gIHpvb21JbkFjdGlvbiE6QWN0aW9uPHZvaWQ+O1xyXG4gIHpvb21PdXRBY3Rpb24hOkFjdGlvbjx2b2lkPjtcclxuXHJcbiAgY2xlYXJTZWxlY3Rpb25BY3Rpb24hOkFjdGlvbjx2b2lkPlxyXG5cclxuICBzdGF0dXM6IHN0cmluZztcclxuXHJcbiAgYXVkaW86IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZChBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGF1ZGlvRGlzcGxheVNjcm9sbFBhbmUhOiBBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBlUmVmOkVsZW1lbnRSZWYpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJjb25zdHJ1Y3RvcjogXCIrdGhpcy5hYyk7XHJcbiAgICAgIHRoaXMucGFyZW50RT10aGlzLmVSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uID0gbmV3IEFjdGlvbihcIlN0YXJ0XCIpO1xyXG4gICAgdGhpcy5wbGF5U2VsZWN0aW9uQWN0aW9uPW5ldyBBY3Rpb24oXCJQbGF5IHNlbGVjdGVkXCIpO1xyXG4gICAgdGhpcy5wbGF5U3RvcEFjdGlvbiA9IG5ldyBBY3Rpb24oXCJTdG9wXCIpO1xyXG4gICAgdGhpcy5zdGF0dXM9XCJQbGF5ZXIgY3JlYXRlZC5cIjtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy56b29tU2VsZWN0ZWRBY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21TZWxlY3RlZEFjdGlvblxyXG4gICAgdGhpcy56b29tRml0VG9QYW5lbEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbUZpdFRvUGFuZWxBY3Rpb25cclxuICAgIHRoaXMuem9vbU91dEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbU91dEFjdGlvblxyXG4gICAgdGhpcy56b29tSW5BY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21JbkFjdGlvblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgICAgdGhpcy5sYXlvdXQoKTtcclxuICAgICAgbGV0IGhlaWdodExpc3RlbmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKChtcnM6QXJyYXk8TXV0YXRpb25SZWNvcmQ+LG1vOk11dGF0aW9uT2JzZXJ2ZXIpPT57XHJcbiAgICAgICAgICBtcnMuZm9yRWFjaCgobXI6TXV0YXRpb25SZWNvcmQpPT57XHJcbiAgICAgICAgICAgICAgaWYoJ2F0dHJpYnV0ZXMnPT09bXIudHlwZSAmJiAoJ2NsYXNzJz09PW1yLmF0dHJpYnV0ZU5hbWUgfHwgJ3N0eWxlJz09PW1yLmF0dHJpYnV0ZU5hbWUpKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgaGVpZ2h0TGlzdGVuZXIub2JzZXJ2ZSh0aGlzLnBhcmVudEUse2F0dHJpYnV0ZXM6IHRydWUsY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbGF5b3V0KCl7XHJcbiAgICB0aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUGxheSBzdGFydGVkXCIpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnUGxheWluZy4uLic7XHJcbiAgfVxyXG5cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9EYXRhKGF1ZGlvRGF0YTogQXVkaW9EYXRhSG9sZGVyKXtcclxuICAgICAgdGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLmF1ZGlvRGF0YSA9IGF1ZGlvRGF0YTtcclxuICAgICAgaWYodGhpcy5wbGF5U3RhcnRBY3Rpb24pIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiUGxheSBzdGFydCBhY3Rpb24gKGJ5IEF1ZGlvRGlzcGxheTo6c2V0IGF1ZGlvRGF0YSkgZGlzYWJsZWQ6IFwiKyhhdWRpb0RhdGE9PW51bGwpKTtcclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKGF1ZGlvRGF0YSA9PSBudWxsKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9DbGlwKGF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbCkge1xyXG5cclxuICAgIC8vbGV0IGF1ZGlvRGF0YTpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICBsZXQgc2VsOlNlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgICBpZihhdWRpb0NsaXApe1xyXG4gICAgICAvL2F1ZGlvRGF0YT1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyLmJ1ZmZlcjtcclxuICAgICAgc2VsPWF1ZGlvQ2xpcC5zZWxlY3Rpb247XHJcbiAgICAgIH1cclxuICAgIHRoaXMuX2F1ZGlvQ2xpcD1hdWRpb0NsaXBcclxuICAgIHRoaXMuYXVkaW9EaXNwbGF5U2Nyb2xsUGFuZS5hdWRpb0NsaXAgPSBhdWRpb0NsaXA7XHJcbiAgICAvL3RoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKGF1ZGlvRGF0YSE9PW51bGwpXHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9DbGlwKCk6QXVkaW9DbGlwfG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9DbGlwXHJcbiAgfVxyXG5cclxuICBzZXQgcGxheUZyYW1lUG9zaXRpb24ocGxheUZyYW1lUG9zaXRpb246bnVtYmVyKXtcclxuICAgICAgdGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnBsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb25cclxuICB9XHJcblxyXG4gIGVycm9yKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
|
|
101
|
+
`, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#e6e6e6}\n", "legend{margin-left:1em;padding:.2em .8em;font-size:.8em}\n", "fieldset{border:1px darkgray solid}\n"] }]
|
|
102
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }], propDecorators: { playStartAction: [{
|
|
103
|
+
type: Input
|
|
104
|
+
}], playStopAction: [{
|
|
105
|
+
type: Input
|
|
106
|
+
}], playSelectionAction: [{
|
|
107
|
+
type: Input
|
|
108
|
+
}], autoPlayOnSelectToggleAction: [{
|
|
109
|
+
type: Input
|
|
110
|
+
}], audioDisplayScrollPane: [{
|
|
111
|
+
type: ViewChild,
|
|
112
|
+
args: [AudioDisplayScrollPane, { static: true }]
|
|
113
|
+
}], audioData: [{
|
|
114
|
+
type: Input
|
|
115
|
+
}], audioClip: [{
|
|
116
|
+
type: Input
|
|
117
|
+
}] } });
|
|
118
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaW9fZGlzcGxheS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3NwZWVjaHJlY29yZGVybmcvc3JjL2xpYi9hdWRpby9hdWRpb19kaXNwbGF5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDSCxTQUFTLEVBQ1QsU0FBUyxFQUVNLEtBQUssR0FDdkIsTUFBTSxlQUFlLENBQUE7QUFHdEIsT0FBTyxFQUFDLE1BQU0sRUFBQyxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBQyxzQkFBc0IsRUFBQyxNQUFNLGdDQUFnQyxDQUFDOzs7O0FBNEN0RSxNQUFNLE9BQU8sWUFBWTtJQTRCdkIsWUFBb0IsR0FBc0IsRUFBUyxJQUFlO1FBQTlDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBQVMsU0FBSSxHQUFKLElBQUksQ0FBVztRQXpCMUQsZUFBVSxHQUFnQixJQUFJLENBQUE7UUEwQnBDLHVDQUF1QztRQUNyQyxJQUFJLENBQUMsT0FBTyxHQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLG1CQUFtQixHQUFDLElBQUksTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQ3JELElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDekMsSUFBSSxDQUFDLE1BQU0sR0FBQyxpQkFBaUIsQ0FBQztJQUVoQyxDQUFDO0lBRUQsUUFBUTtRQUNOLElBQUksQ0FBQyxrQkFBa0IsR0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsa0JBQWtCLENBQUE7UUFDdEUsSUFBSSxDQUFDLG9CQUFvQixHQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQTtRQUMxRSxJQUFJLENBQUMsYUFBYSxHQUFDLElBQUks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IjpbImltcG9ydCB7XHJcbiAgICBDb21wb25lbnQsXHJcbiAgICBWaWV3Q2hpbGQsXHJcbiAgICBDaGFuZ2VEZXRlY3RvclJlZixcclxuICAgIEFmdGVyVmlld0luaXQsIElucHV0LCBPbkluaXQsIEVsZW1lbnRSZWYsXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuXHJcbmltcG9ydCB7QXVkaW9DbGlwLCBTZWxlY3Rpb259IGZyb20gJy4vcGVyc2lzdG9yJ1xyXG5pbXBvcnQge0FjdGlvbn0gZnJvbSBcIi4uL2FjdGlvbi9hY3Rpb25cIjtcclxuaW1wb3J0IHtBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lfSBmcm9tIFwiLi91aS9hdWRpb19kaXNwbGF5X3Njcm9sbF9wYW5lXCI7XHJcbmltcG9ydCB7QXVkaW9EYXRhSG9sZGVyfSBmcm9tIFwiLi9hdWRpb19kYXRhX2hvbGRlclwiO1xyXG5cclxuQENvbXBvbmVudCh7XHJcblxyXG4gIHNlbGVjdG9yOiAnYXBwLWF1ZGlvZGlzcGxheScsXHJcblxyXG4gIHRlbXBsYXRlOiBgXHJcblxyXG4gICAgPGF1ZGlvLWRpc3BsYXktc2Nyb2xsLXBhbmUgI2F1ZGlvRGlzcGxheVNjcm9sbFBhbmU+PC9hdWRpby1kaXNwbGF5LXNjcm9sbC1wYW5lPlxyXG5cclxuICAgIDxhdWRpby1kaXNwbGF5LWNvbnRyb2wgW2F1ZGlvQ2xpcF09XCJhdWRpb0NsaXBcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RhcnRBY3Rpb25dPVwicGxheVN0YXJ0QWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbcGxheVNlbGVjdGlvbkFjdGlvbl09XCJwbGF5U2VsZWN0aW9uQWN0aW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtwbGF5U3RvcEFjdGlvbl09XCJwbGF5U3RvcEFjdGlvblwiXHJcbiAgICBbYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbl09XCJhdXRvUGxheU9uU2VsZWN0VG9nZ2xlQWN0aW9uXCJcclxuICAgIFt6b29tSW5BY3Rpb25dPVwiem9vbUluQWN0aW9uXCJcclxuICAgIFt6b29tT3V0QWN0aW9uXT1cInpvb21PdXRBY3Rpb25cIlxyXG4gICAgW3pvb21TZWxlY3RlZEFjdGlvbl09XCJ6b29tU2VsZWN0ZWRBY3Rpb25cIlxyXG4gICAgW3pvb21GaXRUb1BhbmVsQWN0aW9uXT1cInpvb21GaXRUb1BhbmVsQWN0aW9uXCI+PC9hdWRpby1kaXNwbGF5LWNvbnRyb2w+XHJcbiAgYCxcclxuICBzdHlsZXM6IFtcclxuICAgICAgYDpob3N0IHtcclxuICAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XHJcbiAgICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uO1xyXG4gICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xyXG4gICAgICAgICAgICAgYm90dG9tOiAwcHg7XHJcbiAgICAgICAgICAgICBoZWlnaHQ6IDEwMCU7XHJcbiAgICAgICAgICAgICB3aWR0aDogMTAwJTtcclxuICAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XHJcbiAgICAgICAgICAgICBwYWRkaW5nOiAyMHB4O1xyXG4gICAgICAgICAgICAgei1pbmRleDogNTtcclxuICAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7XHJcbiAgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDIzMCwgMjMwLCAyMzAsIDEuMClcclxuICAgICAgICAgICB9YCxgXHJcbiAgICAgICAgICBsZWdlbmR7XHJcbiAgICAgICAgICAgICAgbWFyZ2luLWxlZnQ6IDFlbTsgcGFkZGluZzogMC4yZW0gMC44ZW07Zm9udC1zaXplOiAwLjhlbTtcclxuICAgICAgfWAsYFxyXG4gICAgICAgIGZpZWxkc2V0e1xyXG4gICAgICAgICAgICBib3JkZXI6IDFweCBkYXJrZ3JheSBzb2xpZFxyXG4gICAgICB9XHJcbiAgICAgIGBdXHJcblxyXG59KVxyXG5leHBvcnQgY2xhc3MgQXVkaW9EaXNwbGF5IGltcGxlbWVudHMgT25Jbml0LEFmdGVyVmlld0luaXQge1xyXG5cclxuICBwYXJlbnRFOiBIVE1MRWxlbWVudDtcclxuICBwcml2YXRlIF9hdWRpb0NsaXA6QXVkaW9DbGlwfG51bGw9bnVsbFxyXG5cclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdGFydEFjdGlvbjogQWN0aW9uPHZvaWQ+fHVuZGVmaW5lZDtcclxuICBASW5wdXQoKVxyXG4gIHBsYXlTdG9wQWN0aW9uOiBBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgcGxheVNlbGVjdGlvbkFjdGlvbjpBY3Rpb248dm9pZD58dW5kZWZpbmVkO1xyXG4gIEBJbnB1dCgpXHJcbiAgYXV0b1BsYXlPblNlbGVjdFRvZ2dsZUFjdGlvbiE6QWN0aW9uPGJvb2xlYW4+fHVuZGVmaW5lZDtcclxuXHJcbiAgem9vbUZpdFRvUGFuZWxBY3Rpb24hOkFjdGlvbjx2b2lkPjtcclxuICB6b29tU2VsZWN0ZWRBY3Rpb24hOkFjdGlvbjx2b2lkPlxyXG4gIHpvb21JbkFjdGlvbiE6QWN0aW9uPHZvaWQ+O1xyXG4gIHpvb21PdXRBY3Rpb24hOkFjdGlvbjx2b2lkPjtcclxuXHJcbiAgY2xlYXJTZWxlY3Rpb25BY3Rpb24hOkFjdGlvbjx2b2lkPlxyXG5cclxuICBzdGF0dXM6IHN0cmluZztcclxuXHJcbiAgYXVkaW86IGFueTtcclxuXHJcbiAgQFZpZXdDaGlsZChBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLCB7IHN0YXRpYzogdHJ1ZSB9KVxyXG4gIGF1ZGlvRGlzcGxheVNjcm9sbFBhbmUhOiBBdWRpb0Rpc3BsYXlTY3JvbGxQYW5lO1xyXG5cclxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlZjogQ2hhbmdlRGV0ZWN0b3JSZWYscHJpdmF0ZSBlUmVmOkVsZW1lbnRSZWYpIHtcclxuICAgIC8vY29uc29sZS5sb2coXCJjb25zdHJ1Y3RvcjogXCIrdGhpcy5hYyk7XHJcbiAgICAgIHRoaXMucGFyZW50RT10aGlzLmVSZWYubmF0aXZlRWxlbWVudDtcclxuICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uID0gbmV3IEFjdGlvbihcIlN0YXJ0XCIpO1xyXG4gICAgdGhpcy5wbGF5U2VsZWN0aW9uQWN0aW9uPW5ldyBBY3Rpb24oXCJQbGF5IHNlbGVjdGVkXCIpO1xyXG4gICAgdGhpcy5wbGF5U3RvcEFjdGlvbiA9IG5ldyBBY3Rpb24oXCJTdG9wXCIpO1xyXG4gICAgdGhpcy5zdGF0dXM9XCJQbGF5ZXIgY3JlYXRlZC5cIjtcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpe1xyXG4gICAgdGhpcy56b29tU2VsZWN0ZWRBY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21TZWxlY3RlZEFjdGlvblxyXG4gICAgdGhpcy56b29tRml0VG9QYW5lbEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbUZpdFRvUGFuZWxBY3Rpb25cclxuICAgIHRoaXMuem9vbU91dEFjdGlvbj10aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUuem9vbU91dEFjdGlvblxyXG4gICAgdGhpcy56b29tSW5BY3Rpb249dGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnpvb21JbkFjdGlvblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG5cclxuICAgICAgdGhpcy5sYXlvdXQoKTtcclxuICAgICAgbGV0IGhlaWdodExpc3RlbmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKChtcnM6QXJyYXk8TXV0YXRpb25SZWNvcmQ+LG1vOk11dGF0aW9uT2JzZXJ2ZXIpPT57XHJcbiAgICAgICAgICBtcnMuZm9yRWFjaCgobXI6TXV0YXRpb25SZWNvcmQpPT57XHJcbiAgICAgICAgICAgICAgaWYoJ2F0dHJpYnV0ZXMnPT09bXIudHlwZSAmJiAoJ2NsYXNzJz09PW1yLmF0dHJpYnV0ZU5hbWUgfHwgJ3N0eWxlJz09PW1yLmF0dHJpYnV0ZU5hbWUpKXtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sYXlvdXQoKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICB9KTtcclxuICAgICAgaGVpZ2h0TGlzdGVuZXIub2JzZXJ2ZSh0aGlzLnBhcmVudEUse2F0dHJpYnV0ZXM6IHRydWUsY2hpbGRMaXN0OiB0cnVlLCBjaGFyYWN0ZXJEYXRhOiB0cnVlfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgbGF5b3V0KCl7XHJcbiAgICB0aGlzLmF1ZGlvRGlzcGxheVNjcm9sbFBhbmUubGF5b3V0KCk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc3RhcnRlZCgpIHtcclxuICAgIGNvbnNvbGUubG9nKFwiUGxheSBzdGFydGVkXCIpO1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnUGxheWluZy4uLic7XHJcbiAgfVxyXG5cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9EYXRhKGF1ZGlvRGF0YTogQXVkaW9EYXRhSG9sZGVyKXtcclxuICAgICAgdGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLmF1ZGlvRGF0YSA9IGF1ZGlvRGF0YTtcclxuICAgICAgaWYodGhpcy5wbGF5U3RhcnRBY3Rpb24pIHtcclxuICAgICAgICBjb25zb2xlLmRlYnVnKFwiUGxheSBzdGFydCBhY3Rpb24gKGJ5IEF1ZGlvRGlzcGxheTo6c2V0IGF1ZGlvRGF0YSkgZGlzYWJsZWQ6IFwiKyhhdWRpb0RhdGE9PW51bGwpKTtcclxuICAgICAgICAgIHRoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKGF1ZGlvRGF0YSA9PSBudWxsKVxyXG4gICAgICB9XHJcbiAgfVxyXG5cclxuXHJcbiAgQElucHV0KClcclxuICBzZXQgYXVkaW9DbGlwKGF1ZGlvQ2xpcDogQXVkaW9DbGlwIHwgbnVsbCkge1xyXG5cclxuICAgIC8vbGV0IGF1ZGlvRGF0YTpBdWRpb0J1ZmZlcnxudWxsPW51bGw7XHJcbiAgICBsZXQgc2VsOlNlbGVjdGlvbnxudWxsPW51bGw7XHJcbiAgICBpZihhdWRpb0NsaXApe1xyXG4gICAgICAvL2F1ZGlvRGF0YT1hdWRpb0NsaXAuYXVkaW9EYXRhSG9sZGVyLmJ1ZmZlcjtcclxuICAgICAgc2VsPWF1ZGlvQ2xpcC5zZWxlY3Rpb247XHJcbiAgICAgIH1cclxuICAgIHRoaXMuX2F1ZGlvQ2xpcD1hdWRpb0NsaXBcclxuICAgIHRoaXMuYXVkaW9EaXNwbGF5U2Nyb2xsUGFuZS5hdWRpb0NsaXAgPSBhdWRpb0NsaXA7XHJcbiAgICAvL3RoaXMucGxheVN0YXJ0QWN0aW9uLmRpc2FibGVkID0gKGF1ZGlvRGF0YSE9PW51bGwpXHJcbiAgfVxyXG5cclxuICBnZXQgYXVkaW9DbGlwKCk6QXVkaW9DbGlwfG51bGx7XHJcbiAgICByZXR1cm4gdGhpcy5fYXVkaW9DbGlwXHJcbiAgfVxyXG5cclxuICBzZXQgcGxheUZyYW1lUG9zaXRpb24ocGxheUZyYW1lUG9zaXRpb246bnVtYmVyKXtcclxuICAgICAgdGhpcy5hdWRpb0Rpc3BsYXlTY3JvbGxQYW5lLnBsYXlGcmFtZVBvc2l0aW9uID0gcGxheUZyYW1lUG9zaXRpb25cclxuICB9XHJcblxyXG4gIGVycm9yKCkge1xyXG4gICAgdGhpcy5zdGF0dXMgPSAnRVJST1InO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbiJdfQ==
|