speechrecorderng 3.4.3 → 3.4.5

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.
Files changed (68) hide show
  1. package/esm2020/lib/action/action.mjs +3 -3
  2. package/esm2020/lib/audio/audio_display.mjs +9 -11
  3. package/esm2020/lib/audio/audio_player.mjs +4 -4
  4. package/esm2020/lib/audio/capture/capture.mjs +120 -106
  5. package/esm2020/lib/audio/io/stream.mjs +1 -1
  6. package/esm2020/lib/audio/net_audio_buffer.mjs +1 -1
  7. package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +2 -2
  8. package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +2 -2
  9. package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
  10. package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
  11. package/esm2020/lib/audio/ui/audio_display_control.mjs +4 -4
  12. package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
  13. package/esm2020/lib/audio/ui/audiosignal.mjs +4 -4
  14. package/esm2020/lib/audio/ui/container.mjs +6 -6
  15. package/esm2020/lib/audio/ui/livelevel.mjs +4 -4
  16. package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
  17. package/esm2020/lib/audio/ui/sonagram.mjs +4 -4
  18. package/esm2020/lib/db/inddb.mjs +4 -4
  19. package/esm2020/lib/net/uploader.mjs +31 -28
  20. package/esm2020/lib/speechrecorder/project/project.service.mjs +7 -7
  21. package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +53 -51
  22. package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +124 -116
  23. package/esm2020/lib/speechrecorder/script/script.service.mjs +4 -4
  24. package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +26 -27
  25. package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +1 -1
  26. package/esm2020/lib/speechrecorder/session/controlpanel.mjs +34 -32
  27. package/esm2020/lib/speechrecorder/session/progress.mjs +4 -4
  28. package/esm2020/lib/speechrecorder/session/prompting.mjs +16 -16
  29. package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +4 -4
  30. package/esm2020/lib/speechrecorder/session/recording_list.mjs +4 -4
  31. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
  32. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +6 -6
  33. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +20 -19
  34. package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +43 -41
  35. package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +147 -137
  36. package/esm2020/lib/speechrecorder/session/session.service.mjs +15 -12
  37. package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
  38. package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +4 -4
  39. package/esm2020/lib/speechrecorder/session/warning_bar.mjs +4 -4
  40. package/esm2020/lib/speechrecorder/spruploader.mjs +4 -4
  41. package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -2
  42. package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
  43. package/esm2020/lib/speechrecorderng.component.mjs +6 -6
  44. package/esm2020/lib/speechrecorderng.module.mjs +5 -5
  45. package/esm2020/lib/spr.config.mjs +4 -4
  46. package/esm2020/lib/spr.module.version.mjs +2 -2
  47. package/esm2020/lib/ui/canvas_layer_comp.mjs +4 -4
  48. package/esm2020/lib/ui/message_dialog.mjs +4 -4
  49. package/esm2020/lib/ui/recordingitem_display.mjs +8 -8
  50. package/esm2020/lib/ui/responsive_component.mjs +4 -4
  51. package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +4 -4
  52. package/fesm2015/speechrecorderng.mjs +744 -701
  53. package/fesm2015/speechrecorderng.mjs.map +1 -1
  54. package/fesm2020/speechrecorderng.mjs +744 -701
  55. package/fesm2020/speechrecorderng.mjs.map +1 -1
  56. package/lib/action/action.d.ts +1 -1
  57. package/lib/audio/audio_display.d.ts +1 -3
  58. package/lib/audio/capture/capture.d.ts +2 -0
  59. package/lib/audio/io/stream.d.ts +1 -1
  60. package/lib/net/uploader.d.ts +6 -6
  61. package/lib/speechrecorder/project/project.service.d.ts +4 -4
  62. package/lib/speechrecorder/script/script.service.d.ts +2 -2
  63. package/lib/speechrecorder/session/audiorecorder.d.ts +1 -2
  64. package/lib/speechrecorder/session/basicrecorder.d.ts +1 -1
  65. package/lib/speechrecorder/session/controlpanel.d.ts +1 -1
  66. package/lib/speechrecorder/session/session.service.d.ts +2 -2
  67. package/lib/spr.module.version.d.ts +1 -1
  68. package/package.json +14 -14
@@ -6,17 +6,15 @@ import { HttpErrorResponse, HttpHeaders, HttpClientModule } from '@angular/commo
6
6
  import { timeout } from 'rxjs/operators';
7
7
  import * as i1$1 from '@angular/common';
8
8
  import { CommonModule } from '@angular/common';
9
- import * as i1$2 from '@angular/router';
10
- import { RouterModule } from '@angular/router';
11
9
  import * as i4$1 from '@angular/material/checkbox';
12
10
  import { MatCheckbox, MatCheckboxModule } from '@angular/material/checkbox';
13
11
  import * as i2 from '@angular/material/icon';
14
12
  import { MatIconModule } from '@angular/material/icon';
15
13
  import * as i4 from '@angular/material/tooltip';
16
14
  import { MatTooltipModule } from '@angular/material/tooltip';
17
- import * as i1$3 from '@angular/cdk/layout';
15
+ import * as i1$2 from '@angular/cdk/layout';
18
16
  import { Breakpoints } from '@angular/cdk/layout';
19
- import * as i1$4 from '@angular/material/dialog';
17
+ import * as i1$3 from '@angular/material/dialog';
20
18
  import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
21
19
  import * as i3 from '@angular/material/button';
22
20
  import { MatButtonModule } from '@angular/material/button';
@@ -25,13 +23,15 @@ import * as i3$1 from '@angular/material/progress-spinner';
25
23
  import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
26
24
  import * as i7 from '@angular/material/progress-bar';
27
25
  import { MatProgressBarModule } from '@angular/material/progress-bar';
26
+ import * as i4$2 from '@angular/router';
27
+ import { RouterModule } from '@angular/router';
28
28
  import * as i3$2 from '@angular/material/card';
29
29
  import { MatCardModule } from '@angular/material/card';
30
30
  import { MatDividerModule } from '@angular/material/divider';
31
31
  import { MatGridListModule } from '@angular/material/grid-list';
32
32
  import * as i6 from '@angular/material/snack-bar';
33
33
  import { MatSnackBarModule } from '@angular/material/snack-bar';
34
- import * as i4$2 from '@angular/material/table';
34
+ import * as i4$3 from '@angular/material/table';
35
35
  import { MatTableDataSource, MatTableModule } from '@angular/material/table';
36
36
  import { MatSelectModule } from '@angular/material/select';
37
37
  import { MatInputModule } from '@angular/material/input';
@@ -95,7 +95,7 @@ class Action {
95
95
  ctrl.disabled = this.disabled;
96
96
  this.controls.push(ctrl);
97
97
  if (actionEventName) {
98
- ctrl.addEventListener(actionEventName, (e) => {
98
+ ctrl.addEventListener(actionEventName, () => {
99
99
  this.perform();
100
100
  });
101
101
  }
@@ -103,7 +103,7 @@ class Action {
103
103
  }
104
104
  }
105
105
  removeControl(ctrl) {
106
- var i = this.controls.indexOf(ctrl);
106
+ const i = this.controls.indexOf(ctrl);
107
107
  if (i >= 0) {
108
108
  this.controls = this.controls.splice(i, 1);
109
109
  }
@@ -944,7 +944,7 @@ class ArrayAudioBufferSourceNode extends AudioSourceNode {
944
944
  }
945
945
  };
946
946
  }
947
- fillBuffer(frameOffset) {
947
+ fillBuffer() {
948
948
  if (this._arrayAudioBuffer && this._audioInputStream && this._aisBufs) {
949
949
  let filled = this.filledFrames;
950
950
  let bufLen = 0;
@@ -1741,7 +1741,7 @@ const aswpStr = "\n" +
1741
1741
  "\n" +
1742
1742
  " let copied=0;\n" +
1743
1743
  " do{\n" +
1744
- " if(this.currentAudioBufferAvail==0){\n" +
1744
+ " if(this.currentAudioBufferAvail===0){\n" +
1745
1745
  " let nxtBuff=this.audioBuffers.shift();\n" +
1746
1746
  " if(nxtBuff){\n" +
1747
1747
  " this.currentAudioBuffer=nxtBuff;\n" +
@@ -3167,7 +3167,7 @@ class AudioCapture {
3167
3167
  this.inddbAudioBuffer = null;
3168
3168
  this.context = context;
3169
3169
  this.n = navigator;
3170
- this.context.addEventListener('statechange', (ev) => {
3170
+ this.context.addEventListener('statechange', () => {
3171
3171
  if (this.context.state !== 'running') {
3172
3172
  this.close();
3173
3173
  }
@@ -3313,6 +3313,104 @@ class AudioCapture {
3313
3313
  console.log("Audio device: Id: " + di.deviceId + " groupId: " + di.groupId + " label: " + di.label + " kind: " + di.kind);
3314
3314
  }
3315
3315
  }
3316
+ addCaptureInterceptor() {
3317
+ const awn = new AudioWorkletNode(this.context, 'capture-interceptor');
3318
+ awn.onprocessorerror = (ev) => {
3319
+ let msg = 'Unknwon error';
3320
+ if (ev instanceof ErrorEvent) {
3321
+ msg = ev.message;
3322
+ }
3323
+ console.error("Capture audio worklet error: " + msg);
3324
+ if (this.listener) {
3325
+ this.listener.error(msg);
3326
+ }
3327
+ };
3328
+ let awnPt = awn.port;
3329
+ if (awnPt) {
3330
+ awnPt.onmessage = (ev) => {
3331
+ if (this.capturing) {
3332
+ let dt = ev.data;
3333
+ let chs = dt.chs;
3334
+ let adaLen = dt.data.length;
3335
+ if (DEBUG_TRACE_LEVEL > 8) {
3336
+ console.debug('Received data from worklet: ' + chs + ' ' + dt.len + ' Data chs: ' + adaLen);
3337
+ }
3338
+ let chunk = new Array(chs);
3339
+ const samples = this.framesRecorded * chs;
3340
+ if ((AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this.audioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this.audioStorageType) && this.data && samples > this._maxAutoNetMemStoreSamples) {
3341
+ this.data = null;
3342
+ }
3343
+ //console.debug("Data initialized: "+(this.data!=null));
3344
+ for (let ch = 0; ch < chs; ch++) {
3345
+ //console.debug("Data ch initialized: "+(this.data !=null && this.data[ch] !=null));
3346
+ if (ch < this.channelCount) {
3347
+ if (dt.data[ch]) {
3348
+ let fa = new Float32Array(dt.data[ch]);
3349
+ if (this.data && this.data[ch]) {
3350
+ this.data[ch].push(fa);
3351
+ }
3352
+ chunk[ch] = fa;
3353
+ // Use samples of channel 0 to count frames (samples)
3354
+ if (ch == 0) {
3355
+ this.framesRecorded += fa.length;
3356
+ }
3357
+ }
3358
+ }
3359
+ }
3360
+ if (this.audioOutStream) {
3361
+ try {
3362
+ this.audioOutStream.write(chunk);
3363
+ // // Random test error:
3364
+ // if(Math.random()>0.98) {
3365
+ // throw new Error('Test');
3366
+ // }
3367
+ }
3368
+ catch (err) {
3369
+ if (err instanceof Error) {
3370
+ this.persistError = err;
3371
+ }
3372
+ else {
3373
+ this.persistError = new Error('Error handling recorded audio data');
3374
+ }
3375
+ console.error("Capture error: " + err);
3376
+ try {
3377
+ this.stop();
3378
+ }
3379
+ catch (err2) {
3380
+ console.error("Capture next error (ignored): " + err2);
3381
+ }
3382
+ finally {
3383
+ if (this.listener) {
3384
+ let errExpl = '';
3385
+ if (err instanceof DOMException) {
3386
+ errExpl = ': ' + err.name + ': ' + err.message;
3387
+ }
3388
+ this.listener.error("Could not handle recorded audio data" + errExpl, "Please try to record again.");
3389
+ }
3390
+ else {
3391
+ this.close();
3392
+ }
3393
+ }
3394
+ }
3395
+ }
3396
+ if (AudioStorageType.DB_CHUNKED === this._audioStorageType && this._persistentAudioStorageTarget) {
3397
+ this.store();
3398
+ }
3399
+ }
3400
+ };
3401
+ }
3402
+ // Tried to fix that Safari does not record the second channel
3403
+ // Does not help
3404
+ //awn.channelCount=this.channelCount;
3405
+ //awn.channelCountMode='explicit';
3406
+ //console.debug('Channel count explicitly set to '+this.channelCount);
3407
+ this.bufferingNode = awn;
3408
+ //this.bufferingNode.channelCount=this.channelCount;
3409
+ this._opened = true;
3410
+ if (this.listener) {
3411
+ this.listener.opened();
3412
+ }
3413
+ }
3316
3414
  open(channelCount, selDeviceId, autoGainControlConfigs) {
3317
3415
  //console.debug("Capture open: ctx state: "+this.context.state);
3318
3416
  if (this.context.state !== 'running') {
@@ -3436,7 +3534,7 @@ class AudioCapture {
3436
3534
  audio: {
3437
3535
  deviceId: selDeviceId,
3438
3536
  channelCount: channelCount,
3439
- echoCancellation: false
3537
+ //echoCancellation: false
3440
3538
  },
3441
3539
  video: false,
3442
3540
  };
@@ -3489,108 +3587,21 @@ class AudioCapture {
3489
3587
  //const workletFileName = ('file-loader!./interceptor_worklet.js');
3490
3588
  //const workletFileName = 'http://localhost:4200/assets/interceptor_worklet.js';
3491
3589
  //console.log(awpStr);
3492
- let audioWorkletModuleBlob = new Blob([awpStr], { type: 'text/javascript' });
3493
- let audioWorkletModuleBlobUrl = window.URL.createObjectURL(audioWorkletModuleBlob);
3494
- this.context.audioWorklet.addModule(audioWorkletModuleBlobUrl).then(() => {
3495
- const awn = new AudioWorkletNode(this.context, 'capture-interceptor');
3496
- awn.onprocessorerror = (ev) => {
3497
- let msg = 'Unknwon error';
3498
- if (ev instanceof ErrorEvent) {
3499
- msg = ev.message;
3500
- }
3501
- console.error("Capture audio worklet error: " + msg);
3502
- if (this.listener) {
3503
- this.listener.error(msg);
3504
- }
3505
- };
3506
- let awnPt = awn.port;
3507
- if (awnPt) {
3508
- awnPt.onmessage = (ev) => {
3509
- if (this.capturing) {
3510
- let dt = ev.data;
3511
- let chs = dt.chs;
3512
- let adaLen = dt.data.length;
3513
- if (DEBUG_TRACE_LEVEL > 8) {
3514
- console.debug('Received data from worklet: ' + chs + ' ' + dt.len + ' Data chs: ' + adaLen);
3515
- }
3516
- let chunk = new Array(chs);
3517
- const samples = this.framesRecorded * chs;
3518
- if ((AudioStorageType.MEM_ENTIRE_AUTO_NET_CHUNKED === this.audioStorageType || AudioStorageType.MEM_CHUNKED_AUTO_NET_CHUNKED === this.audioStorageType) && this.data && samples > this._maxAutoNetMemStoreSamples) {
3519
- this.data = null;
3520
- }
3521
- //console.debug("Data initialized: "+(this.data!=null));
3522
- for (let ch = 0; ch < chs; ch++) {
3523
- //console.debug("Data ch initialized: "+(this.data !=null && this.data[ch] !=null));
3524
- if (ch < this.channelCount) {
3525
- if (dt.data[ch]) {
3526
- let fa = new Float32Array(dt.data[ch]);
3527
- if (this.data && this.data[ch]) {
3528
- this.data[ch].push(fa);
3529
- }
3530
- chunk[ch] = fa;
3531
- // Use samples of channel 0 to count frames (samples)
3532
- if (ch == 0) {
3533
- this.framesRecorded += fa.length;
3534
- }
3535
- }
3536
- }
3537
- }
3538
- if (this.audioOutStream) {
3539
- try {
3540
- this.audioOutStream.write(chunk);
3541
- // // Random test error:
3542
- // if(Math.random()>0.98) {
3543
- // throw new Error('Test');
3544
- // }
3545
- }
3546
- catch (err) {
3547
- if (err instanceof Error) {
3548
- this.persistError = err;
3549
- }
3550
- else {
3551
- this.persistError = new Error('Error handling recorded audio data');
3552
- }
3553
- console.error("Capture error: " + err);
3554
- try {
3555
- this.stop();
3556
- }
3557
- catch (err2) {
3558
- console.error("Capture next error (ignored): " + err2);
3559
- }
3560
- finally {
3561
- if (this.listener) {
3562
- let errExpl = '';
3563
- if (err instanceof DOMException) {
3564
- errExpl = ': ' + err.name + ': ' + err.message;
3565
- }
3566
- this.listener.error("Could not handle recorded audio data" + errExpl, "Please try to record again.");
3567
- }
3568
- else {
3569
- this.close();
3570
- }
3571
- }
3572
- }
3573
- }
3574
- if (AudioStorageType.DB_CHUNKED === this._audioStorageType && this._persistentAudioStorageTarget) {
3575
- this.store();
3576
- }
3577
- }
3578
- };
3579
- }
3580
- // Tried to fix that Safari does not record the second channel
3581
- // Does not help
3582
- //awn.channelCount=this.channelCount;
3583
- //awn.channelCountMode='explicit';
3584
- //console.debug('Channel count explicitly set to '+this.channelCount);
3585
- this.bufferingNode = awn;
3586
- //this.bufferingNode.channelCount=this.channelCount;
3587
- this._opened = true;
3588
- if (this.listener) {
3589
- this.listener.opened();
3590
- }
3591
- }).catch((error) => {
3592
- console.log('Could not add module ' + error);
3593
- });
3590
+ if (AudioCapture.captureInterceptorModuleRegistered) {
3591
+ // Required capture interceptor module already registered
3592
+ this.addCaptureInterceptor();
3593
+ }
3594
+ else {
3595
+ // Register capture interceptor module
3596
+ let audioWorkletModuleBlob = new Blob([awpStr], { type: 'text/javascript' });
3597
+ let audioWorkletModuleBlobUrl = window.URL.createObjectURL(audioWorkletModuleBlob);
3598
+ this.context.audioWorklet.addModule(audioWorkletModuleBlobUrl).then(() => {
3599
+ AudioCapture.captureInterceptorModuleRegistered = true;
3600
+ this.addCaptureInterceptor();
3601
+ }).catch((error) => {
3602
+ console.log('Could not add module ' + error);
3603
+ });
3604
+ }
3594
3605
  }
3595
3606
  else if (this.context.createScriptProcessor) {
3596
3607
  // The ScriptProcessorNode Interface - DEPRECATED Only as fallback
@@ -3793,7 +3804,9 @@ class AudioCapture {
3793
3804
  }
3794
3805
  }
3795
3806
  close() {
3796
- this.mediaStream.disconnect();
3807
+ if (this.mediaStream) {
3808
+ this.mediaStream.disconnect();
3809
+ }
3797
3810
  if (this.stream) {
3798
3811
  const mts = this.stream.getTracks();
3799
3812
  for (let i = 0; i < mts.length; i++) {
@@ -3867,7 +3880,8 @@ class AudioCapture {
3867
3880
  }
3868
3881
  }
3869
3882
  AudioCapture.BUFFER_SIZE = 8192;
3870
- AudioCapture.DEFAULT_MAX_NET_AUTO_MEM_STORE_SAMPLES = 2880000 * 5; // Default 5 minute at 48kHz
3883
+ AudioCapture.DEFAULT_MAX_NET_AUTO_MEM_STORE_SAMPLES = 2880000 * 5; // Default 5 minute at 48kHz
3884
+ AudioCapture.captureInterceptorModuleRegistered = false;
3871
3885
 
3872
3886
  class WavFileFormat {
3873
3887
  }
@@ -4505,7 +4519,7 @@ class Uploader {
4505
4519
  si += v.size;
4506
4520
  }
4507
4521
  else if (typeof v === 'string') {
4508
- // encode to UT-f8 to get upload size
4522
+ // encode to UTF-8 to get upload size
4509
4523
  si += this.te.encode().length;
4510
4524
  }
4511
4525
  });
@@ -4543,34 +4557,37 @@ class Uploader {
4543
4557
  // pipe(timeout()) is not the same as xhr.timeout
4544
4558
  let uploadedUpload = null;
4545
4559
  //console.debug("Post upload: "+ul)
4546
- this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe(data => {
4547
- uploadedUpload = ul;
4548
- //console.debug('Next method called for upload: '+uploadedUpload)
4549
- }, (err) => {
4550
- if (err.error instanceof Error) {
4551
- // A client-side or network error occurred. Handle it accordingly.
4552
- console.error('Upload error occurred:', err.error.message);
4553
- }
4554
- else {
4555
- // The backend returned an unsuccessful response code.
4556
- // The response body may contain clues as to what went wrong,
4557
- console.error(`Upload error: Server returned code ${err.status}`);
4558
- }
4559
- this.processError(ul);
4560
- }, () => {
4561
- //console.debug('Upload complete method called')
4562
- if (uploadedUpload) {
4563
- if (this.DEBUG_DELAY > 0) {
4564
- window.setTimeout(() => {
4565
- this.uploadDone(ul);
4566
- }, this.DEBUG_DELAY);
4560
+ this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe({
4561
+ next: (data) => {
4562
+ uploadedUpload = ul;
4563
+ //console.debug('Next method called for upload: '+uploadedUpload)
4564
+ },
4565
+ error: (err) => {
4566
+ if (err.error instanceof Error) {
4567
+ // A client-side or network error occurred. Handle it accordingly.
4568
+ console.error('Upload error occurred:', err.error.message);
4567
4569
  }
4568
4570
  else {
4569
- this.uploadDone(uploadedUpload);
4571
+ // The backend returned an unsuccessful response code.
4572
+ // The response body may contain clues as to what went wrong,
4573
+ console.error(`Upload error: Server returned code ${err.status}`);
4574
+ }
4575
+ this.processError(ul);
4576
+ }, complete: () => {
4577
+ //console.debug('Upload complete method called')
4578
+ if (uploadedUpload) {
4579
+ if (this.DEBUG_DELAY > 0) {
4580
+ window.setTimeout(() => {
4581
+ this.uploadDone(ul);
4582
+ }, this.DEBUG_DELAY);
4583
+ }
4584
+ else {
4585
+ this.uploadDone(uploadedUpload);
4586
+ }
4587
+ }
4588
+ else {
4589
+ console.error('Upload post complete, but upload not set in next method!');
4570
4590
  }
4571
- }
4572
- else {
4573
- console.error('Upload post complete, but upload not set in next method!');
4574
4591
  }
4575
4592
  });
4576
4593
  }
@@ -4585,7 +4602,7 @@ class Uploader {
4585
4602
  // set retry timer
4586
4603
  this.retryTimerId = window.setTimeout(() => {
4587
4604
  this.retryTimerRunning = false;
4588
- //console.debug("Upload retry timer exprired. Continue processing...")
4605
+ //console.debug("Upload retry timer expired. Continue processing...")
4589
4606
  this.process();
4590
4607
  }, this.RETRY_DELAY);
4591
4608
  this.retryTimerRunning = true;
@@ -4669,9 +4686,9 @@ class SpeechRecorderConfig {
4669
4686
  this.withCredentials = false;
4670
4687
  }
4671
4688
  }
4672
- SpeechRecorderConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4673
- SpeechRecorderConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderConfig });
4674
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderConfig, decorators: [{
4689
+ SpeechRecorderConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
4690
+ SpeechRecorderConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderConfig });
4691
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderConfig, decorators: [{
4675
4692
  type: Injectable
4676
4693
  }], ctorParameters: function () { return []; } });
4677
4694
 
@@ -4679,12 +4696,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
4679
4696
  * Created by klausj on 17.06.2017.
4680
4697
  */
4681
4698
  class ProjectService {
4682
- constructor(http, platformLoaction, config) {
4699
+ constructor(http, platformLocation, config) {
4683
4700
  this.http = http;
4684
- this.platformLoaction = platformLoaction;
4701
+ this.platformLocation = platformLocation;
4685
4702
  this.config = config;
4686
4703
  this.withCredentials = false;
4687
- console.log("Base Href: " + platformLoaction.getBaseHrefFromDOM());
4704
+ console.log("Base Href: " + platformLocation.getBaseHrefFromDOM());
4688
4705
  let apiEndPoint = '';
4689
4706
  if (config && config.apiEndPoint) {
4690
4707
  apiEndPoint = config.apiEndPoint;
@@ -4723,9 +4740,9 @@ class ProjectService {
4723
4740
  }
4724
4741
  }
4725
4742
  ProjectService.PROJECT_API_CTX = 'project';
4726
- ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i1$1.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4727
- ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProjectService });
4728
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProjectService, decorators: [{
4743
+ ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i1$1.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4744
+ ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService });
4745
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProjectService, decorators: [{
4729
4746
  type: Injectable
4730
4747
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: i1$1.PlatformLocation }, { type: SpeechRecorderConfig, decorators: [{
4731
4748
  type: Inject,
@@ -4767,23 +4784,26 @@ class SessionService {
4767
4784
  let wrapObs = new Observable(subscriber => {
4768
4785
  this._uploadCount++;
4769
4786
  let obs = this.http.patch(sesssUrl, body, { withCredentials: this.withCredentials });
4770
- obs.subscribe((value) => {
4771
- subscriber.next(value);
4772
- }, error => {
4773
- this._uploadCount--;
4774
- subscriber.error(error);
4775
- }, () => {
4776
- this._uploadCount--;
4777
- subscriber.complete();
4787
+ obs.subscribe({
4788
+ next: (value) => {
4789
+ subscriber.next(value);
4790
+ },
4791
+ error: error => {
4792
+ this._uploadCount--;
4793
+ subscriber.error(error);
4794
+ }, complete: () => {
4795
+ this._uploadCount--;
4796
+ subscriber.complete();
4797
+ }
4778
4798
  });
4779
4799
  });
4780
4800
  return wrapObs;
4781
4801
  }
4782
4802
  }
4783
4803
  SessionService.SESSION_API_CTX = 'session';
4784
- SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4785
- SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService });
4786
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionService, decorators: [{
4804
+ SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
4805
+ SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionService });
4806
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionService, decorators: [{
4787
4807
  type: Injectable
4788
4808
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
4789
4809
  type: Inject,
@@ -4822,8 +4842,8 @@ class SimpleTrafficLight {
4822
4842
  }
4823
4843
  }
4824
4844
  }
4825
- SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
4826
- SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
4845
+ SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
4846
+ SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
4827
4847
 
4828
4848
  <div>
4829
4849
  <div class="circle {{lighttop}}"></div>
@@ -4831,7 +4851,7 @@ SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
4831
4851
  <div class="circle {{lightbottom}}"></div>
4832
4852
  </div>
4833
4853
  `, isInline: true, styles: [".circle{width:50px;height:50px;border-radius:50%;margin:5px;background:grey}\n", ".red{background:red}\n", ".yellow{background:yellow}\n", ".green{background:green}\n", ".black{background:black}\n", ":host{display:flex;flex-direction:column;background:black;padding:2px;height:170px;max-height:170px;flex:0 0 content}\n"] });
4834
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SimpleTrafficLight, decorators: [{
4854
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SimpleTrafficLight, decorators: [{
4835
4855
  type: Component,
4836
4856
  args: [{ selector: 'app-simpletrafficlight', template: `
4837
4857
 
@@ -4902,9 +4922,9 @@ class CanvasLayerComponent {
4902
4922
  }
4903
4923
  }
4904
4924
  }
4905
- CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4906
- CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: CanvasLayerComponent, ngImport: i0 });
4907
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: CanvasLayerComponent, decorators: [{
4925
+ CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
4926
+ CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: CanvasLayerComponent, ngImport: i0 });
4927
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: CanvasLayerComponent, decorators: [{
4908
4928
  type: Directive
4909
4929
  }], ctorParameters: function () { return []; } });
4910
4930
 
@@ -5144,9 +5164,9 @@ class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
5144
5164
  }
5145
5165
  }
5146
5166
  }
5147
- BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5148
- BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
5149
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
5167
+ BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5168
+ BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
5169
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
5150
5170
  type: Directive
5151
5171
  }] });
5152
5172
  class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
@@ -5323,9 +5343,9 @@ class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
5323
5343
  }
5324
5344
  }
5325
5345
  AudioCanvasLayerComponent.ENABLE_STREAMING_NUMBER_OF_SAMPLES_THRESHOLD = 10 * 60 * 48000; // Use streaming/chunking if audio clip has more than this number of samples
5326
- AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5327
- AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
5328
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
5346
+ AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
5347
+ AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
5348
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
5329
5349
  type: Directive
5330
5350
  }], propDecorators: { bgCanvasRef: [{
5331
5351
  type: ViewChild,
@@ -5855,14 +5875,14 @@ class AudioSignal extends AudioCanvasLayerComponent {
5855
5875
  this.playFramePosition = 0;
5856
5876
  }
5857
5877
  }
5858
- AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
5859
- AudioSignal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioSignal, selector: "audio-signal", viewQueries: [{ propertyName: "audioSignalCanvasRef", first: true, predicate: ["audioSignal"], descendants: true, static: true }, { propertyName: "playPosCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
5878
+ AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
5879
+ AudioSignal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioSignal, selector: "audio-signal", viewQueries: [{ propertyName: "audioSignalCanvasRef", first: true, predicate: ["audioSignal"], descendants: true, static: true }, { propertyName: "playPosCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
5860
5880
  <canvas #bg height="10"></canvas>
5861
5881
  <canvas #audioSignal height="10"></canvas>
5862
5882
  <canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
5863
5883
  (mouseleave)="updateCursorCanvas($event, false)"></canvas>
5864
5884
  <canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] });
5865
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioSignal, decorators: [{
5885
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioSignal, decorators: [{
5866
5886
  type: Component,
5867
5887
  args: [{ selector: 'audio-signal', template: `
5868
5888
  <canvas #bg height="10"></canvas>
@@ -7001,14 +7021,14 @@ class Sonagram extends AudioCanvasLayerComponent {
7001
7021
  this.playFramePosition = 0;
7002
7022
  }
7003
7023
  }
7004
- Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7005
- Sonagram.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7024
+ Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7025
+ Sonagram.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7006
7026
  <canvas #sonagram height="10"></canvas>
7007
7027
  <canvas #bg height="10"></canvas>
7008
7028
  <canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
7009
7029
  (mouseleave)="updateCursorCanvas($event, false)"></canvas>
7010
7030
  <canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] });
7011
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Sonagram, decorators: [{
7031
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Sonagram, decorators: [{
7012
7032
  type: Component,
7013
7033
  args: [{ selector: 'audio-sonagram', template: `
7014
7034
  <canvas #sonagram height="10"></canvas>
@@ -7380,16 +7400,16 @@ class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
7380
7400
  }
7381
7401
  }
7382
7402
  AudioClipUIContainer.DIVIDER_PIXEL_SIZE = 10;
7383
- AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7384
- AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioClipUIContainer, selector: "app-audio", inputs: { audioData: "audioData", audioClip: "audioClip" }, outputs: { selectionEventEmitter: "selectionEventEmitter" }, host: { listeners: { "window:resize": "onResize($event)", "document:mouseup": "onMouseup($event)", "document:mousemove": "onMousemove($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["divider"], descendants: true, static: true }, { propertyName: "ceRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "as", first: true, predicate: AudioSignal, descendants: true, static: true }, { propertyName: "so", first: true, predicate: Sonagram, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7403
+ AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7404
+ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioClipUIContainer, selector: "app-audio", inputs: { audioData: "audioData", audioClip: "audioClip" }, outputs: { selectionEventEmitter: "selectionEventEmitter" }, host: { listeners: { "window:resize": "onResize($event)", "document:mouseup": "onMouseup($event)", "document:mousemove": "onMousemove($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["divider"], descendants: true, static: true }, { propertyName: "ceRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "as", first: true, predicate: AudioSignal, descendants: true, static: true }, { propertyName: "so", first: true, predicate: Sonagram, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
7385
7405
  <div #virtualCanvas>
7386
7406
  <canvas #divider (mousedown)="mousedown($event)" (mouseover)="mouseover($event)"
7387
7407
  (mouseleave)="mouseleave($event)" height="10"></canvas>
7388
7408
  <audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
7389
7409
  <audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
7390
7410
  </div>
7391
- `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"], dependencies: [{ kind: "component", type: AudioSignal, selector: "audio-signal" }, { kind: "component", type: Sonagram, selector: "audio-sonagram" }] });
7392
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioClipUIContainer, decorators: [{
7411
+ `, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;z-index:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;z-index:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;z-index:1;transform:none}\n"], dependencies: [{ kind: "component", type: AudioSignal, selector: "audio-signal" }, { kind: "component", type: Sonagram, selector: "audio-sonagram" }] });
7412
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioClipUIContainer, decorators: [{
7393
7413
  type: Component,
7394
7414
  args: [{ selector: 'app-audio', template: `
7395
7415
  <div #virtualCanvas>
@@ -7398,7 +7418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7398
7418
  <audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
7399
7419
  <audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
7400
7420
  </div>
7401
- `, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"] }]
7421
+ `, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;z-index:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;z-index:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;z-index:1;transform:none}\n"] }]
7402
7422
  }], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { canvasRef: [{
7403
7423
  type: ViewChild,
7404
7424
  args: ['divider', { static: true }]
@@ -7534,13 +7554,13 @@ class AudioDisplayScrollPane {
7534
7554
  this.ac.playFramePosition = framePos;
7535
7555
  }
7536
7556
  }
7537
- AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7538
- AudioDisplayScrollPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: { audioClip: "audioClip" }, outputs: { zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomSelectedAction: "zoomSelectedAction", zoomFitToPanelAction: "zoomFitToPanelAction" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "ac", first: true, predicate: AudioClipUIContainer, descendants: true, static: true }], ngImport: i0, template: `
7557
+ AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7558
+ AudioDisplayScrollPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: { audioClip: "audioClip" }, outputs: { zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomSelectedAction: "zoomSelectedAction", zoomFitToPanelAction: "zoomFitToPanelAction" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "ac", first: true, predicate: AudioClipUIContainer, descendants: true, static: true }], ngImport: i0, template: `
7539
7559
 
7540
7560
  <app-audio #audioSignalContainer (selectionEventEmitter)="selectionChanged($event)"></app-audio>
7541
7561
 
7542
7562
  `, isInline: true, styles: [":host{flex:2;width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "app-audio{margin:0;padding:0;top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n"], dependencies: [{ kind: "component", type: AudioClipUIContainer, selector: "app-audio", inputs: ["audioData", "audioClip"], outputs: ["selectionEventEmitter"] }] });
7543
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
7563
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
7544
7564
  type: Component,
7545
7565
  args: [{ selector: 'audio-display-scroll-pane', template: `
7546
7566
 
@@ -7597,8 +7617,8 @@ class AudioDisplayControl {
7597
7617
  this.status = 'ERROR';
7598
7618
  }
7599
7619
  }
7600
- AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayControl, deps: [], target: i0.ɵɵFactoryTarget.Component });
7601
- AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
7620
+ AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayControl, deps: [], target: i0.ɵɵFactoryTarget.Component });
7621
+ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
7602
7622
  <div #controlPanel style="display:flex;flex-direction: row;">
7603
7623
  <fieldset>
7604
7624
 
@@ -7642,7 +7662,7 @@ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ve
7642
7662
 
7643
7663
  </fieldset>
7644
7664
  </div>`, isInline: true, styles: [":host{flex:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "component", type: i4$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex"], exportAs: ["matCheckbox"] }] });
7645
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayControl, decorators: [{
7665
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayControl, decorators: [{
7646
7666
  type: Component,
7647
7667
  args: [{ selector: 'audio-display-control', template: `
7648
7668
  <div #controlPanel style="display:flex;flex-direction: row;">
@@ -7712,8 +7732,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7712
7732
  }] } });
7713
7733
 
7714
7734
  class AudioDisplay {
7715
- constructor(route, ref, eRef) {
7716
- this.route = route;
7735
+ constructor(ref, eRef) {
7717
7736
  this.ref = ref;
7718
7737
  this.eRef = eRef;
7719
7738
  this._audioClip = null;
@@ -7776,8 +7795,8 @@ class AudioDisplay {
7776
7795
  this.status = 'ERROR';
7777
7796
  }
7778
7797
  }
7779
- AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplay, deps: [{ token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7780
- AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", 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: `
7798
+ AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplay, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
7799
+ 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: `
7781
7800
 
7782
7801
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
7783
7802
 
@@ -7791,7 +7810,7 @@ AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
7791
7810
  [zoomSelectedAction]="zoomSelectedAction"
7792
7811
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
7793
7812
  `, 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: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
7794
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplay, decorators: [{
7813
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplay, decorators: [{
7795
7814
  type: Component,
7796
7815
  args: [{ selector: 'app-audiodisplay', template: `
7797
7816
 
@@ -7807,7 +7826,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
7807
7826
  [zoomSelectedAction]="zoomSelectedAction"
7808
7827
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
7809
7828
  `, 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"] }]
7810
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
7829
+ }], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
7811
7830
  type: Input
7812
7831
  }], playStopAction: [{
7813
7832
  type: Input
@@ -7838,11 +7857,11 @@ class ResponsiveComponent {
7838
7857
  });
7839
7858
  }
7840
7859
  }
7841
- ResponsiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive });
7842
- ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ResponsiveComponent, ngImport: i0 });
7843
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ResponsiveComponent, decorators: [{
7860
+ ResponsiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Directive });
7861
+ ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ResponsiveComponent, ngImport: i0 });
7862
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, decorators: [{
7844
7863
  type: Directive
7845
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; } });
7864
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; } });
7846
7865
 
7847
7866
  class ScrollIntoViewDirective {
7848
7867
  constructor(elRef) {
@@ -7854,9 +7873,9 @@ class ScrollIntoViewDirective {
7854
7873
  }
7855
7874
  }
7856
7875
  }
7857
- ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
7858
- ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.3.0", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 });
7859
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
7876
+ ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
7877
+ ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 });
7878
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
7860
7879
  type: Directive,
7861
7880
  args: [{
7862
7881
  selector: "[scrollIntoViewToBottom]"
@@ -7903,8 +7922,8 @@ class Progress {
7903
7922
  return cached;
7904
7923
  }
7905
7924
  }
7906
- Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
7907
- Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
7925
+ Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
7926
+ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
7908
7927
 
7909
7928
  <table class="mat-typography">
7910
7929
  <thead>
@@ -7933,7 +7952,7 @@ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.
7933
7952
  </tbody>
7934
7953
  </table>
7935
7954
  `, isInline: true, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:white;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:lightblue}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }] });
7936
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Progress, decorators: [{
7955
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Progress, decorators: [{
7937
7956
  type: Component,
7938
7957
  args: [{ selector: 'app-sprprogress', template: `
7939
7958
 
@@ -7996,12 +8015,12 @@ class Recinstructions {
7996
8015
  return riTxt;
7997
8016
  }
7998
8017
  }
7999
- Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
8000
- Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Recinstructions, selector: "spr-recinstructions", inputs: { recinstructions: "recinstructions", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount" }, ngImport: i0, template: `
8018
+ Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
8019
+ Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Recinstructions, selector: "spr-recinstructions", inputs: { recinstructions: "recinstructions", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount" }, ngImport: i0, template: `
8001
8020
 
8002
8021
  {{displayText()}}
8003
8022
  `, isInline: true, styles: [":host{justify-content:left;align-items:flex-start;background:white;text-align:left;font-size:1em;flex:0;width:100%}\n"] });
8004
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Recinstructions, decorators: [{
8023
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Recinstructions, decorators: [{
8005
8024
  type: Component,
8006
8025
  args: [{ selector: 'spr-recinstructions', template: `
8007
8026
 
@@ -8175,13 +8194,13 @@ class Prompter {
8175
8194
  }
8176
8195
  }
8177
8196
  }
8178
- Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompter, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ProjectService }], target: i0.ɵɵFactoryTarget.Component });
8179
- Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Prompter, selector: "app-sprprompter", inputs: { projectName: "projectName", prompterHeight: "prompterHeight", promptMediaItems: "promptMediaItems" }, host: { properties: { "class.fill": "this.prompterStyleFill" } }, ngImport: i0, template: `
8197
+ Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompter, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ProjectService }], target: i0.ɵɵFactoryTarget.Component });
8198
+ Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Prompter, selector: "app-sprprompter", inputs: { projectName: "projectName", prompterHeight: "prompterHeight", promptMediaItems: "promptMediaItems" }, host: { properties: { "class.fill": "this.prompterStyleFill" } }, ngImport: i0, template: `
8180
8199
 
8181
8200
  <!--<ng-template [ngIf]="text">{{text}}</ng-template>-->
8182
8201
  <!-- <img *ngIf="src" #promptImage [src]="srcUrl()" [height]="prompterHeight-20" /> -->
8183
8202
  `, isInline: true, styles: [":host{justify-content:center;align-items:center;background:white;text-align:center;line-height:1.2em;font-weight:700;flex:0 1}\n", ":host(.fill){flex:3;width:100%;height:100%;max-height:100%;max-width:100%;vertical-align:middle}\n"] });
8184
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompter, decorators: [{
8203
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompter, decorators: [{
8185
8204
  type: Component,
8186
8205
  args: [{ selector: 'app-sprprompter', template: `
8187
8206
 
@@ -8329,11 +8348,11 @@ class PromptContainer {
8329
8348
  }
8330
8349
  }
8331
8350
  }
8332
- PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8333
- PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: { projectName: "projectName", mediaitems: "mediaitems" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "prompter", first: true, predicate: Prompter, descendants: true, static: true }], ngImport: i0, template: `
8351
+ PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8352
+ PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: { projectName: "projectName", mediaitems: "mediaitems" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "prompter", first: true, predicate: Prompter, descendants: true, static: true }], ngImport: i0, template: `
8334
8353
  <app-sprprompter #prompter [projectName]="projectName" [promptMediaItems]="mediaitems" [style.font-size]="fontSize+'px'" [style.visibility]="prDisplay" [prompterHeight]="prompterHeight"></app-sprprompter>
8335
8354
  `, isInline: true, styles: [":host{flex:3;padding:10pt;height:100%;max-height:100%;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px;width:100%}\n"], dependencies: [{ kind: "component", type: Prompter, selector: "app-sprprompter", inputs: ["projectName", "prompterHeight", "promptMediaItems"] }] });
8336
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptContainer, decorators: [{
8355
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptContainer, decorators: [{
8337
8356
  type: Component,
8338
8357
  args: [{ selector: 'app-sprpromptcontainer', template: `
8339
8358
  <app-sprprompter #prompter [projectName]="projectName" [promptMediaItems]="mediaitems" [style.font-size]="fontSize+'px'" [style.visibility]="prDisplay" [prompterHeight]="prompterHeight"></app-sprprompter>
@@ -8456,15 +8475,15 @@ class PromptingContainer {
8456
8475
  //ev.preventDefault();
8457
8476
  }
8458
8477
  }
8459
- PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8460
- PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: { projectName: "projectName", promptItem: "promptItem", showPrompt: "showPrompt", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount", transportActions: "transportActions" }, host: { listeners: { "touchstart": "onTouchstart($event)", "touchend": "onTouchEnd($event)", "touchmove": "onTouchMove($event)", "touchcancel": "onTouchCancel($event)" } }, ngImport: i0, template: `
8478
+ PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
8479
+ PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: { projectName: "projectName", promptItem: "promptItem", showPrompt: "showPrompt", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount", transportActions: "transportActions" }, host: { listeners: { "touchstart": "onTouchstart($event)", "touchend": "onTouchEnd($event)", "touchmove": "onTouchMove($event)", "touchcancel": "onTouchCancel($event)" } }, ngImport: i0, template: `
8461
8480
  <spr-recinstructions [selectedItemIdx]="selectedItemIdx" [itemCount]="itemCount"
8462
8481
  [recinstructions]="promptItem?.recinstructions?.recinstructions"></spr-recinstructions>
8463
8482
  <app-sprpromptcontainer [projectName]="projectName"
8464
8483
  [mediaitems]="showPrompt?(promptItem?promptItem.mediaitems:null):null"></app-sprpromptcontainer>
8465
8484
 
8466
8485
  `, isInline: true, styles: [":host{position:relative;flex:3;padding:10pt;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px}\n"], dependencies: [{ kind: "component", type: Recinstructions, selector: "spr-recinstructions", inputs: ["recinstructions", "selectedItemIdx", "itemCount"] }, { kind: "component", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: ["projectName", "mediaitems"] }] });
8467
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: PromptingContainer, decorators: [{
8486
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: PromptingContainer, decorators: [{
8468
8487
  type: Component,
8469
8488
  args: [{ selector: 'app-sprpromptingcontainer', template: `
8470
8489
  <spr-recinstructions [selectedItemIdx]="selectedItemIdx" [itemCount]="itemCount"
@@ -8522,8 +8541,8 @@ class Prompting extends ResponsiveComponent {
8522
8541
  this.onPrevItem.emit();
8523
8542
  }
8524
8543
  }
8525
- Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompting, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
8526
- Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: Prompting, selector: "app-sprprompting", inputs: { projectName: "projectName", startStopSignalState: "startStopSignalState", promptItem: "promptItem", showPrompt: "showPrompt", items: "items", selectedItemIdx: "selectedItemIdx", transportActions: "transportActions", enableDownload: "enableDownload", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { onItemSelect: "onItemSelect", onNextItem: "onNextItem", onPrevItem: "onPrevItem" }, viewQueries: [{ propertyName: "simpleTrafficLight", first: true, predicate: SimpleTrafficLight, descendants: true, static: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
8544
+ Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
8545
+ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: Prompting, selector: "app-sprprompting", inputs: { projectName: "projectName", startStopSignalState: "startStopSignalState", promptItem: "promptItem", showPrompt: "showPrompt", items: "items", selectedItemIdx: "selectedItemIdx", transportActions: "transportActions", enableDownload: "enableDownload", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { onItemSelect: "onItemSelect", onNextItem: "onNextItem", onPrevItem: "onPrevItem" }, viewQueries: [{ propertyName: "simpleTrafficLight", first: true, predicate: SimpleTrafficLight, descendants: true, static: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
8527
8546
 
8528
8547
  <app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
8529
8548
  <app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
@@ -8546,7 +8565,7 @@ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14
8546
8565
 
8547
8566
 
8548
8567
  `, isInline: true, styles: [":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "app-simpletrafficlight{margin:10px;min-height:0px;z-index:3}\n", "app-sprprogress{z-index:3}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }, { kind: "component", type: Progress, selector: "app-sprprogress", inputs: ["items", "selectedItemIdx", "enableDownload"], outputs: ["onRowSelect", "rowSelect", "onShowDoneAction", "clickDone", "onDownloadDoneAction", "clickDownloadDone"] }, { kind: "component", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: ["status"] }, { kind: "component", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: ["projectName", "promptItem", "showPrompt", "selectedItemIdx", "itemCount", "transportActions"] }] });
8549
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: Prompting, decorators: [{
8568
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, decorators: [{
8550
8569
  type: Component,
8551
8570
  args: [{ selector: 'app-sprprompting', template: `
8552
8571
 
@@ -8571,7 +8590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
8571
8590
 
8572
8591
 
8573
8592
  `, styles: [":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "app-simpletrafficlight{margin:10px;min-height:0px;z-index:3}\n", "app-sprprogress{z-index:3}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"] }]
8574
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
8593
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
8575
8594
  type: ViewChild,
8576
8595
  args: [SimpleTrafficLight, { static: true }]
8577
8596
  }], audioDisplay: [{
@@ -8622,8 +8641,8 @@ class SessionFinishedDialog {
8622
8641
  this.dialogRef.close();
8623
8642
  }
8624
8643
  }
8625
- SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1$4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8626
- SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SessionFinishedDialog, selector: "spr-session-finished-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
8644
+ SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1$3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8645
+ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SessionFinishedDialog, selector: "spr-session-finished-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon [style.color]="'green'">done_all</mat-icon> Session finished</h1>
8627
8646
  <div mat-dialog-content>
8628
8647
 
8629
8648
  <p>Thank you! The recording session is complete.</p>
@@ -8632,8 +8651,8 @@ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
8632
8651
  <div mat-dialog-actions>
8633
8652
  <button mat-button (click)="closeDialog()">OK</button>
8634
8653
  </div>
8635
- `, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8636
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionFinishedDialog, decorators: [{
8654
+ `, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8655
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, decorators: [{
8637
8656
  type: Component,
8638
8657
  args: [{
8639
8658
  selector: 'spr-session-finished-dialog',
@@ -8648,7 +8667,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
8648
8667
  </div>
8649
8668
  `
8650
8669
  }]
8651
- }], ctorParameters: function () { return [{ type: i1$4.MatDialogRef }, { type: undefined, decorators: [{
8670
+ }], ctorParameters: function () { return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
8652
8671
  type: Inject,
8653
8672
  args: [MAT_DIALOG_DATA]
8654
8673
  }] }]; } });
@@ -8662,8 +8681,8 @@ class MessageDialog {
8662
8681
  this.dialogRef.close();
8663
8682
  }
8664
8683
  }
8665
- MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageDialog, deps: [{ token: i1$4.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8666
- MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: MessageDialog, selector: "msg-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
8684
+ MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, deps: [{ token: i1$3.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
8685
+ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: MessageDialog, selector: "msg-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
8667
8686
  <mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
8668
8687
  <div mat-dialog-content>
8669
8688
 
@@ -8674,8 +8693,8 @@ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
8674
8693
  <div mat-dialog-actions>
8675
8694
  <button mat-button (click)="closeDialog()">OK</button>
8676
8695
  </div>
8677
- `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$4.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$4.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$4.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8678
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: MessageDialog, decorators: [{
8696
+ `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "directive", type: i1$3.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { kind: "directive", type: i1$3.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { kind: "directive", type: i1$3.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]", inputs: ["align"] }] });
8697
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, decorators: [{
8679
8698
  type: Component,
8680
8699
  args: [{
8681
8700
  selector: 'msg-dialog',
@@ -8692,7 +8711,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
8692
8711
  </div>
8693
8712
  `
8694
8713
  }]
8695
- }], ctorParameters: function () { return [{ type: i1$4.MatDialogRef }, { type: undefined, decorators: [{
8714
+ }], ctorParameters: function () { return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
8696
8715
  type: Inject,
8697
8716
  args: [MAT_DIALOG_DATA]
8698
8717
  }] }]; } });
@@ -8993,62 +9012,64 @@ let BasicRecordingService = class BasicRecordingService {
8993
9012
  ausps.set('requestUUID', UUID.generate());
8994
9013
  }
8995
9014
  let obs = new Observable(observer => {
8996
- this.audioRequestByURL(baseAudioUrl, ausps).subscribe(resp => {
8997
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
8998
- if (resp.body) {
8999
- //console.debug("chunkAudioRequest: observer.closed: "+observer.closed);
9000
- //console.debug("Audio file bytes: "+resp.body.byteLength);
9001
- // Check original audio format
9002
- let wr = new WavReader(resp.body);
9003
- const pcmFmt = wr.readFormat();
9004
- const orgFl = wr.frameLength();
9005
- // if(pcmFmt){
9006
- // console.debug("Original WAVE format of download chunk: "+pcmFmt);
9007
- // }else{
9008
- // console.error("Could not read WAVE format of original download chunk!");
9009
- // }
9010
- // if(orgFl){
9011
- // console.debug("Original frame length of download chunk: "+orgFl);
9012
- // }else{
9013
- // console.error("Could not read WAVE format of original download chunk!");
9014
- // }
9015
- if (pcmFmt && orgFl) {
9016
- aCtx.decodeAudioData(resp.body, ab => {
9017
- //console.debug("Decoded audio chunk frames: "+ab.length);
9018
- let chDl = new ChunkDownload(pcmFmt, orgFl, ab);
9019
- observer.next(chDl);
9020
- observer.complete();
9021
- }, error => {
9022
- //if(error instanceof HttpErrorResponse) {
9023
- // if (error.status == 404) {
9024
- // // Interpret not as an error, the file ist not recorded yet
9025
- // observer.next(null);
9026
- // observer.complete()
9027
- // } else {
9028
- // // all other states are errors
9029
- console.error("Recordings service chunkAudioRequest error decoding audio data: " + error.name + ": " + error.message);
9030
- observer.error(error);
9031
- // }
9032
- // }
9033
- });
9015
+ this.audioRequestByURL(baseAudioUrl, ausps).subscribe({
9016
+ next: resp => {
9017
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9018
+ if (resp.body) {
9019
+ //console.debug("chunkAudioRequest: observer.closed: "+observer.closed);
9020
+ //console.debug("Audio file bytes: "+resp.body.byteLength);
9021
+ // Check original audio format
9022
+ let wr = new WavReader(resp.body);
9023
+ const pcmFmt = wr.readFormat();
9024
+ const orgFl = wr.frameLength();
9025
+ // if(pcmFmt){
9026
+ // console.debug("Original WAVE format of download chunk: "+pcmFmt);
9027
+ // }else{
9028
+ // console.error("Could not read WAVE format of original download chunk!");
9029
+ // }
9030
+ // if(orgFl){
9031
+ // console.debug("Original frame length of download chunk: "+orgFl);
9032
+ // }else{
9033
+ // console.error("Could not read WAVE format of original download chunk!");
9034
+ // }
9035
+ if (pcmFmt && orgFl) {
9036
+ aCtx.decodeAudioData(resp.body, ab => {
9037
+ //console.debug("Decoded audio chunk frames: "+ab.length);
9038
+ let chDl = new ChunkDownload(pcmFmt, orgFl, ab);
9039
+ observer.next(chDl);
9040
+ observer.complete();
9041
+ }, error => {
9042
+ //if(error instanceof HttpErrorResponse) {
9043
+ // if (error.status == 404) {
9044
+ // // Interpret not as an error, the file ist not recorded yet
9045
+ // observer.next(null);
9046
+ // observer.complete()
9047
+ // } else {
9048
+ // // all other states are errors
9049
+ console.error("Recordings service chunkAudioRequest error decoding audio data: " + error.name + ": " + error.message);
9050
+ observer.error(error);
9051
+ // }
9052
+ // }
9053
+ });
9054
+ }
9055
+ else {
9056
+ const errMsg = 'Could not parse audio header for format and/or frame length of download.';
9057
+ console.error(errMsg);
9058
+ observer.error(errMsg);
9059
+ }
9034
9060
  }
9035
9061
  else {
9036
- const errMsg = 'Could not parse audio header for format and/or frame length of download.';
9062
+ const errMsg = 'Fetching audio file: response has no body';
9037
9063
  console.error(errMsg);
9038
9064
  observer.error(errMsg);
9039
9065
  }
9066
+ }, error: (error) => {
9067
+ // all other states are errors
9068
+ //const errMsg='Fetching audio file HTTP error: '+error;
9069
+ //console.error(errMsg);
9070
+ observer.error(error);
9071
+ //observer.complete();
9040
9072
  }
9041
- else {
9042
- const errMsg = 'Fetching audio file: response has no body';
9043
- console.error(errMsg);
9044
- observer.error(errMsg);
9045
- }
9046
- }, (error) => {
9047
- // all other states are errors
9048
- //const errMsg='Fetching audio file HTTP error: '+error;
9049
- //console.error(errMsg);
9050
- observer.error(error);
9051
- //observer.complete();
9052
9073
  });
9053
9074
  });
9054
9075
  return obs;
@@ -9618,36 +9639,38 @@ class RecordingService extends BasicRecordingService {
9618
9639
  }
9619
9640
  if (recordingFile.session && recFileId) {
9620
9641
  let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
9621
- obs.subscribe(resp => {
9622
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9623
- if (resp.body) {
9624
- aCtx.decodeAudioData(resp.body, ab => {
9625
- observer.next(ab);
9626
- observer.complete();
9627
- }, error => {
9628
- observer.error(error);
9629
- observer.complete();
9630
- });
9631
- }
9632
- else {
9633
- observer.error('Fetching audio file: response has no body');
9634
- }
9635
- }, (err) => {
9636
- if (err instanceof HttpErrorResponse) {
9637
- if (err.status == 404) {
9638
- // Interpret not as an error, the file ist not recorded yet
9639
- observer.next(null);
9640
- observer.complete();
9642
+ obs.subscribe({
9643
+ next: resp => {
9644
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9645
+ if (resp.body) {
9646
+ aCtx.decodeAudioData(resp.body, ab => {
9647
+ observer.next(ab);
9648
+ observer.complete();
9649
+ }, error => {
9650
+ observer.error(error);
9651
+ observer.complete();
9652
+ });
9653
+ }
9654
+ else {
9655
+ observer.error('Fetching audio file: response has no body');
9656
+ }
9657
+ }, error: (err) => {
9658
+ if (err instanceof HttpErrorResponse) {
9659
+ if (err.status == 404) {
9660
+ // Interpret not as an error, the file ist not recorded yet
9661
+ observer.next(null);
9662
+ observer.complete();
9663
+ }
9664
+ else {
9665
+ // all other states are errors
9666
+ observer.error(err);
9667
+ observer.complete();
9668
+ }
9641
9669
  }
9642
9670
  else {
9643
- // all other states are errors
9644
9671
  observer.error(err);
9645
- observer.complete();
9646
9672
  }
9647
9673
  }
9648
- else {
9649
- observer.error(err);
9650
- }
9651
9674
  });
9652
9675
  }
9653
9676
  else {
@@ -9664,49 +9687,50 @@ class RecordingService extends BasicRecordingService {
9664
9687
  }
9665
9688
  if (recordingFile.session && recFileId) {
9666
9689
  let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
9667
- obs.subscribe(resp => {
9668
- //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
9669
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9670
- if (resp.body) {
9671
- aCtx.decodeAudioData(resp.body, ab => {
9672
- let abs = new AudioBufferSource(ab);
9673
- let adh = new AudioDataHolder(abs);
9674
- RecordingFileUtils.setAudioData(recordingFile, adh);
9675
- if (this.debugDelay > 0) {
9676
- window.setTimeout(() => {
9690
+ obs.subscribe({ next: resp => {
9691
+ //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
9692
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
9693
+ if (resp.body) {
9694
+ aCtx.decodeAudioData(resp.body, ab => {
9695
+ let abs = new AudioBufferSource(ab);
9696
+ let adh = new AudioDataHolder(abs);
9697
+ RecordingFileUtils.setAudioData(recordingFile, adh);
9698
+ if (this.debugDelay > 0) {
9699
+ window.setTimeout(() => {
9700
+ observer.next(recordingFile);
9701
+ observer.complete();
9702
+ }, this.debugDelay);
9703
+ }
9704
+ else {
9677
9705
  observer.next(recordingFile);
9678
9706
  observer.complete();
9679
- }, this.debugDelay);
9707
+ }
9708
+ }, error => {
9709
+ observer.error(error);
9710
+ observer.complete();
9711
+ });
9712
+ }
9713
+ else {
9714
+ observer.error('Fetching audio file: response has no body');
9715
+ }
9716
+ },
9717
+ error: (err) => {
9718
+ if (err instanceof HttpErrorResponse) {
9719
+ if (err.status == 404) {
9720
+ // Interpret not as an error, the file ist not recorded yet
9721
+ observer.next(null);
9722
+ observer.complete();
9680
9723
  }
9681
9724
  else {
9682
- observer.next(recordingFile);
9725
+ // all other states are errors
9726
+ observer.error(err);
9683
9727
  observer.complete();
9684
9728
  }
9685
- }, error => {
9686
- observer.error(error);
9687
- observer.complete();
9688
- });
9689
- }
9690
- else {
9691
- observer.error('Fetching audio file: response has no body');
9692
- }
9693
- }, (err) => {
9694
- if (err instanceof HttpErrorResponse) {
9695
- if (err.status == 404) {
9696
- // Interpret not as an error, the file ist not recorded yet
9697
- observer.next(null);
9698
- observer.complete();
9699
9729
  }
9700
9730
  else {
9701
- // all other states are errors
9702
9731
  observer.error(err);
9703
- observer.complete();
9704
9732
  }
9705
- }
9706
- else {
9707
- observer.error(err);
9708
- }
9709
- });
9733
+ } });
9710
9734
  }
9711
9735
  else {
9712
9736
  observer.error();
@@ -10028,83 +10052,88 @@ class RecordingService extends BasicRecordingService {
10028
10052
  let wobs = new Observable(observer => {
10029
10053
  if (recordingFile.session) {
10030
10054
  let obs = this.fetchSprAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);
10031
- obs.subscribe(resp => {
10032
- //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
10033
- // Do not use Promise version, which does not work with Safari 13 (13.0.5)
10055
+ obs.subscribe({
10056
+ next: resp => {
10057
+ //console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
10058
+ // Do not use Promise version, which does not work with Safari 13 (13.0.5)
10059
+ if (resp.body) {
10060
+ aCtx.decodeAudioData(resp.body, ab => {
10061
+ let abs = new AudioBufferSource(ab);
10062
+ RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(abs));
10063
+ if (this.debugDelay > 0) {
10064
+ window.setTimeout(() => {
10065
+ observer.next(recordingFile);
10066
+ observer.complete();
10067
+ }, this.debugDelay);
10068
+ }
10069
+ else {
10070
+ observer.next(recordingFile);
10071
+ observer.complete();
10072
+ }
10073
+ }, error => {
10074
+ observer.error(error);
10075
+ observer.complete();
10076
+ });
10077
+ }
10078
+ else {
10079
+ observer.error('Fetching audio file: response has no body');
10080
+ }
10081
+ },
10082
+ error: (err) => {
10083
+ if (err instanceof HttpErrorResponse && err.status == 404) {
10084
+ // Interpret not as an error, the file ist not recorded yet
10085
+ observer.next(null);
10086
+ observer.complete();
10087
+ }
10088
+ else {
10089
+ // all other states are errors
10090
+ observer.error(err);
10091
+ }
10092
+ }
10093
+ });
10094
+ }
10095
+ else {
10096
+ observer.error();
10097
+ }
10098
+ });
10099
+ return wobs;
10100
+ }
10101
+ fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
10102
+ let wobs = new Observable(observer => {
10103
+ let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
10104
+ obs.subscribe({ next: resp => {
10105
+ // Do not use Promise version, which does not work with Safari 13
10034
10106
  if (resp.body) {
10035
10107
  aCtx.decodeAudioData(resp.body, ab => {
10036
10108
  let abs = new AudioBufferSource(ab);
10037
- RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(abs));
10109
+ let adh = new AudioDataHolder(abs);
10110
+ let rf = new SprRecordingFile(sessId, itemcode, version, adh);
10038
10111
  if (this.debugDelay > 0) {
10039
10112
  window.setTimeout(() => {
10040
- observer.next(recordingFile);
10113
+ observer.next(rf);
10041
10114
  observer.complete();
10042
10115
  }, this.debugDelay);
10043
10116
  }
10044
10117
  else {
10045
- observer.next(recordingFile);
10118
+ observer.next(rf);
10046
10119
  observer.complete();
10047
10120
  }
10048
- }, error => {
10049
- observer.error(error);
10050
- observer.complete();
10051
10121
  });
10052
10122
  }
10053
10123
  else {
10054
- observer.error('Fetching audio file: response has no body');
10124
+ observer.error();
10055
10125
  }
10056
- }, (err) => {
10126
+ },
10127
+ error: (err) => {
10057
10128
  if (err instanceof HttpErrorResponse && err.status == 404) {
10058
10129
  // Interpret not as an error, the file ist not recorded yet
10059
10130
  observer.next(null);
10060
10131
  observer.complete();
10061
10132
  }
10062
10133
  else {
10063
- // all other states are errors
10134
+ // all other errors are real errors
10064
10135
  observer.error(err);
10065
10136
  }
10066
- });
10067
- }
10068
- else {
10069
- observer.error();
10070
- }
10071
- });
10072
- return wobs;
10073
- }
10074
- fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
10075
- let wobs = new Observable(observer => {
10076
- let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
10077
- obs.subscribe(resp => {
10078
- // Do not use Promise version, which does not work with Safari 13
10079
- if (resp.body) {
10080
- aCtx.decodeAudioData(resp.body, ab => {
10081
- let abs = new AudioBufferSource(ab);
10082
- let adh = new AudioDataHolder(abs);
10083
- let rf = new SprRecordingFile(sessId, itemcode, version, adh);
10084
- if (this.debugDelay > 0) {
10085
- window.setTimeout(() => {
10086
- observer.next(rf);
10087
- observer.complete();
10088
- }, this.debugDelay);
10089
- }
10090
- else {
10091
- observer.next(rf);
10092
- observer.complete();
10093
- }
10094
- });
10095
- }
10096
- else {
10097
- observer.error();
10098
- }
10099
- }, (err) => {
10100
- if (err instanceof HttpErrorResponse && err.status == 404) {
10101
- // Interpret not as an error, the file ist not recorded yet
10102
- observer.next(null);
10103
- observer.complete();
10104
- }
10105
- else {
10106
- // all other errors are real errors
10107
- observer.error(err);
10108
10137
  }
10109
10138
  });
10110
10139
  });
@@ -10115,9 +10144,9 @@ class RecordingService extends BasicRecordingService {
10115
10144
  //public static readonly DEFAULT_CHUNKED_DOWNLOAD_SECONDS:number=4;
10116
10145
  RecordingService.REC_API_CTX = 'recfile';
10117
10146
  RecordingService.RECORDING_API_CTX = 'recordingfile';
10118
- RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
10119
- RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingService });
10120
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingService, decorators: [{
10147
+ RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
10148
+ RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingService });
10149
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingService, decorators: [{
10121
10150
  type: Injectable
10122
10151
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
10123
10152
  type: Inject,
@@ -10492,14 +10521,14 @@ class LevelBar {
10492
10521
  }
10493
10522
  }
10494
10523
  }
10495
- LevelBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
10496
- LevelBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos", state: "state" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
10524
+ LevelBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
10525
+ LevelBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos", state: "state" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
10497
10526
  <div #virtualCanvas>
10498
10527
  <canvas #levelbar></canvas>
10499
10528
  <canvas #markerCanvas></canvas>
10500
10529
  </div>
10501
10530
  `, isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "div{top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n", "canvas{top:0;left:0;width:100%;height:100%;position:absolute}\n"] });
10502
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: LevelBar, decorators: [{
10531
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: LevelBar, decorators: [{
10503
10532
  type: Component,
10504
10533
  args: [{ selector: 'audio-levelbar', template: `
10505
10534
  <div #virtualCanvas>
@@ -10537,14 +10566,14 @@ class StatusDisplay {
10537
10566
  this.statusWaiting = false;
10538
10567
  }
10539
10568
  }
10540
- StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10541
- StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
10569
+ StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10570
+ StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
10542
10571
  <p matTooltip="Status">
10543
10572
  <mat-progress-spinner *ngIf="statusWaiting" color="black" mode="indeterminate" [diameter]="30" [strokeWidth]="5"></mat-progress-spinner><mat-icon *ngIf="statusAlertType==='error'" style="color:red">report_problem</mat-icon>
10544
10573
  {{statusMsg}}
10545
10574
  </p>
10546
10575
  `, isInline: true, styles: [":host{display:inline;text-align:left;font-size:smaller}\n", "p{padding:4px;white-space:nowrap;display:inline-block}\n", "mat-progress-spinner{color:#000;display:inline-block}\n", "span{color:red}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
10547
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: StatusDisplay, decorators: [{
10576
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: StatusDisplay, decorators: [{
10548
10577
  type: Component,
10549
10578
  args: [{ selector: 'app-sprstatusdisplay', template: `
10550
10579
  <p matTooltip="Status">
@@ -10563,7 +10592,7 @@ class UploadStatus {
10563
10592
  constructor() {
10564
10593
  this._awaitNewUpload = false;
10565
10594
  this.spinnerMode = 'determinate';
10566
- this._colorStatus = 'primary';
10595
+ this.colorStatus = 'primary';
10567
10596
  this._value = 100;
10568
10597
  this.displayValue = null;
10569
10598
  this.toolTipText = '';
@@ -10602,13 +10631,13 @@ class UploadStatus {
10602
10631
  set status(status) {
10603
10632
  this._status = status;
10604
10633
  if ('accent' === status) {
10605
- this._colorStatus = 'accent';
10634
+ this.colorStatus = 'accent';
10606
10635
  }
10607
10636
  else if ('warn' === status) {
10608
- this._colorStatus = 'warn';
10637
+ this.colorStatus = 'warn';
10609
10638
  }
10610
10639
  else {
10611
- this._colorStatus = 'primary';
10640
+ this.colorStatus = 'primary';
10612
10641
  }
10613
10642
  this._updateSpinner();
10614
10643
  }
@@ -10616,14 +10645,16 @@ class UploadStatus {
10616
10645
  return this._status;
10617
10646
  }
10618
10647
  }
10619
- UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
10620
- UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
10621
- <mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
10648
+ UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
10649
+ UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
10650
+ <mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
10651
+ [matTooltip]="toolTipText"></mat-progress-spinner>
10622
10652
  `, isInline: true, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"], dependencies: [{ kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
10623
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: UploadStatus, decorators: [{
10653
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, decorators: [{
10624
10654
  type: Component,
10625
10655
  args: [{ selector: 'app-uploadstatus', template: `
10626
- <mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
10656
+ <mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
10657
+ [matTooltip]="toolTipText"></mat-progress-spinner>
10627
10658
  `, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"] }]
10628
10659
  }], propDecorators: { value: [{
10629
10660
  type: Input
@@ -10637,11 +10668,11 @@ class ProgressDisplay {
10637
10668
  this.progressMsg = '[itemcode]';
10638
10669
  }
10639
10670
  }
10640
- ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10641
- ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
10671
+ ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
10672
+ ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
10642
10673
  <p>{{progressMsg}}</p>
10643
10674
  `, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] });
10644
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ProgressDisplay, decorators: [{
10675
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ProgressDisplay, decorators: [{
10645
10676
  type: Component,
10646
10677
  args: [{ selector: 'app-sprprogressdisplay', template: `
10647
10678
  <p>{{progressMsg}}</p>
@@ -10732,8 +10763,8 @@ class TransportPanel extends ResponsiveComponent {
10732
10763
  }
10733
10764
  }
10734
10765
  }
10735
- TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TransportPanel, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
10736
- TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
10766
+ TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
10767
+ TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, usesInheritance: true, ngImport: i0, template: `
10737
10768
  <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
10738
10769
  mat-raised-button>
10739
10770
  <mat-icon>chevron_left</mat-icon>
@@ -10754,7 +10785,7 @@ TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
10754
10785
  </button>
10755
10786
 
10756
10787
  `, isInline: true, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }] });
10757
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TransportPanel, decorators: [{
10788
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, decorators: [{
10758
10789
  type: Component,
10759
10790
  args: [{ selector: 'app-sprtransport', template: `
10760
10791
  <button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
@@ -10777,7 +10808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
10777
10808
  </button>
10778
10809
 
10779
10810
  `, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n"] }]
10780
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { readonly: [{
10811
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { readonly: [{
10781
10812
  type: Input
10782
10813
  }], actions: [{
10783
10814
  type: Input
@@ -10794,11 +10825,11 @@ class WakeLockIndicator {
10794
10825
  this._screenLocked = screenLock;
10795
10826
  }
10796
10827
  }
10797
- WakeLockIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10798
- WakeLockIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
10828
+ WakeLockIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10829
+ WakeLockIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
10799
10830
  <mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
10800
10831
  `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }] });
10801
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WakeLockIndicator, decorators: [{
10832
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WakeLockIndicator, decorators: [{
10802
10833
  type: Component,
10803
10834
  args: [{ selector: 'app-wakelockindicator', template: `
10804
10835
  <mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
@@ -10821,11 +10852,11 @@ class ReadyStateIndicator {
10821
10852
  return this._ready;
10822
10853
  }
10823
10854
  }
10824
- ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10825
- ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
10855
+ ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
10856
+ ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
10826
10857
  <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
10827
10858
  `, isInline: true, dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
10828
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ReadyStateIndicator, decorators: [{
10859
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ReadyStateIndicator, decorators: [{
10829
10860
  type: Component,
10830
10861
  args: [{ selector: 'app-readystateindicator', template: `
10831
10862
  <mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
@@ -10849,8 +10880,8 @@ class ControlPanel extends ResponsiveComponent {
10849
10880
  return this._ready;
10850
10881
  }
10851
10882
  }
10852
- ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ControlPanel, deps: [{ token: i1$3.BreakpointObserver }, { token: i1$4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
10853
- ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
10883
+ ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i1$2.BreakpointObserver }, { token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
10884
+ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ControlPanel, selector: "app-sprcontrolpanel", inputs: { readonly: "readonly", transportActions: "transportActions", processing: "processing", statusMsg: "statusMsg", statusAlertType: "statusAlertType", statusWaiting: "statusWaiting", uploadStatus: "uploadStatus", uploadProgress: "uploadProgress", currentRecording: "currentRecording", enableUploadRecordings: "enableUploadRecordings", navigationEnabled: "navigationEnabled", ready: "ready" }, viewQueries: [{ propertyName: "statusDisplay", first: true, predicate: StatusDisplay, descendants: true, static: true }, { propertyName: "transportPanel", first: true, predicate: TransportPanel, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
10854
10885
  <div *ngIf="!screenXs" style="flex-direction: row" >
10855
10886
  <app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10856
10887
  class="hidden-xs"></app-sprstatusdisplay>
@@ -10859,9 +10890,9 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
10859
10890
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10860
10891
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10861
10892
  </div>
10862
- <div *ngIf="screenXs"style="flex-direction: column" >
10893
+ <div *ngIf="screenXs" style="flex-direction: column" >
10863
10894
  <div style="flex-direction: row" class="flexFill" >
10864
- <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10895
+ <app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10865
10896
  class="hidden-xs"></app-sprstatusdisplay>
10866
10897
  <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10867
10898
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
@@ -10871,7 +10902,7 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
10871
10902
 
10872
10903
  </div>
10873
10904
  `, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }] });
10874
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ControlPanel, decorators: [{
10905
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, decorators: [{
10875
10906
  type: Component,
10876
10907
  args: [{ selector: 'app-sprcontrolpanel', template: `
10877
10908
  <div *ngIf="!screenXs" style="flex-direction: row" >
@@ -10882,9 +10913,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
10882
10913
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
10883
10914
  <app-readystateindicator [ready]="_ready"></app-readystateindicator>
10884
10915
  </div>
10885
- <div *ngIf="screenXs"style="flex-direction: column" >
10916
+ <div *ngIf="screenXs" style="flex-direction: column" >
10886
10917
  <div style="flex-direction: row" class="flexFill" >
10887
- <app-sprstatusdisplay style="flex:10 0 0;flex-align:left" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10918
+ <app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
10888
10919
  class="hidden-xs"></app-sprstatusdisplay>
10889
10920
  <app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
10890
10921
  [status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
@@ -10894,7 +10925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
10894
10925
 
10895
10926
  </div>
10896
10927
  `, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
10897
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i1$4.MatDialog }]; }, propDecorators: { statusDisplay: [{
10928
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i1$3.MatDialog }]; }, propDecorators: { statusDisplay: [{
10898
10929
  type: ViewChild,
10899
10930
  args: [StatusDisplay, { static: true }]
10900
10931
  }], transportPanel: [{
@@ -11545,8 +11576,8 @@ class RecordingItemControls extends ResponsiveComponent {
11545
11576
  // this.status = 'ERROR';
11546
11577
  }
11547
11578
  }
11548
- RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11549
- RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: { audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", peakDbLvl: "peakDbLvl", agc: "agc", disableAudioDetails: "disableAudioDetails", audioLoaded: "audioLoaded", playStartAction: "playStartAction", playStopAction: "playStopAction", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, usesInheritance: true, ngImport: i0, template: `
11579
+ RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11580
+ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: { audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", peakDbLvl: "peakDbLvl", agc: "agc", disableAudioDetails: "disableAudioDetails", audioLoaded: "audioLoaded", playStartAction: "playStartAction", playStopAction: "playStopAction", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, usesInheritance: true, ngImport: i0, template: `
11550
11581
  <button matTooltip="Start playback" (click)="playStartAction?.perform()"
11551
11582
  [disabled]="playStartAction?.disabled"
11552
11583
  [style.color]="playStartAction?.disabled ? 'grey' : 'green'">
@@ -11569,7 +11600,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
11569
11600
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11570
11601
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11571
11602
  `, isInline: true, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { kind: "pipe", type: i1$1.DecimalPipe, name: "number" }] });
11572
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemControls, decorators: [{
11603
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, decorators: [{
11573
11604
  type: Component,
11574
11605
  args: [{ selector: 'spr-recordingitemcontrols', template: `
11575
11606
  <button matTooltip="Start playback" (click)="playStartAction?.perform()"
@@ -11594,7 +11625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
11594
11625
  [style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
11595
11626
  <tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
11596
11627
  `, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"] }]
11597
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11628
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
11598
11629
  type: Input
11599
11630
  }], enableDownload: [{
11600
11631
  type: Input
@@ -11675,7 +11706,7 @@ class RecordingItemDisplay extends ResponsiveComponent {
11675
11706
  let peakDBVal = levelInfo.powerLevelDB();
11676
11707
  if (this.peakDbLvl < peakDBVal) {
11677
11708
  this.peakDbLvl = peakDBVal;
11678
- // the event comes from outside of an Angular zone
11709
+ // the event comes from outside an Angular zone
11679
11710
  this.changeDetectorRef.detectChanges();
11680
11711
  }
11681
11712
  this.liveLevel.update(levelInfo);
@@ -11691,14 +11722,14 @@ class RecordingItemDisplay extends ResponsiveComponent {
11691
11722
  this.changeDetectorRef.detectChanges();
11692
11723
  }
11693
11724
  }
11694
- RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11695
- RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingItemDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
11725
+ RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
11726
+ RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingItemDisplay, selector: "spr-recordingitemdisplay", inputs: { streamingMode: "streamingMode", audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", agc: "agc", playStartAction: "playStartAction", playStopAction: "playStopAction", displayAudioBuffer: "displayAudioBuffer", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, viewQueries: [{ propertyName: "liveLevel", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
11696
11727
  <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
11697
11728
  <audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
11698
11729
  <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11699
11730
  </div>
11700
11731
  `, isInline: true, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "component", type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }] });
11701
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingItemDisplay, decorators: [{
11732
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, decorators: [{
11702
11733
  type: Component,
11703
11734
  args: [{ selector: 'spr-recordingitemdisplay', template: `
11704
11735
  <div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
@@ -11706,7 +11737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
11706
11737
  <spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
11707
11738
  </div>
11708
11739
  `, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
11709
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11740
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
11710
11741
  type: ViewChild,
11711
11742
  args: [LevelBar, { static: true }]
11712
11743
  }], streamingMode: [{
@@ -12743,9 +12774,9 @@ class SpeechRecorderUploader extends Uploader {
12743
12774
  this.config = config;
12744
12775
  }
12745
12776
  }
12746
- SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderUploader, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
12747
- SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderUploader });
12748
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
12777
+ SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderUploader, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
12778
+ SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderUploader });
12779
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
12749
12780
  type: Injectable
12750
12781
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
12751
12782
  type: Inject,
@@ -12765,12 +12796,12 @@ class WarningBar {
12765
12796
  }
12766
12797
  }
12767
12798
  }
12768
- WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
12769
- WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: WarningBar, selector: "app-warningbar", inputs: { warningText: "warningText", show: "show" }, providers: [SessionService], ngImport: i0, template: `
12799
+ WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
12800
+ WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: WarningBar, selector: "app-warningbar", inputs: { warningText: "warningText", show: "show" }, providers: [SessionService], ngImport: i0, template: `
12770
12801
  <div [class]="displayClass">{{warningText}}</div>
12771
12802
 
12772
12803
  `, isInline: true, styles: [":host{flex:0 0 content;background:orange}\n", ".off{display:none}\n", ".on{padding:2px;display:inline-block;width:100%;font-weight:700;font-size:larger;text-align:center}\n"] });
12773
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: WarningBar, decorators: [{
12804
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: WarningBar, decorators: [{
12774
12805
  type: Component,
12775
12806
  args: [{ selector: 'app-warningbar', providers: [SessionService], template: `
12776
12807
  <div [class]="displayClass">{{warningText}}</div>
@@ -13957,8 +13988,8 @@ class SessionManager extends BasicRecorder {
13957
13988
  }
13958
13989
  }
13959
13990
  }
13960
- SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionManager, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$4.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
13961
- SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SessionManager, selector: "app-sprrecordingsession", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "prompting", first: true, predicate: Prompting, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
13991
+ SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$3.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
13992
+ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SessionManager, selector: "app-sprrecordingsession", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "prompting", first: true, predicate: Prompting, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
13962
13993
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
13963
13994
  <app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
13964
13995
  <app-sprprompting [projectName]="projectName"
@@ -14008,7 +14039,7 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version
14008
14039
  </div>
14009
14040
  </div>
14010
14041
  `, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{display:flex;padding:4px;box-sizing:border-box;height:100%;flex-direction:row;justify-content:flex-end;align-items:center;align-content:center}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { kind: "component", type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: Prompting, selector: "app-sprprompting", inputs: ["projectName", "startStopSignalState", "promptItem", "showPrompt", "items", "selectedItemIdx", "transportActions", "enableDownload", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["onItemSelect", "onNextItem", "onPrevItem"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { kind: "component", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { kind: "component", type: WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }] });
14011
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SessionManager, decorators: [{
14042
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, decorators: [{
14012
14043
  type: Component,
14013
14044
  args: [{ selector: 'app-sprrecordingsession', providers: [SessionService], template: `
14014
14045
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
@@ -14060,7 +14091,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
14060
14091
  </div>
14061
14092
  </div>
14062
14093
  `, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{display:flex;padding:4px;box-sizing:border-box;height:100%;flex-direction:row;justify-content:flex-end;align-items:center;align-content:center}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
14063
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
14094
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$3.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
14064
14095
  type: Inject,
14065
14096
  args: [SPEECHRECORDER_CONFIG]
14066
14097
  }] }]; }, propDecorators: { projectName: [{
@@ -14192,9 +14223,9 @@ SprDb.dbName = 'speechrecorder';
14192
14223
  SprDb.RECORDING_FILE_CACHE_OBJECT_STORE_NAME = '_recording_file_cache';
14193
14224
  //public static RECORDING_FILE_CHUNKS_OBJECT_STORE_NAME='rec_file_chunks';
14194
14225
  SprDb.dbVersion = 1;
14195
- SprDb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14196
- SprDb.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SprDb });
14197
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SprDb, decorators: [{
14226
+ SprDb.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
14227
+ SprDb.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb });
14228
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SprDb, decorators: [{
14198
14229
  type: Injectable
14199
14230
  }], ctorParameters: function () { return []; } });
14200
14231
 
@@ -14292,9 +14323,9 @@ class ScriptService {
14292
14323
  return this.http.get(scriptUrl, { withCredentials: this.withCredentials });
14293
14324
  }
14294
14325
  }
14295
- ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
14296
- ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScriptService });
14297
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScriptService, decorators: [{
14326
+ ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
14327
+ ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScriptService });
14328
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScriptService, decorators: [{
14298
14329
  type: Injectable
14299
14330
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
14300
14331
  type: Inject,
@@ -14506,7 +14537,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
14506
14537
  }
14507
14538
  else {
14508
14539
  // all this attempts to customize the message do not work anymore (for security reasons)!!
14509
- var message = "Please do not leave the page, until all recordings are uploaded!";
14540
+ const message = "Please do not leave the page, until all recordings are uploaded!";
14510
14541
  alert(message);
14511
14542
  e = e || window.event;
14512
14543
  if (e) {
@@ -14630,7 +14661,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
14630
14661
  projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;
14631
14662
  }
14632
14663
  if (projUrl) {
14633
- var pLoader = new XMLHttpRequest();
14664
+ const pLoader = new XMLHttpRequest();
14634
14665
  pLoader.open("GET", projUrl, true);
14635
14666
  pLoader.setRequestHeader('Accept', 'application/json');
14636
14667
  pLoader.responseType = "json";
@@ -14665,25 +14696,25 @@ class SpeechrecorderngComponent extends RecorderComponent {
14665
14696
  this.sm.statusMsg = 'ERROR: Recording.';
14666
14697
  }
14667
14698
  }
14668
- SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i1$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: ScriptService }, { token: RecordingService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
14669
- SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: SpeechrecorderngComponent, selector: "app-speechrecorder", providers: [SessionService], viewQueries: [{ propertyName: "sm", first: true, predicate: SessionManager, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
14699
+ SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token: i4$2.ActivatedRoute }, { token: i4$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: ScriptService }, { token: RecordingService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
14700
+ SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: SpeechrecorderngComponent, selector: "app-speechrecorder", providers: [SessionService], viewQueries: [{ propertyName: "sm", first: true, predicate: SessionManager, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
14670
14701
  <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
14671
14702
  `, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"], dependencies: [{ kind: "component", type: SessionManager, selector: "app-sprrecordingsession", inputs: ["projectName", "dataSaved"] }] });
14672
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
14703
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
14673
14704
  type: Component,
14674
14705
  args: [{ selector: 'app-speechrecorder', providers: [SessionService], template: `
14675
14706
  <app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
14676
14707
  `, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"] }]
14677
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i1$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: ScriptService }, { type: RecordingService }, { type: SpeechRecorderUploader }]; }, propDecorators: { sm: [{
14708
+ }], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i4$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: ScriptService }, { type: RecordingService }, { type: SpeechRecorderUploader }]; }, propDecorators: { sm: [{
14678
14709
  type: ViewChild,
14679
14710
  args: [SessionManager, { static: true }]
14680
14711
  }] } });
14681
14712
 
14682
14713
  class ScrollPaneHorizontal {
14683
14714
  }
14684
- ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component });
14685
- ScrollPaneHorizontal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] });
14686
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
14715
+ ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component });
14716
+ ScrollPaneHorizontal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] });
14717
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
14687
14718
  type: Component,
14688
14719
  args: [{ selector: 'scroll-pane-horizontal', template: '', styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] }]
14689
14720
  }] });
@@ -14880,8 +14911,8 @@ class AudioDisplayPlayer {
14880
14911
  this.status = 'ERROR';
14881
14912
  }
14882
14913
  }
14883
- AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
14884
- AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", 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: `
14914
+ AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i4$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
14915
+ AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioDisplayPlayer, selector: "app-audiodisplayplayer", 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: `
14885
14916
 
14886
14917
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
14887
14918
 
@@ -14895,7 +14926,7 @@ AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", ver
14895
14926
  [zoomSelectedAction]="zoomSelectedAction"
14896
14927
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
14897
14928
  `, 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:#000000bf}\n"], dependencies: [{ kind: "component", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
14898
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
14929
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
14899
14930
  type: Component,
14900
14931
  args: [{ selector: 'app-audiodisplayplayer', template: `
14901
14932
 
@@ -14911,7 +14942,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
14911
14942
  [zoomSelectedAction]="zoomSelectedAction"
14912
14943
  [zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
14913
14944
  `, 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:#000000bf}\n"] }]
14914
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
14945
+ }], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
14915
14946
  type: Input
14916
14947
  }], playStopAction: [{
14917
14948
  type: Input
@@ -15061,37 +15092,39 @@ class RecordingFileService extends BasicRecordingService {
15061
15092
  let wobs = new Observable(observer => {
15062
15093
  if (recordingFile.recordingFileId) {
15063
15094
  let obs = this.fetchAudiofile(recordingFile.recordingFileId);
15064
- obs.subscribe(resp => {
15065
- // Do not use Promise version, which does not work with Safari 13
15066
- if (resp.body) {
15067
- aCtx.decodeAudioData(resp.body, ab => {
15068
- let as = new AudioBufferSource(ab);
15069
- RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(as));
15070
- if (this.debugDelay > 0) {
15071
- window.setTimeout(() => {
15095
+ obs.subscribe({ next: resp => {
15096
+ // Do not use Promise version, which does not work with Safari 13
15097
+ if (resp.body) {
15098
+ aCtx.decodeAudioData(resp.body, ab => {
15099
+ let as = new AudioBufferSource(ab);
15100
+ RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(as));
15101
+ if (this.debugDelay > 0) {
15102
+ window.setTimeout(() => {
15103
+ observer.next(recordingFile);
15104
+ observer.complete();
15105
+ }, this.debugDelay);
15106
+ }
15107
+ else {
15072
15108
  observer.next(recordingFile);
15073
15109
  observer.complete();
15074
- }, this.debugDelay);
15075
- }
15076
- else {
15077
- observer.next(recordingFile);
15078
- observer.complete();
15079
- }
15080
- });
15081
- }
15082
- else {
15083
- observer.error('Received no audio data!');
15084
- }
15085
- }, (error) => {
15086
- if (error.status == 404) {
15087
- // Interpret not as an error, the file ist not recorded yet
15088
- observer.next(null);
15089
- observer.complete();
15090
- }
15091
- else {
15092
- // all other states are errors
15093
- observer.error(error);
15094
- observer.complete();
15110
+ }
15111
+ });
15112
+ }
15113
+ else {
15114
+ observer.error('Received no audio data!');
15115
+ }
15116
+ },
15117
+ error: (error) => {
15118
+ if (error.status == 404) {
15119
+ // Interpret not as an error, the file ist not recorded yet
15120
+ observer.next(null);
15121
+ observer.complete();
15122
+ }
15123
+ else {
15124
+ // all other states are errors
15125
+ observer.error(error);
15126
+ observer.complete();
15127
+ }
15095
15128
  }
15096
15129
  });
15097
15130
  }
@@ -15105,81 +15138,39 @@ class RecordingFileService extends BasicRecordingService {
15105
15138
  let wobs = new Observable(observer => {
15106
15139
  let rf = null;
15107
15140
  let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);
15108
- rfDescrObs.subscribe(value => {
15109
- rf = value;
15110
- }, (error) => {
15111
- observer.error(error);
15112
- }, () => {
15113
- let rfAudioObs = this.fetchAudiofile(recordingFileId);
15114
- rfAudioObs.subscribe(resp => {
15115
- // Do not use Promise version, which does not work with Safari 13
15116
- if (resp.body) {
15117
- aCtx.decodeAudioData(resp.body, ab => {
15118
- if (rf) {
15119
- let as = new AudioBufferSource(ab);
15120
- RecordingFileUtils.setAudioData(rf, new AudioDataHolder(as));
15121
- }
15122
- else {
15123
- observer.error('Recording file object null');
15124
- }
15125
- if (this.debugDelay > 0) {
15126
- window.setTimeout(() => {
15127
- observer.next(rf);
15128
- observer.complete();
15129
- }, this.debugDelay);
15141
+ rfDescrObs.subscribe({ next: value => {
15142
+ rf = value;
15143
+ }, error: (error) => {
15144
+ observer.error(error);
15145
+ }, complete: () => {
15146
+ let rfAudioObs = this.fetchAudiofile(recordingFileId);
15147
+ rfAudioObs.subscribe({
15148
+ next: resp => {
15149
+ // Do not use Promise version, which does not work with Safari 13
15150
+ if (resp.body) {
15151
+ aCtx.decodeAudioData(resp.body, ab => {
15152
+ if (rf) {
15153
+ let as = new AudioBufferSource(ab);
15154
+ RecordingFileUtils.setAudioData(rf, new AudioDataHolder(as));
15155
+ }
15156
+ else {
15157
+ observer.error('Recording file object null');
15158
+ }
15159
+ if (this.debugDelay > 0) {
15160
+ window.setTimeout(() => {
15161
+ observer.next(rf);
15162
+ observer.complete();
15163
+ }, this.debugDelay);
15164
+ }
15165
+ else {
15166
+ observer.next(rf);
15167
+ observer.complete();
15168
+ }
15169
+ });
15130
15170
  }
15131
15171
  else {
15132
- observer.next(rf);
15133
- observer.complete();
15172
+ observer.error('Received no audio data');
15134
15173
  }
15135
- });
15136
- }
15137
- else {
15138
- observer.error('Received no audio data');
15139
- }
15140
- }, (error) => {
15141
- if (error.status == 404) {
15142
- // Interpret not as an error, the file ist not recorded yet
15143
- observer.next(null);
15144
- observer.complete();
15145
- }
15146
- else {
15147
- // all other states are errors
15148
- observer.error(error);
15149
- observer.complete();
15150
- }
15151
- });
15152
- });
15153
- });
15154
- return wobs;
15155
- }
15156
- fetchSprRecordingFile(aCtx, recordingFileId) {
15157
- let wobs = new Observable(observer => {
15158
- let rf = null;
15159
- let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
15160
- rfDescrObs.subscribe(value => {
15161
- rf = value;
15162
- }, (error) => {
15163
- observer.error(error);
15164
- }, () => {
15165
- let sampleCnt = null;
15166
- if (rf && rf.channels && rf.frames) {
15167
- sampleCnt = rf.channels * rf.frames;
15168
- }
15169
- // TODO use download storage type depending on sample count of file
15170
- if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
15171
- const baseUrl = this.recoFileUrl(recordingFileId);
15172
- const obNetAb = this.chunkAudioRequestToNetAudioBuffer(aCtx, baseUrl, 0, rf?.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
15173
- obNetAb.subscribe({
15174
- next: (nab) => {
15175
- let adh = new AudioDataHolder(nab);
15176
- if (rf) {
15177
- RecordingFileUtils.setAudioData(rf, adh);
15178
- observer.next(rf);
15179
- }
15180
- },
15181
- complete: () => {
15182
- observer.complete();
15183
15174
  },
15184
15175
  error: (error) => {
15185
15176
  if (error.status == 404) {
@@ -15195,47 +15186,97 @@ class RecordingFileService extends BasicRecordingService {
15195
15186
  }
15196
15187
  });
15197
15188
  }
15198
- else {
15199
- let rfAudioObs = this.fetchAudiofile(recordingFileId);
15200
- rfAudioObs.subscribe(resp => {
15201
- // Do not use Promise version, which does not work with Safari 13
15202
- if (resp.body) {
15203
- aCtx.decodeAudioData(resp.body, ab => {
15189
+ });
15190
+ });
15191
+ return wobs;
15192
+ }
15193
+ fetchSprRecordingFile(aCtx, recordingFileId) {
15194
+ let wobs = new Observable(observer => {
15195
+ let rf = null;
15196
+ let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
15197
+ rfDescrObs.subscribe({ next: value => {
15198
+ rf = value;
15199
+ },
15200
+ error: (error) => {
15201
+ observer.error(error);
15202
+ }, complete: () => {
15203
+ let sampleCnt = null;
15204
+ if (rf && rf.channels && rf.frames) {
15205
+ sampleCnt = rf.channels * rf.frames;
15206
+ }
15207
+ // TODO use download storage type depending on sample count of file
15208
+ if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
15209
+ const baseUrl = this.recoFileUrl(recordingFileId);
15210
+ const obNetAb = this.chunkAudioRequestToNetAudioBuffer(aCtx, baseUrl, 0, rf?.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
15211
+ obNetAb.subscribe({
15212
+ next: (nab) => {
15213
+ let adh = new AudioDataHolder(nab);
15204
15214
  if (rf) {
15205
- let as = new AudioBufferSource(ab);
15206
- let adh = new AudioDataHolder(as);
15207
15215
  RecordingFileUtils.setAudioData(rf, adh);
15216
+ observer.next(rf);
15217
+ }
15218
+ },
15219
+ complete: () => {
15220
+ observer.complete();
15221
+ },
15222
+ error: (error) => {
15223
+ if (error.status == 404) {
15224
+ // Interpret not as an error, the file ist not recorded yet
15225
+ observer.next(null);
15226
+ observer.complete();
15208
15227
  }
15209
15228
  else {
15210
- observer.error('Recording file object null');
15229
+ // all other states are errors
15230
+ observer.error(error);
15231
+ observer.complete();
15211
15232
  }
15212
- if (this.debugDelay > 0) {
15213
- window.setTimeout(() => {
15214
- observer.next(rf);
15215
- observer.complete();
15216
- }, this.debugDelay);
15233
+ }
15234
+ });
15235
+ }
15236
+ else {
15237
+ let rfAudioObs = this.fetchAudiofile(recordingFileId);
15238
+ rfAudioObs.subscribe({ next: resp => {
15239
+ // Do not use Promise version, which does not work with Safari 13
15240
+ if (resp.body) {
15241
+ aCtx.decodeAudioData(resp.body, ab => {
15242
+ if (rf) {
15243
+ let as = new AudioBufferSource(ab);
15244
+ let adh = new AudioDataHolder(as);
15245
+ RecordingFileUtils.setAudioData(rf, adh);
15246
+ }
15247
+ else {
15248
+ observer.error('Recording file object null');
15249
+ }
15250
+ if (this.debugDelay > 0) {
15251
+ window.setTimeout(() => {
15252
+ observer.next(rf);
15253
+ observer.complete();
15254
+ }, this.debugDelay);
15255
+ }
15256
+ else {
15257
+ observer.next(rf);
15258
+ observer.complete();
15259
+ }
15260
+ });
15217
15261
  }
15218
15262
  else {
15219
- observer.next(rf);
15263
+ observer.error('Received no audio data');
15264
+ }
15265
+ },
15266
+ error: (error) => {
15267
+ if (error.status == 404) {
15268
+ // Interpret not as an error, the file ist not recorded yet
15269
+ observer.next(null);
15220
15270
  observer.complete();
15221
15271
  }
15222
- });
15223
- }
15224
- else {
15225
- observer.error('Received no audio data');
15226
- }
15227
- }, (error) => {
15228
- if (error.status == 404) {
15229
- // Interpret not as an error, the file ist not recorded yet
15230
- observer.next(null);
15231
- observer.complete();
15232
- }
15233
- else {
15234
- // all other states are errors
15235
- observer.error(error);
15236
- observer.complete();
15237
- }
15238
- });
15272
+ else {
15273
+ // all other states are errors
15274
+ observer.error(error);
15275
+ observer.complete();
15276
+ }
15277
+ }
15278
+ });
15279
+ }
15239
15280
  }
15240
15281
  });
15241
15282
  });
@@ -15253,9 +15294,9 @@ class RecordingFileService extends BasicRecordingService {
15253
15294
  }
15254
15295
  }
15255
15296
  RecordingFileService.RECOFILE_API_CTX = 'recordingfile';
15256
- RecordingFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
15257
- RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileService });
15258
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileService, decorators: [{
15297
+ RecordingFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
15298
+ RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileService });
15299
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileService, decorators: [{
15259
15300
  type: Injectable
15260
15301
  }], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
15261
15302
  type: Inject,
@@ -15279,15 +15320,15 @@ class RecordingFileNaviComponent {
15279
15320
  }
15280
15321
  }
15281
15322
  }
15282
- RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileNaviComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15283
- RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: { firstAction: "firstAction", prevAction: "prevAction", nextAction: "nextAction", lastAction: "lastAction", items: "items", itemPos: "itemPos", selectVersion: "selectVersion", versions: "versions", version: "version", naviInfoLoading: "naviInfoLoading" }, ngImport: i0, template: `
15323
+ RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileNaviComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15324
+ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: { firstAction: "firstAction", prevAction: "prevAction", nextAction: "nextAction", lastAction: "lastAction", items: "items", itemPos: "itemPos", selectVersion: "selectVersion", versions: "versions", version: "version", naviInfoLoading: "naviInfoLoading" }, ngImport: i0, template: `
15284
15325
  <div #controlPanel style="display:flex;flex-direction: row;">
15285
15326
  <div #navi style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
15286
15327
  <fieldset>
15287
15328
  <legend>Versions</legend>
15288
15329
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15289
15330
  <select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
15290
- <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<span *ngIf="i==0"> (latest)</span></option>
15331
+ <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<ng-container *ngIf="i==0"> (latest)</ng-container></option>
15291
15332
  </select>
15292
15333
  </fieldset>
15293
15334
  <fieldset>
@@ -15313,7 +15354,7 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15313
15354
  </div>
15314
15355
  </div>
15315
15356
  `, isInline: true, styles: [":host{flex:0}\n"], dependencies: [{ kind: "directive", type: i1$1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "directive", type: i4.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
15316
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileNaviComponent, decorators: [{
15357
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileNaviComponent, decorators: [{
15317
15358
  type: Component,
15318
15359
  args: [{ selector: 'app-recording-file-navi', template: `
15319
15360
  <div #controlPanel style="display:flex;flex-direction: row;">
@@ -15322,7 +15363,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
15322
15363
  <legend>Versions</legend>
15323
15364
  <mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
15324
15365
  <select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
15325
- <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<span *ngIf="i==0"> (latest)</span></option>
15366
+ <option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<ng-container *ngIf="i==0"> (latest)</ng-container></option>
15326
15367
  </select>
15327
15368
  </fieldset>
15328
15369
  <fieldset>
@@ -15411,8 +15452,8 @@ class RecordingFileMetaComponent {
15411
15452
  return t;
15412
15453
  }
15413
15454
  }
15414
- RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileMetaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15415
- RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: { sessionId: "sessionId", stateLoading: "stateLoading", recordingFile: "recordingFile" }, ngImport: i0, template: `
15455
+ RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileMetaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
15456
+ RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: { sessionId: "sessionId", stateLoading: "stateLoading", recordingFile: "recordingFile" }, ngImport: i0, template: `
15416
15457
  <mat-card>
15417
15458
  <mat-card-title>Recording file ID: {{recordingFile?.recordingFileId}}</mat-card-title>
15418
15459
  <mat-card-content>
@@ -15447,7 +15488,7 @@ RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15447
15488
  </mat-card-content>
15448
15489
  </mat-card>
15449
15490
  `, isInline: true, dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3$1.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { kind: "component", type: i3$2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "directive", type: i3$2.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "directive", type: i3$2.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }] });
15450
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileMetaComponent, decorators: [{
15491
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileMetaComponent, decorators: [{
15451
15492
  type: Component,
15452
15493
  args: [{ selector: 'app-recording-file-meta', template: `
15453
15494
  <mat-card>
@@ -15685,47 +15726,49 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15685
15726
  let audioContext = AudioContextProvider.audioContextInstance();
15686
15727
  if (audioContext) {
15687
15728
  this.audioFetching = true;
15688
- this.recordingFileService.fetchSprRecordingFile(audioContext, rfId).subscribe(value => {
15689
- this.audioFetching = false;
15690
- this.status = 'Audio file loaded.';
15691
- let clip = null;
15692
- this.recordingFile = value;
15693
- if (this.recordingFile) {
15694
- let ab = this.recordingFile.audioDataHolder;
15695
- if (ab) {
15696
- clip = new AudioClip(ab);
15697
- let esffsr = null;
15698
- let eeffsr = null;
15699
- let esr = null;
15700
- if (clip.audioDataHolder != null) {
15701
- esr = ab.sampleRate;
15702
- if (esr != null) {
15703
- esffsr = RecordingFileUtil.editStartFrameForSampleRate(this.recordingFile, esr);
15704
- eeffsr = RecordingFileUtil.editEndFrameForSampleRate(this.recordingFile, esr);
15705
- }
15706
- let sel = null;
15707
- if (esffsr != null) {
15708
- if (eeffsr != null) {
15709
- sel = new Selection(ab.sampleRate, esffsr, eeffsr);
15729
+ this.recordingFileService.fetchSprRecordingFile(audioContext, rfId).subscribe({
15730
+ next: value => {
15731
+ this.audioFetching = false;
15732
+ this.status = 'Audio file loaded.';
15733
+ let clip = null;
15734
+ this.recordingFile = value;
15735
+ if (this.recordingFile) {
15736
+ let ab = this.recordingFile.audioDataHolder;
15737
+ if (ab) {
15738
+ clip = new AudioClip(ab);
15739
+ let esffsr = null;
15740
+ let eeffsr = null;
15741
+ let esr = null;
15742
+ if (clip.audioDataHolder != null) {
15743
+ esr = ab.sampleRate;
15744
+ if (esr != null) {
15745
+ esffsr = RecordingFileUtil.editStartFrameForSampleRate(this.recordingFile, esr);
15746
+ eeffsr = RecordingFileUtil.editEndFrameForSampleRate(this.recordingFile, esr);
15710
15747
  }
15711
- else {
15712
- //let ch0 = ab.getChannelData(0);
15713
- let frameLength = ab.frameLen;
15714
- sel = new Selection(esr, esffsr, frameLength);
15748
+ let sel = null;
15749
+ if (esffsr != null) {
15750
+ if (eeffsr != null) {
15751
+ sel = new Selection(ab.sampleRate, esffsr, eeffsr);
15752
+ }
15753
+ else {
15754
+ //let ch0 = ab.getChannelData(0);
15755
+ let frameLength = ab.frameLen;
15756
+ sel = new Selection(esr, esffsr, frameLength);
15757
+ }
15715
15758
  }
15759
+ else if (eeffsr != null) {
15760
+ sel = new Selection(esr, 0, eeffsr);
15761
+ }
15762
+ clip.selection = sel;
15716
15763
  }
15717
- else if (eeffsr != null) {
15718
- sel = new Selection(esr, 0, eeffsr);
15719
- }
15720
- clip.selection = sel;
15721
15764
  }
15722
15765
  }
15766
+ this.audioClip = clip;
15767
+ this.loadedRecfile();
15768
+ }, error: error1 => {
15769
+ this.audioFetching = false;
15770
+ this.status = 'Error loading audio file!';
15723
15771
  }
15724
- this.audioClip = clip;
15725
- this.loadedRecfile();
15726
- }, error1 => {
15727
- this.audioFetching = false;
15728
- this.status = 'Error loading audio file!';
15729
15772
  });
15730
15773
  }
15731
15774
  }
@@ -15753,7 +15796,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15753
15796
  this.lastAction.disabled = (this.posInList == null || itemCnt == null || this.posInList >= itemCnt - 1);
15754
15797
  }
15755
15798
  loadSession(sessionId) {
15756
- // load session and recording file meta data only when on init and when session changes
15799
+ // load session and recording file metadata only when on init and when session changes
15757
15800
  if (sessionId != this.sessionId) {
15758
15801
  // tell UI that we are working...
15759
15802
  this.naviInfoLoading = true;
@@ -15791,7 +15834,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15791
15834
  else {
15792
15835
  // rec file with itemcode already exists, add (push) this version ...
15793
15836
  exRfsForIc.push(rfd);
15794
- // .. and sort latest version (highest version number) to lowest index
15837
+ // ... and sort latest version (highest version number) to lowest index
15795
15838
  exRfsForIc.sort((rfd1, rfd2) => {
15796
15839
  return rfd2.version - rfd1.version;
15797
15840
  });
@@ -15845,8 +15888,8 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
15845
15888
  }
15846
15889
  }
15847
15890
  }
15848
- RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileViewComponent, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$4.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
15849
- RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileViewComponent, selector: "app-audiodisplayplayer", viewQueries: [{ propertyName: "ac", first: true, predicate: AudioDisplayScrollPane, descendants: true }], usesInheritance: true, ngImport: i0, template: `
15891
+ RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i4$2.Router }, { token: i4$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$3.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
15892
+ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileViewComponent, selector: "app-audiodisplayplayer", viewQueries: [{ propertyName: "ac", first: true, predicate: AudioDisplayScrollPane, descendants: true }], usesInheritance: true, ngImport: i0, template: `
15850
15893
 
15851
15894
  <audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
15852
15895
  <div class="ctrlview">
@@ -15864,7 +15907,7 @@ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
15864
15907
  <app-recording-file-navi [items]="availRecFiles?.length" [itemPos]="posInList" [version]="recordingFileVersion" [versions]="versions" [firstAction]="firstAction" [prevAction]="prevAction" [nextAction]="nextAction" [lastAction]="lastAction" [selectVersion]="toVersionAction" [naviInfoLoading]="naviInfoLoading"></app-recording-file-navi>
15865
15908
  </div>
15866
15909
  `, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"], dependencies: [{ kind: "component", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }, { kind: "component", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: ["firstAction", "prevAction", "nextAction", "lastAction", "items", "itemPos", "selectVersion", "versions", "version", "naviInfoLoading"] }, { kind: "component", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: ["sessionId", "stateLoading", "recordingFile"] }] });
15867
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
15910
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
15868
15911
  type: Component,
15869
15912
  args: [{ selector: 'app-audiodisplayplayer', template: `
15870
15913
 
@@ -15884,7 +15927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
15884
15927
  <app-recording-file-navi [items]="availRecFiles?.length" [itemPos]="posInList" [version]="recordingFileVersion" [versions]="versions" [firstAction]="firstAction" [prevAction]="prevAction" [nextAction]="nextAction" [lastAction]="lastAction" [selectVersion]="toVersionAction" [naviInfoLoading]="naviInfoLoading"></app-recording-file-navi>
15885
15928
  </div>
15886
15929
  `, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"] }]
15887
- }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$4.MatDialog }]; }, propDecorators: { ac: [{
15930
+ }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i4$2.Router }, { type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$3.MatDialog }]; }, propDecorators: { ac: [{
15888
15931
  type: ViewChild,
15889
15932
  args: [AudioDisplayScrollPane]
15890
15933
  }] } });
@@ -15949,28 +15992,29 @@ class RecordingFileUI extends RecordingFileViewComponent {
15949
15992
  sf = s.startFrame;
15950
15993
  ef = s.endFrame;
15951
15994
  }
15952
- this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {
15953
- }, () => {
15954
- this.dialog.open(MessageDialog, {
15955
- data: {
15956
- type: 'error',
15957
- title: 'Save selection edit error',
15958
- msg: "Could not save edit selection to WikiSpeech server!",
15959
- advice: "Please check network connection and server state."
15960
- }
15961
- });
15962
- }, () => {
15963
- // Or use returned selection value from server?
15964
- this.savedEditSelection = s;
15965
- this.editSaved = true;
15966
- this.snackBar.open('Selection edit saved successfully.', 'OK', { duration: 1500 });
15995
+ this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe({ next: (value) => { },
15996
+ error: () => {
15997
+ this.dialog.open(MessageDialog, {
15998
+ data: {
15999
+ type: 'error',
16000
+ title: 'Save selection edit error',
16001
+ msg: "Could not save edit selection to WikiSpeech server!",
16002
+ advice: "Please check network connection and server state."
16003
+ }
16004
+ });
16005
+ }, complete: () => {
16006
+ // Or use returned selection value from server?
16007
+ this.savedEditSelection = s;
16008
+ this.editSaved = true;
16009
+ this.snackBar.open('Selection edit saved successfully.', 'OK', { duration: 1500 });
16010
+ }
15967
16011
  });
15968
16012
  }
15969
16013
  }
15970
16014
  }
15971
16015
  }
15972
- RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileUI, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i1$2.Router }, { token: i1$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$4.MatDialog }, { token: i6.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
15973
- RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
16016
+ RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileUI, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i4$2.Router }, { token: i4$2.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$3.MatDialog }, { token: i6.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
16017
+ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
15974
16018
  <h1>Recording file editing</h1>
15975
16019
  <p>On export or delivery the editing selection of the recording file is cut out. If no editing selection is applied the original file is exported.</p>
15976
16020
 
@@ -15991,7 +16035,7 @@ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", versio
15991
16035
 
15992
16036
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
15993
16037
  `, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"], dependencies: [{ kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { kind: "component", type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }, { kind: "component", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: ["firstAction", "prevAction", "nextAction", "lastAction", "items", "itemPos", "selectVersion", "versions", "version", "naviInfoLoading"] }, { kind: "component", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: ["sessionId", "stateLoading", "recordingFile"] }] });
15994
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingFileUI, decorators: [{
16038
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileUI, decorators: [{
15995
16039
  type: Component,
15996
16040
  args: [{ selector: 'app-audiodisplayplayer', template: `
15997
16041
  <h1>Recording file editing</h1>
@@ -16014,7 +16058,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
16014
16058
 
16015
16059
  <button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
16016
16060
  `, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"] }]
16017
- }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i1$2.Router }, { type: i1$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$4.MatDialog }, { type: i6.MatSnackBar }]; } });
16061
+ }], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type: i4$2.Router }, { type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }, { type: i1$3.MatDialog }, { type: i6.MatSnackBar }]; } });
16018
16062
 
16019
16063
  class MediaUtils {
16020
16064
  static toMediaTime(timeInSeconds) {
@@ -16106,8 +16150,8 @@ class RecordingList {
16106
16150
  return cached;
16107
16151
  }
16108
16152
  }
16109
- RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingList, deps: [], target: i0.ɵɵFactoryTarget.Component });
16110
- RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecordingList, selector: "app-recordinglist", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, ngImport: i0, template: `
16153
+ RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, deps: [], target: i0.ɵɵFactoryTarget.Component });
16154
+ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingList, selector: "app-recordinglist", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, ngImport: i0, template: `
16111
16155
  <mat-card>
16112
16156
  <mat-card-header>
16113
16157
  <h2>Recording list</h2>
@@ -16151,8 +16195,8 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
16151
16195
  </mat-card-content>
16152
16196
  </mat-card>
16153
16197
 
16154
- `, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;overflow-y:auto;min-height:0px}\n", ".selected{font-weight:700}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i3$2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3$2.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i4$2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4$2.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$2.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }] });
16155
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecordingList, decorators: [{
16198
+ `, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;overflow-y:auto;min-height:0px}\n", ".selected{font-weight:700}\n"], dependencies: [{ kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: i3$2.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { kind: "component", type: i3$2.MatCardHeader, selector: "mat-card-header" }, { kind: "directive", type: i3$2.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { kind: "component", type: i4$3.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { kind: "directive", type: i4$3.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { kind: "directive", type: i4$3.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { kind: "directive", type: i4$3.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { kind: "directive", type: i4$3.MatCellDef, selector: "[matCellDef]" }, { kind: "directive", type: i4$3.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { kind: "directive", type: i4$3.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { kind: "directive", type: i4$3.MatCell, selector: "mat-cell, td[mat-cell]" }, { kind: "component", type: i4$3.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { kind: "component", type: i4$3.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { kind: "directive", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }, { kind: "pipe", type: i1$1.DatePipe, name: "date" }] });
16199
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, decorators: [{
16156
16200
  type: Component,
16157
16201
  args: [{ selector: 'app-recordinglist', template: `
16158
16202
  <mat-card>
@@ -16232,8 +16276,8 @@ class RecorderCombiPane extends ResponsiveComponent {
16232
16276
  this.recordingListComp.selectTop();
16233
16277
  }
16234
16278
  }
16235
- RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1$3.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
16236
- RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, viewQueries: [{ propertyName: "recordingListComp", first: true, predicate: RecordingList, descendants: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
16279
+ RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1$2.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component });
16280
+ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile", audioSignalCollapsed: "audioSignalCollapsed", displayAudioClip: "displayAudioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction", playStopAction: "playStopAction" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, viewQueries: [{ propertyName: "recordingListComp", first: true, predicate: RecordingList, descendants: true }, { propertyName: "audioDisplay", first: true, predicate: AudioDisplay, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
16237
16281
  <div class="scrollList">
16238
16282
  <app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
16239
16283
  </div>
@@ -16246,7 +16290,7 @@ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", vers
16246
16290
  [playStopAction]="playStopAction"></app-audiodisplay>
16247
16291
  </div>
16248
16292
  `, isInline: true, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"], dependencies: [{ kind: "component", type: AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }, { kind: "component", type: RecordingList, selector: "app-recordinglist", inputs: ["selectDisabled", "selectedRecordingFile"], outputs: ["selectedRecordingFileChanged"] }] });
16249
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: RecorderCombiPane, decorators: [{
16293
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, decorators: [{
16250
16294
  type: Component,
16251
16295
  args: [{ selector: 'app-recordercombipane', template: `
16252
16296
  <div class="scrollList">
@@ -16261,7 +16305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
16261
16305
  [playStopAction]="playStopAction"></app-audiodisplay>
16262
16306
  </div>
16263
16307
  `, styles: [".monospaced{font-family:monospace}.mat-cell,.mat-header-cell{padding-left:5px;padding-right:5px}.mat-card,.mat-card-header,.mat-card-content{width:auto}.flexForm{display:flex;flex-direction:column;width:auto}.flexFill{margin:0;width:100%;height:100%;min-width:100%;min-height:100%}\n", ":host{background-color:#ff0;position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px}\n", ".scrollList{margin:0;padding:0;background:lightgrey;width:100%;height:100%;overflow-y:auto}\n", ".collapsable{display:none;position:absolute;z-index:5}\n", ".collapsable.active{display:flex;position:absolute;bottom:0;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"] }]
16264
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
16308
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
16265
16309
  type: ViewChild,
16266
16310
  args: [RecordingList]
16267
16311
  }], selectDisabled: [{
@@ -16288,11 +16332,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
16288
16332
  }] } });
16289
16333
 
16290
16334
  class AudioRecorder extends BasicRecorder {
16291
- constructor(bpo, changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
16335
+ constructor(bpo, changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
16292
16336
  super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
16293
16337
  this.bpo = bpo;
16294
16338
  this.renderer = renderer;
16295
- this.route = route;
16296
16339
  this.recFileService = recFileService;
16297
16340
  this.uploader = uploader;
16298
16341
  this._project = null;
@@ -17200,8 +17243,8 @@ class AudioRecorder extends BasicRecorder {
17200
17243
  }
17201
17244
  }
17202
17245
  }
17203
- AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorder, deps: [{ token: i1$3.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$2.ActivatedRoute }, { token: i1$4.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
17204
- AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioRecorder, selector: "app-audiorecorder", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "recorderCombiPane", first: true, predicate: RecorderCombiPane, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17246
+ AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, deps: [{ token: i1$2.BreakpointObserver }, { token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$3.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
17247
+ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioRecorder, selector: "app-audiorecorder", inputs: { projectName: "projectName", dataSaved: "dataSaved" }, host: { listeners: { "window:keypress": "onKeyPress($event)", "window:keydown": "onKeyDown($event)" } }, providers: [SessionService], viewQueries: [{ propertyName: "recorderCombiPane", first: true, predicate: RecorderCombiPane, descendants: true, static: true }, { propertyName: "liveLevelDisplay", first: true, predicate: LevelBar, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17205
17248
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
17206
17249
  <app-warningbar [show]="isDefaultAudioTestSession()"
17207
17250
  warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
@@ -17260,7 +17303,7 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
17260
17303
  </div>
17261
17304
  </div>
17262
17305
  `, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;flex:1 0 30%;align-items:center;text-align:center;align-content:center}\n", ".startstopscreenxs{width:100%;flex:1 0 100%;align-items:center;text-align:center;align-content:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"], dependencies: [{ kind: "directive", type: i1$1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { kind: "component", type: i3.MatButton, selector: "button[mat-button], button[mat-raised-button], button[mat-icon-button], button[mat-fab], button[mat-mini-fab], button[mat-stroked-button], button[mat-flat-button]", inputs: ["disabled", "disableRipple", "color"], exportAs: ["matButton"] }, { kind: "component", type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos", "state"] }, { kind: "component", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { kind: "component", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "disableAudioDetails", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { kind: "component", type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { kind: "component", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { kind: "component", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { kind: "component", type: WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }, { kind: "component", type: RecorderCombiPane, selector: "app-recordercombipane", inputs: ["selectDisabled", "selectedRecordingFile", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["selectedRecordingFileChanged"] }] });
17263
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorder, decorators: [{
17306
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, decorators: [{
17264
17307
  type: Component,
17265
17308
  args: [{ selector: 'app-audiorecorder', providers: [SessionService], template: `
17266
17309
  <app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
@@ -17321,7 +17364,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
17321
17364
  </div>
17322
17365
  </div>
17323
17366
  `, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{display:flex;flex-direction:row;align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;flex:1 0 30%;align-items:center;text-align:center;align-content:center}\n", ".startstopscreenxs{width:100%;flex:1 0 100%;align-items:center;text-align:center;align-content:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n", ".audioStatusDisplay{display:flex;flex-direction:row;height:100px;min-height:100px}\n", ".audioStatusDisplayXs{display:flex;flex-direction:column;height:125px;min-height:125px}\n"] }]
17324
- }], ctorParameters: function () { return [{ type: i1$3.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$2.ActivatedRoute }, { type: i1$4.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
17367
+ }], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$3.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
17325
17368
  type: Inject,
17326
17369
  args: [SPEECHRECORDER_CONFIG]
17327
17370
  }] }]; }, propDecorators: { projectName: [{
@@ -17366,7 +17409,7 @@ class AudioRecorderComponent extends RecorderComponent {
17366
17409
  }
17367
17410
  else {
17368
17411
  // all this attempts to customize the message do not work anymore (for security reasons)!!
17369
- var message = "Please do not leave the page, until all recordings are uploaded!";
17412
+ const message = "Please do not leave the page, until all recordings are uploaded!";
17370
17413
  alert(message);
17371
17414
  e = e || window.event;
17372
17415
  if (e) {
@@ -17466,16 +17509,16 @@ class AudioRecorderComponent extends RecorderComponent {
17466
17509
  return this.dataSaved && !this.ar.isActive();
17467
17510
  }
17468
17511
  }
17469
- AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorderComponent, deps: [{ token: i1$2.ActivatedRoute }, { token: i1$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
17470
- AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: AudioRecorderComponent, selector: "app-audiorecorder-comp", providers: [SessionService], viewQueries: [{ propertyName: "ar", first: true, predicate: AudioRecorder, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17512
+ AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorderComponent, deps: [{ token: i4$2.ActivatedRoute }, { token: i4$2.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
17513
+ AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: AudioRecorderComponent, selector: "app-audiorecorder-comp", providers: [SessionService], viewQueries: [{ propertyName: "ar", first: true, predicate: AudioRecorder, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
17471
17514
  <app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
17472
17515
  `, isInline: true, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"], dependencies: [{ kind: "component", type: AudioRecorder, selector: "app-audiorecorder", inputs: ["projectName", "dataSaved"] }] });
17473
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: AudioRecorderComponent, decorators: [{
17516
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorderComponent, decorators: [{
17474
17517
  type: Component,
17475
17518
  args: [{ selector: 'app-audiorecorder-comp', providers: [SessionService], template: `
17476
17519
  <app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
17477
17520
  `, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"] }]
17478
- }], ctorParameters: function () { return [{ type: i1$2.ActivatedRoute }, { type: i1$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: SpeechRecorderUploader }]; }, propDecorators: { ar: [{
17521
+ }], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i4$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: SpeechRecorderUploader }]; }, propDecorators: { ar: [{
17479
17522
  type: ViewChild,
17480
17523
  args: [AudioRecorder, { static: true }]
17481
17524
  }] } });
@@ -17509,11 +17552,11 @@ class SpeechrecorderngModule {
17509
17552
  };
17510
17553
  }
17511
17554
  }
17512
- SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17513
- SpeechrecorderngModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
17514
- ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [i1$2.RouterModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule], exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder] });
17515
- SpeechrecorderngModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader], imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule] });
17516
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
17555
+ SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
17556
+ SpeechrecorderngModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
17557
+ ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [i4$2.RouterModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule], exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder] });
17558
+ SpeechrecorderngModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader], imports: [RouterModule.forChild(SPR_ROUTES), CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule, MatMenuModule] });
17559
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
17517
17560
  type: NgModule,
17518
17561
  args: [{
17519
17562
  declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
@@ -17524,7 +17567,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
17524
17567
  }]
17525
17568
  }] });
17526
17569
 
17527
- const VERSION = '3.4.3';
17570
+ const VERSION = '3.4.5';
17528
17571
 
17529
17572
  /*
17530
17573
  * Public API Surface of speechrecorderng