speechrecorderng 3.4.4 → 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.
- package/esm2020/lib/action/action.mjs +3 -3
- package/esm2020/lib/audio/audio_display.mjs +7 -9
- package/esm2020/lib/audio/capture/capture.mjs +2 -2
- package/esm2020/lib/audio/io/stream.mjs +1 -1
- package/esm2020/lib/audio/net_audio_buffer.mjs +1 -1
- package/esm2020/lib/audio/playback/array_audio_buffer_source_node.mjs +2 -2
- package/esm2020/lib/audio/playback/audio_source_worklet_module_loader.mjs +2 -2
- package/esm2020/lib/audio/playback/inddb_audio_buffer_source_node.mjs +1 -1
- package/esm2020/lib/audio/ui/container.mjs +3 -3
- package/esm2020/lib/db/inddb.mjs +1 -1
- package/esm2020/lib/net/uploader.mjs +31 -28
- package/esm2020/lib/speechrecorder/project/project.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/recordings/basic_recording.service.mjs +53 -51
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +121 -113
- package/esm2020/lib/speechrecorder/script/script.service.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +22 -23
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +13 -11
- package/esm2020/lib/speechrecorder/session/progress.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/prompting.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +1 -1
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +3 -3
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +17 -16
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +40 -38
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +144 -134
- package/esm2020/lib/speechrecorder/session/session.service.mjs +12 -9
- package/esm2020/lib/speechrecorder/startstopsignal/startstopsignal.mjs +1 -2
- package/esm2020/lib/speechrecorderng.component.mjs +3 -3
- package/esm2020/lib/speechrecorderng.module.mjs +1 -1
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/recordingitem_display.mjs +2 -2
- package/fesm2015/speechrecorderng.mjs +485 -456
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +485 -456
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/action/action.d.ts +1 -1
- package/lib/audio/audio_display.d.ts +1 -3
- package/lib/audio/io/stream.d.ts +1 -1
- package/lib/net/uploader.d.ts +6 -6
- package/lib/speechrecorder/project/project.service.d.ts +4 -4
- package/lib/speechrecorder/script/script.service.d.ts +2 -2
- package/lib/speechrecorder/session/audiorecorder.d.ts +1 -2
- package/lib/speechrecorder/session/basicrecorder.d.ts +1 -1
- package/lib/speechrecorder/session/controlpanel.d.ts +1 -1
- package/lib/speechrecorder/session/session.service.d.ts +2 -2
- package/lib/spr.module.version.d.ts +1 -1
- package/package.json +1 -1
|
@@ -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$
|
|
15
|
+
import * as i1$2 from '@angular/cdk/layout';
|
|
18
16
|
import { Breakpoints } from '@angular/cdk/layout';
|
|
19
|
-
import * as i1$
|
|
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$
|
|
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, (
|
|
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
|
-
|
|
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(
|
|
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
|
|
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', (
|
|
3170
|
+
this.context.addEventListener('statechange', () => {
|
|
3171
3171
|
if (this.context.state !== 'running') {
|
|
3172
3172
|
this.close();
|
|
3173
3173
|
}
|
|
@@ -4519,7 +4519,7 @@ class Uploader {
|
|
|
4519
4519
|
si += v.size;
|
|
4520
4520
|
}
|
|
4521
4521
|
else if (typeof v === 'string') {
|
|
4522
|
-
// encode to
|
|
4522
|
+
// encode to UTF-8 to get upload size
|
|
4523
4523
|
si += this.te.encode().length;
|
|
4524
4524
|
}
|
|
4525
4525
|
});
|
|
@@ -4557,34 +4557,37 @@ class Uploader {
|
|
|
4557
4557
|
// pipe(timeout()) is not the same as xhr.timeout
|
|
4558
4558
|
let uploadedUpload = null;
|
|
4559
4559
|
//console.debug("Post upload: "+ul)
|
|
4560
|
-
this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe(
|
|
4561
|
-
|
|
4562
|
-
|
|
4563
|
-
|
|
4564
|
-
|
|
4565
|
-
|
|
4566
|
-
|
|
4567
|
-
|
|
4568
|
-
|
|
4569
|
-
// The backend returned an unsuccessful response code.
|
|
4570
|
-
// The response body may contain clues as to what went wrong,
|
|
4571
|
-
console.error(`Upload error: Server returned code ${err.status}`);
|
|
4572
|
-
}
|
|
4573
|
-
this.processError(ul);
|
|
4574
|
-
}, () => {
|
|
4575
|
-
//console.debug('Upload complete method called')
|
|
4576
|
-
if (uploadedUpload) {
|
|
4577
|
-
if (this.DEBUG_DELAY > 0) {
|
|
4578
|
-
window.setTimeout(() => {
|
|
4579
|
-
this.uploadDone(ul);
|
|
4580
|
-
}, 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);
|
|
4581
4569
|
}
|
|
4582
4570
|
else {
|
|
4583
|
-
|
|
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!');
|
|
4584
4590
|
}
|
|
4585
|
-
}
|
|
4586
|
-
else {
|
|
4587
|
-
console.error('Upload post complete, but upload not set in next method!');
|
|
4588
4591
|
}
|
|
4589
4592
|
});
|
|
4590
4593
|
}
|
|
@@ -4599,7 +4602,7 @@ class Uploader {
|
|
|
4599
4602
|
// set retry timer
|
|
4600
4603
|
this.retryTimerId = window.setTimeout(() => {
|
|
4601
4604
|
this.retryTimerRunning = false;
|
|
4602
|
-
//console.debug("Upload retry timer
|
|
4605
|
+
//console.debug("Upload retry timer expired. Continue processing...")
|
|
4603
4606
|
this.process();
|
|
4604
4607
|
}, this.RETRY_DELAY);
|
|
4605
4608
|
this.retryTimerRunning = true;
|
|
@@ -4693,12 +4696,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
4693
4696
|
* Created by klausj on 17.06.2017.
|
|
4694
4697
|
*/
|
|
4695
4698
|
class ProjectService {
|
|
4696
|
-
constructor(http,
|
|
4699
|
+
constructor(http, platformLocation, config) {
|
|
4697
4700
|
this.http = http;
|
|
4698
|
-
this.
|
|
4701
|
+
this.platformLocation = platformLocation;
|
|
4699
4702
|
this.config = config;
|
|
4700
4703
|
this.withCredentials = false;
|
|
4701
|
-
console.log("Base Href: " +
|
|
4704
|
+
console.log("Base Href: " + platformLocation.getBaseHrefFromDOM());
|
|
4702
4705
|
let apiEndPoint = '';
|
|
4703
4706
|
if (config && config.apiEndPoint) {
|
|
4704
4707
|
apiEndPoint = config.apiEndPoint;
|
|
@@ -4781,14 +4784,17 @@ class SessionService {
|
|
|
4781
4784
|
let wrapObs = new Observable(subscriber => {
|
|
4782
4785
|
this._uploadCount++;
|
|
4783
4786
|
let obs = this.http.patch(sesssUrl, body, { withCredentials: this.withCredentials });
|
|
4784
|
-
obs.subscribe(
|
|
4785
|
-
|
|
4786
|
-
|
|
4787
|
-
|
|
4788
|
-
|
|
4789
|
-
|
|
4790
|
-
|
|
4791
|
-
|
|
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
|
+
}
|
|
4792
4798
|
});
|
|
4793
4799
|
});
|
|
4794
4800
|
return wrapObs;
|
|
@@ -7402,7 +7408,7 @@ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
7402
7408
|
<audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
|
|
7403
7409
|
<audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
|
|
7404
7410
|
</div>
|
|
7405
|
-
`, 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;
|
|
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" }] });
|
|
7406
7412
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioClipUIContainer, decorators: [{
|
|
7407
7413
|
type: Component,
|
|
7408
7414
|
args: [{ selector: 'app-audio', template: `
|
|
@@ -7412,7 +7418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
7412
7418
|
<audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
|
|
7413
7419
|
<audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
|
|
7414
7420
|
</div>
|
|
7415
|
-
`, 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;
|
|
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"] }]
|
|
7416
7422
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { canvasRef: [{
|
|
7417
7423
|
type: ViewChild,
|
|
7418
7424
|
args: ['divider', { static: true }]
|
|
@@ -7726,8 +7732,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
7726
7732
|
}] } });
|
|
7727
7733
|
|
|
7728
7734
|
class AudioDisplay {
|
|
7729
|
-
constructor(
|
|
7730
|
-
this.route = route;
|
|
7735
|
+
constructor(ref, eRef) {
|
|
7731
7736
|
this.ref = ref;
|
|
7732
7737
|
this.eRef = eRef;
|
|
7733
7738
|
this._audioClip = null;
|
|
@@ -7790,7 +7795,7 @@ class AudioDisplay {
|
|
|
7790
7795
|
this.status = 'ERROR';
|
|
7791
7796
|
}
|
|
7792
7797
|
}
|
|
7793
|
-
AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplay, deps: [{ token:
|
|
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 });
|
|
7794
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: `
|
|
7795
7800
|
|
|
7796
7801
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -7821,7 +7826,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
7821
7826
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
7822
7827
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
7823
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"] }]
|
|
7824
|
-
}], ctorParameters: function () { return [{ type:
|
|
7829
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
|
|
7825
7830
|
type: Input
|
|
7826
7831
|
}], playStopAction: [{
|
|
7827
7832
|
type: Input
|
|
@@ -7852,11 +7857,11 @@ class ResponsiveComponent {
|
|
|
7852
7857
|
});
|
|
7853
7858
|
}
|
|
7854
7859
|
}
|
|
7855
|
-
ResponsiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1$
|
|
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 });
|
|
7856
7861
|
ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ResponsiveComponent, ngImport: i0 });
|
|
7857
7862
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, decorators: [{
|
|
7858
7863
|
type: Directive
|
|
7859
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
7864
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; } });
|
|
7860
7865
|
|
|
7861
7866
|
class ScrollIntoViewDirective {
|
|
7862
7867
|
constructor(elRef) {
|
|
@@ -8536,7 +8541,7 @@ class Prompting extends ResponsiveComponent {
|
|
|
8536
8541
|
this.onPrevItem.emit();
|
|
8537
8542
|
}
|
|
8538
8543
|
}
|
|
8539
|
-
Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, deps: [{ token: i1$
|
|
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 });
|
|
8540
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: `
|
|
8541
8546
|
|
|
8542
8547
|
<app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
|
|
@@ -8585,7 +8590,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
8585
8590
|
|
|
8586
8591
|
|
|
8587
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"] }]
|
|
8588
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
8593
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
|
|
8589
8594
|
type: ViewChild,
|
|
8590
8595
|
args: [SimpleTrafficLight, { static: true }]
|
|
8591
8596
|
}], audioDisplay: [{
|
|
@@ -8636,7 +8641,7 @@ class SessionFinishedDialog {
|
|
|
8636
8641
|
this.dialogRef.close();
|
|
8637
8642
|
}
|
|
8638
8643
|
}
|
|
8639
|
-
SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1$
|
|
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 });
|
|
8640
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>
|
|
8641
8646
|
<div mat-dialog-content>
|
|
8642
8647
|
|
|
@@ -8646,7 +8651,7 @@ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
8646
8651
|
<div mat-dialog-actions>
|
|
8647
8652
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
8648
8653
|
</div>
|
|
8649
|
-
`, 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$
|
|
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"] }] });
|
|
8650
8655
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, decorators: [{
|
|
8651
8656
|
type: Component,
|
|
8652
8657
|
args: [{
|
|
@@ -8662,7 +8667,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
8662
8667
|
</div>
|
|
8663
8668
|
`
|
|
8664
8669
|
}]
|
|
8665
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
8670
|
+
}], ctorParameters: function () { return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
|
|
8666
8671
|
type: Inject,
|
|
8667
8672
|
args: [MAT_DIALOG_DATA]
|
|
8668
8673
|
}] }]; } });
|
|
@@ -8676,7 +8681,7 @@ class MessageDialog {
|
|
|
8676
8681
|
this.dialogRef.close();
|
|
8677
8682
|
}
|
|
8678
8683
|
}
|
|
8679
|
-
MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, deps: [{ token: i1$
|
|
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 });
|
|
8680
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>
|
|
8681
8686
|
<mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
|
|
8682
8687
|
<div mat-dialog-content>
|
|
@@ -8688,7 +8693,7 @@ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
8688
8693
|
<div mat-dialog-actions>
|
|
8689
8694
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
8690
8695
|
</div>
|
|
8691
|
-
`, 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$
|
|
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"] }] });
|
|
8692
8697
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, decorators: [{
|
|
8693
8698
|
type: Component,
|
|
8694
8699
|
args: [{
|
|
@@ -8706,7 +8711,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
8706
8711
|
</div>
|
|
8707
8712
|
`
|
|
8708
8713
|
}]
|
|
8709
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
8714
|
+
}], ctorParameters: function () { return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
|
|
8710
8715
|
type: Inject,
|
|
8711
8716
|
args: [MAT_DIALOG_DATA]
|
|
8712
8717
|
}] }]; } });
|
|
@@ -9007,62 +9012,64 @@ let BasicRecordingService = class BasicRecordingService {
|
|
|
9007
9012
|
ausps.set('requestUUID', UUID.generate());
|
|
9008
9013
|
}
|
|
9009
9014
|
let obs = new Observable(observer => {
|
|
9010
|
-
this.audioRequestByURL(baseAudioUrl, ausps).subscribe(
|
|
9011
|
-
|
|
9012
|
-
|
|
9013
|
-
|
|
9014
|
-
|
|
9015
|
-
|
|
9016
|
-
|
|
9017
|
-
|
|
9018
|
-
|
|
9019
|
-
|
|
9020
|
-
|
|
9021
|
-
|
|
9022
|
-
|
|
9023
|
-
|
|
9024
|
-
|
|
9025
|
-
|
|
9026
|
-
|
|
9027
|
-
|
|
9028
|
-
|
|
9029
|
-
|
|
9030
|
-
|
|
9031
|
-
|
|
9032
|
-
|
|
9033
|
-
|
|
9034
|
-
|
|
9035
|
-
|
|
9036
|
-
|
|
9037
|
-
|
|
9038
|
-
|
|
9039
|
-
|
|
9040
|
-
|
|
9041
|
-
|
|
9042
|
-
|
|
9043
|
-
|
|
9044
|
-
|
|
9045
|
-
|
|
9046
|
-
|
|
9047
|
-
|
|
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
|
+
}
|
|
9048
9060
|
}
|
|
9049
9061
|
else {
|
|
9050
|
-
const errMsg = '
|
|
9062
|
+
const errMsg = 'Fetching audio file: response has no body';
|
|
9051
9063
|
console.error(errMsg);
|
|
9052
9064
|
observer.error(errMsg);
|
|
9053
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();
|
|
9054
9072
|
}
|
|
9055
|
-
else {
|
|
9056
|
-
const errMsg = 'Fetching audio file: response has no body';
|
|
9057
|
-
console.error(errMsg);
|
|
9058
|
-
observer.error(errMsg);
|
|
9059
|
-
}
|
|
9060
|
-
}, (error) => {
|
|
9061
|
-
// all other states are errors
|
|
9062
|
-
//const errMsg='Fetching audio file HTTP error: '+error;
|
|
9063
|
-
//console.error(errMsg);
|
|
9064
|
-
observer.error(error);
|
|
9065
|
-
//observer.complete();
|
|
9066
9073
|
});
|
|
9067
9074
|
});
|
|
9068
9075
|
return obs;
|
|
@@ -9632,36 +9639,38 @@ class RecordingService extends BasicRecordingService {
|
|
|
9632
9639
|
}
|
|
9633
9640
|
if (recordingFile.session && recFileId) {
|
|
9634
9641
|
let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
|
|
9635
|
-
obs.subscribe(
|
|
9636
|
-
|
|
9637
|
-
|
|
9638
|
-
|
|
9639
|
-
|
|
9640
|
-
|
|
9641
|
-
|
|
9642
|
-
|
|
9643
|
-
|
|
9644
|
-
|
|
9645
|
-
|
|
9646
|
-
|
|
9647
|
-
|
|
9648
|
-
|
|
9649
|
-
|
|
9650
|
-
|
|
9651
|
-
if (err
|
|
9652
|
-
|
|
9653
|
-
|
|
9654
|
-
|
|
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
|
+
}
|
|
9655
9669
|
}
|
|
9656
9670
|
else {
|
|
9657
|
-
// all other states are errors
|
|
9658
9671
|
observer.error(err);
|
|
9659
|
-
observer.complete();
|
|
9660
9672
|
}
|
|
9661
9673
|
}
|
|
9662
|
-
else {
|
|
9663
|
-
observer.error(err);
|
|
9664
|
-
}
|
|
9665
9674
|
});
|
|
9666
9675
|
}
|
|
9667
9676
|
else {
|
|
@@ -9678,49 +9687,50 @@ class RecordingService extends BasicRecordingService {
|
|
|
9678
9687
|
}
|
|
9679
9688
|
if (recordingFile.session && recFileId) {
|
|
9680
9689
|
let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
|
|
9681
|
-
obs.subscribe(resp => {
|
|
9682
|
-
|
|
9683
|
-
|
|
9684
|
-
|
|
9685
|
-
|
|
9686
|
-
|
|
9687
|
-
|
|
9688
|
-
|
|
9689
|
-
|
|
9690
|
-
|
|
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 {
|
|
9691
9705
|
observer.next(recordingFile);
|
|
9692
9706
|
observer.complete();
|
|
9693
|
-
}
|
|
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();
|
|
9694
9723
|
}
|
|
9695
9724
|
else {
|
|
9696
|
-
|
|
9725
|
+
// all other states are errors
|
|
9726
|
+
observer.error(err);
|
|
9697
9727
|
observer.complete();
|
|
9698
9728
|
}
|
|
9699
|
-
}, error => {
|
|
9700
|
-
observer.error(error);
|
|
9701
|
-
observer.complete();
|
|
9702
|
-
});
|
|
9703
|
-
}
|
|
9704
|
-
else {
|
|
9705
|
-
observer.error('Fetching audio file: response has no body');
|
|
9706
|
-
}
|
|
9707
|
-
}, (err) => {
|
|
9708
|
-
if (err instanceof HttpErrorResponse) {
|
|
9709
|
-
if (err.status == 404) {
|
|
9710
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
9711
|
-
observer.next(null);
|
|
9712
|
-
observer.complete();
|
|
9713
9729
|
}
|
|
9714
9730
|
else {
|
|
9715
|
-
// all other states are errors
|
|
9716
9731
|
observer.error(err);
|
|
9717
|
-
observer.complete();
|
|
9718
9732
|
}
|
|
9719
|
-
}
|
|
9720
|
-
else {
|
|
9721
|
-
observer.error(err);
|
|
9722
|
-
}
|
|
9723
|
-
});
|
|
9733
|
+
} });
|
|
9724
9734
|
}
|
|
9725
9735
|
else {
|
|
9726
9736
|
observer.error();
|
|
@@ -10042,83 +10052,88 @@ class RecordingService extends BasicRecordingService {
|
|
|
10042
10052
|
let wobs = new Observable(observer => {
|
|
10043
10053
|
if (recordingFile.session) {
|
|
10044
10054
|
let obs = this.fetchSprAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);
|
|
10045
|
-
obs.subscribe(
|
|
10046
|
-
|
|
10047
|
-
|
|
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
|
|
10048
10106
|
if (resp.body) {
|
|
10049
10107
|
aCtx.decodeAudioData(resp.body, ab => {
|
|
10050
10108
|
let abs = new AudioBufferSource(ab);
|
|
10051
|
-
|
|
10109
|
+
let adh = new AudioDataHolder(abs);
|
|
10110
|
+
let rf = new SprRecordingFile(sessId, itemcode, version, adh);
|
|
10052
10111
|
if (this.debugDelay > 0) {
|
|
10053
10112
|
window.setTimeout(() => {
|
|
10054
|
-
observer.next(
|
|
10113
|
+
observer.next(rf);
|
|
10055
10114
|
observer.complete();
|
|
10056
10115
|
}, this.debugDelay);
|
|
10057
10116
|
}
|
|
10058
10117
|
else {
|
|
10059
|
-
observer.next(
|
|
10118
|
+
observer.next(rf);
|
|
10060
10119
|
observer.complete();
|
|
10061
10120
|
}
|
|
10062
|
-
}, error => {
|
|
10063
|
-
observer.error(error);
|
|
10064
|
-
observer.complete();
|
|
10065
10121
|
});
|
|
10066
10122
|
}
|
|
10067
10123
|
else {
|
|
10068
|
-
observer.error(
|
|
10124
|
+
observer.error();
|
|
10069
10125
|
}
|
|
10070
|
-
},
|
|
10126
|
+
},
|
|
10127
|
+
error: (err) => {
|
|
10071
10128
|
if (err instanceof HttpErrorResponse && err.status == 404) {
|
|
10072
10129
|
// Interpret not as an error, the file ist not recorded yet
|
|
10073
10130
|
observer.next(null);
|
|
10074
10131
|
observer.complete();
|
|
10075
10132
|
}
|
|
10076
10133
|
else {
|
|
10077
|
-
// all other
|
|
10134
|
+
// all other errors are real errors
|
|
10078
10135
|
observer.error(err);
|
|
10079
10136
|
}
|
|
10080
|
-
});
|
|
10081
|
-
}
|
|
10082
|
-
else {
|
|
10083
|
-
observer.error();
|
|
10084
|
-
}
|
|
10085
|
-
});
|
|
10086
|
-
return wobs;
|
|
10087
|
-
}
|
|
10088
|
-
fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
|
|
10089
|
-
let wobs = new Observable(observer => {
|
|
10090
|
-
let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
|
|
10091
|
-
obs.subscribe(resp => {
|
|
10092
|
-
// Do not use Promise version, which does not work with Safari 13
|
|
10093
|
-
if (resp.body) {
|
|
10094
|
-
aCtx.decodeAudioData(resp.body, ab => {
|
|
10095
|
-
let abs = new AudioBufferSource(ab);
|
|
10096
|
-
let adh = new AudioDataHolder(abs);
|
|
10097
|
-
let rf = new SprRecordingFile(sessId, itemcode, version, adh);
|
|
10098
|
-
if (this.debugDelay > 0) {
|
|
10099
|
-
window.setTimeout(() => {
|
|
10100
|
-
observer.next(rf);
|
|
10101
|
-
observer.complete();
|
|
10102
|
-
}, this.debugDelay);
|
|
10103
|
-
}
|
|
10104
|
-
else {
|
|
10105
|
-
observer.next(rf);
|
|
10106
|
-
observer.complete();
|
|
10107
|
-
}
|
|
10108
|
-
});
|
|
10109
|
-
}
|
|
10110
|
-
else {
|
|
10111
|
-
observer.error();
|
|
10112
|
-
}
|
|
10113
|
-
}, (err) => {
|
|
10114
|
-
if (err instanceof HttpErrorResponse && err.status == 404) {
|
|
10115
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
10116
|
-
observer.next(null);
|
|
10117
|
-
observer.complete();
|
|
10118
|
-
}
|
|
10119
|
-
else {
|
|
10120
|
-
// all other errors are real errors
|
|
10121
|
-
observer.error(err);
|
|
10122
10137
|
}
|
|
10123
10138
|
});
|
|
10124
10139
|
});
|
|
@@ -10577,7 +10592,7 @@ class UploadStatus {
|
|
|
10577
10592
|
constructor() {
|
|
10578
10593
|
this._awaitNewUpload = false;
|
|
10579
10594
|
this.spinnerMode = 'determinate';
|
|
10580
|
-
this.
|
|
10595
|
+
this.colorStatus = 'primary';
|
|
10581
10596
|
this._value = 100;
|
|
10582
10597
|
this.displayValue = null;
|
|
10583
10598
|
this.toolTipText = '';
|
|
@@ -10616,13 +10631,13 @@ class UploadStatus {
|
|
|
10616
10631
|
set status(status) {
|
|
10617
10632
|
this._status = status;
|
|
10618
10633
|
if ('accent' === status) {
|
|
10619
|
-
this.
|
|
10634
|
+
this.colorStatus = 'accent';
|
|
10620
10635
|
}
|
|
10621
10636
|
else if ('warn' === status) {
|
|
10622
|
-
this.
|
|
10637
|
+
this.colorStatus = 'warn';
|
|
10623
10638
|
}
|
|
10624
10639
|
else {
|
|
10625
|
-
this.
|
|
10640
|
+
this.colorStatus = 'primary';
|
|
10626
10641
|
}
|
|
10627
10642
|
this._updateSpinner();
|
|
10628
10643
|
}
|
|
@@ -10632,12 +10647,14 @@ class UploadStatus {
|
|
|
10632
10647
|
}
|
|
10633
10648
|
UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10634
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: `
|
|
10635
|
-
<mat-progress-spinner [mode]="spinnerMode" [color]="
|
|
10650
|
+
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
10651
|
+
[matTooltip]="toolTipText"></mat-progress-spinner>
|
|
10636
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"] }] });
|
|
10637
10653
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, decorators: [{
|
|
10638
10654
|
type: Component,
|
|
10639
10655
|
args: [{ selector: 'app-uploadstatus', template: `
|
|
10640
|
-
<mat-progress-spinner [mode]="spinnerMode" [color]="
|
|
10656
|
+
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
10657
|
+
[matTooltip]="toolTipText"></mat-progress-spinner>
|
|
10641
10658
|
`, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"] }]
|
|
10642
10659
|
}], propDecorators: { value: [{
|
|
10643
10660
|
type: Input
|
|
@@ -10746,7 +10763,7 @@ class TransportPanel extends ResponsiveComponent {
|
|
|
10746
10763
|
}
|
|
10747
10764
|
}
|
|
10748
10765
|
}
|
|
10749
|
-
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i1$
|
|
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 });
|
|
10750
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: `
|
|
10751
10768
|
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
10752
10769
|
mat-raised-button>
|
|
@@ -10791,7 +10808,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
10791
10808
|
</button>
|
|
10792
10809
|
|
|
10793
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"] }]
|
|
10794
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
10811
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { readonly: [{
|
|
10795
10812
|
type: Input
|
|
10796
10813
|
}], actions: [{
|
|
10797
10814
|
type: Input
|
|
@@ -10863,7 +10880,7 @@ class ControlPanel extends ResponsiveComponent {
|
|
|
10863
10880
|
return this._ready;
|
|
10864
10881
|
}
|
|
10865
10882
|
}
|
|
10866
|
-
ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i1$
|
|
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 });
|
|
10867
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: `
|
|
10868
10885
|
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
10869
10886
|
<app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
@@ -10873,9 +10890,9 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
10873
10890
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
10874
10891
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
10875
10892
|
</div>
|
|
10876
|
-
<div *ngIf="screenXs"style="flex-direction: column" >
|
|
10893
|
+
<div *ngIf="screenXs" style="flex-direction: column" >
|
|
10877
10894
|
<div style="flex-direction: row" class="flexFill" >
|
|
10878
|
-
<app-sprstatusdisplay style="flex:10 0 0
|
|
10895
|
+
<app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
10879
10896
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
10880
10897
|
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
10881
10898
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
@@ -10896,9 +10913,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
10896
10913
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
10897
10914
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
10898
10915
|
</div>
|
|
10899
|
-
<div *ngIf="screenXs"style="flex-direction: column" >
|
|
10916
|
+
<div *ngIf="screenXs" style="flex-direction: column" >
|
|
10900
10917
|
<div style="flex-direction: row" class="flexFill" >
|
|
10901
|
-
<app-sprstatusdisplay style="flex:10 0 0
|
|
10918
|
+
<app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
10902
10919
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
10903
10920
|
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
10904
10921
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
@@ -10908,7 +10925,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
10908
10925
|
|
|
10909
10926
|
</div>
|
|
10910
10927
|
`, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
|
|
10911
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
10928
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i1$3.MatDialog }]; }, propDecorators: { statusDisplay: [{
|
|
10912
10929
|
type: ViewChild,
|
|
10913
10930
|
args: [StatusDisplay, { static: true }]
|
|
10914
10931
|
}], transportPanel: [{
|
|
@@ -11559,7 +11576,7 @@ class RecordingItemControls extends ResponsiveComponent {
|
|
|
11559
11576
|
// this.status = 'ERROR';
|
|
11560
11577
|
}
|
|
11561
11578
|
}
|
|
11562
|
-
RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1$
|
|
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 });
|
|
11563
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: `
|
|
11564
11581
|
<button matTooltip="Start playback" (click)="playStartAction?.perform()"
|
|
11565
11582
|
[disabled]="playStartAction?.disabled"
|
|
@@ -11608,7 +11625,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
11608
11625
|
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
11609
11626
|
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
11610
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"] }]
|
|
11611
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
11628
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
|
|
11612
11629
|
type: Input
|
|
11613
11630
|
}], enableDownload: [{
|
|
11614
11631
|
type: Input
|
|
@@ -11689,7 +11706,7 @@ class RecordingItemDisplay extends ResponsiveComponent {
|
|
|
11689
11706
|
let peakDBVal = levelInfo.powerLevelDB();
|
|
11690
11707
|
if (this.peakDbLvl < peakDBVal) {
|
|
11691
11708
|
this.peakDbLvl = peakDBVal;
|
|
11692
|
-
// the event comes from outside
|
|
11709
|
+
// the event comes from outside an Angular zone
|
|
11693
11710
|
this.changeDetectorRef.detectChanges();
|
|
11694
11711
|
}
|
|
11695
11712
|
this.liveLevel.update(levelInfo);
|
|
@@ -11705,7 +11722,7 @@ class RecordingItemDisplay extends ResponsiveComponent {
|
|
|
11705
11722
|
this.changeDetectorRef.detectChanges();
|
|
11706
11723
|
}
|
|
11707
11724
|
}
|
|
11708
|
-
RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1$
|
|
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 });
|
|
11709
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: `
|
|
11710
11727
|
<div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
|
|
11711
11728
|
<audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
|
|
@@ -11720,7 +11737,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
11720
11737
|
<spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
|
|
11721
11738
|
</div>
|
|
11722
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"] }]
|
|
11723
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
11740
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
|
|
11724
11741
|
type: ViewChild,
|
|
11725
11742
|
args: [LevelBar, { static: true }]
|
|
11726
11743
|
}], streamingMode: [{
|
|
@@ -13971,7 +13988,7 @@ class SessionManager extends BasicRecorder {
|
|
|
13971
13988
|
}
|
|
13972
13989
|
}
|
|
13973
13990
|
}
|
|
13974
|
-
SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, deps: [{ token: i1$
|
|
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 });
|
|
13975
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: `
|
|
13976
13993
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
13977
13994
|
<app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
@@ -14074,7 +14091,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
14074
14091
|
</div>
|
|
14075
14092
|
</div>
|
|
14076
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"] }]
|
|
14077
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
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: [{
|
|
14078
14095
|
type: Inject,
|
|
14079
14096
|
args: [SPEECHRECORDER_CONFIG]
|
|
14080
14097
|
}] }]; }, propDecorators: { projectName: [{
|
|
@@ -14520,7 +14537,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
14520
14537
|
}
|
|
14521
14538
|
else {
|
|
14522
14539
|
// all this attempts to customize the message do not work anymore (for security reasons)!!
|
|
14523
|
-
|
|
14540
|
+
const message = "Please do not leave the page, until all recordings are uploaded!";
|
|
14524
14541
|
alert(message);
|
|
14525
14542
|
e = e || window.event;
|
|
14526
14543
|
if (e) {
|
|
@@ -14644,7 +14661,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
14644
14661
|
projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;
|
|
14645
14662
|
}
|
|
14646
14663
|
if (projUrl) {
|
|
14647
|
-
|
|
14664
|
+
const pLoader = new XMLHttpRequest();
|
|
14648
14665
|
pLoader.open("GET", projUrl, true);
|
|
14649
14666
|
pLoader.setRequestHeader('Accept', 'application/json');
|
|
14650
14667
|
pLoader.responseType = "json";
|
|
@@ -14679,7 +14696,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
14679
14696
|
this.sm.statusMsg = 'ERROR: Recording.';
|
|
14680
14697
|
}
|
|
14681
14698
|
}
|
|
14682
|
-
SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token:
|
|
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 });
|
|
14683
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: `
|
|
14684
14701
|
<app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
|
|
14685
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"] }] });
|
|
@@ -14688,7 +14705,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
14688
14705
|
args: [{ selector: 'app-speechrecorder', providers: [SessionService], template: `
|
|
14689
14706
|
<app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
|
|
14690
14707
|
`, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"] }]
|
|
14691
|
-
}], ctorParameters: function () { return [{ type:
|
|
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: [{
|
|
14692
14709
|
type: ViewChild,
|
|
14693
14710
|
args: [SessionManager, { static: true }]
|
|
14694
14711
|
}] } });
|
|
@@ -14894,7 +14911,7 @@ class AudioDisplayPlayer {
|
|
|
14894
14911
|
this.status = 'ERROR';
|
|
14895
14912
|
}
|
|
14896
14913
|
}
|
|
14897
|
-
AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token:
|
|
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 });
|
|
14898
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: `
|
|
14899
14916
|
|
|
14900
14917
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -14925,7 +14942,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
14925
14942
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
14926
14943
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
|
|
14927
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"] }]
|
|
14928
|
-
}], ctorParameters: function () { return [{ type:
|
|
14945
|
+
}], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
|
|
14929
14946
|
type: Input
|
|
14930
14947
|
}], playStopAction: [{
|
|
14931
14948
|
type: Input
|
|
@@ -15075,37 +15092,39 @@ class RecordingFileService extends BasicRecordingService {
|
|
|
15075
15092
|
let wobs = new Observable(observer => {
|
|
15076
15093
|
if (recordingFile.recordingFileId) {
|
|
15077
15094
|
let obs = this.fetchAudiofile(recordingFile.recordingFileId);
|
|
15078
|
-
obs.subscribe(resp => {
|
|
15079
|
-
|
|
15080
|
-
|
|
15081
|
-
|
|
15082
|
-
|
|
15083
|
-
|
|
15084
|
-
|
|
15085
|
-
|
|
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 {
|
|
15086
15108
|
observer.next(recordingFile);
|
|
15087
15109
|
observer.complete();
|
|
15088
|
-
}
|
|
15089
|
-
}
|
|
15090
|
-
|
|
15091
|
-
|
|
15092
|
-
|
|
15093
|
-
|
|
15094
|
-
|
|
15095
|
-
|
|
15096
|
-
|
|
15097
|
-
|
|
15098
|
-
|
|
15099
|
-
|
|
15100
|
-
|
|
15101
|
-
|
|
15102
|
-
|
|
15103
|
-
|
|
15104
|
-
|
|
15105
|
-
|
|
15106
|
-
// all other states are errors
|
|
15107
|
-
observer.error(error);
|
|
15108
|
-
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
|
+
}
|
|
15109
15128
|
}
|
|
15110
15129
|
});
|
|
15111
15130
|
}
|
|
@@ -15119,81 +15138,39 @@ class RecordingFileService extends BasicRecordingService {
|
|
|
15119
15138
|
let wobs = new Observable(observer => {
|
|
15120
15139
|
let rf = null;
|
|
15121
15140
|
let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);
|
|
15122
|
-
rfDescrObs.subscribe(value => {
|
|
15123
|
-
|
|
15124
|
-
|
|
15125
|
-
|
|
15126
|
-
|
|
15127
|
-
|
|
15128
|
-
|
|
15129
|
-
|
|
15130
|
-
|
|
15131
|
-
|
|
15132
|
-
|
|
15133
|
-
|
|
15134
|
-
|
|
15135
|
-
|
|
15136
|
-
|
|
15137
|
-
|
|
15138
|
-
|
|
15139
|
-
|
|
15140
|
-
|
|
15141
|
-
|
|
15142
|
-
|
|
15143
|
-
|
|
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
|
+
});
|
|
15144
15170
|
}
|
|
15145
15171
|
else {
|
|
15146
|
-
observer.
|
|
15147
|
-
observer.complete();
|
|
15172
|
+
observer.error('Received no audio data');
|
|
15148
15173
|
}
|
|
15149
|
-
});
|
|
15150
|
-
}
|
|
15151
|
-
else {
|
|
15152
|
-
observer.error('Received no audio data');
|
|
15153
|
-
}
|
|
15154
|
-
}, (error) => {
|
|
15155
|
-
if (error.status == 404) {
|
|
15156
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
15157
|
-
observer.next(null);
|
|
15158
|
-
observer.complete();
|
|
15159
|
-
}
|
|
15160
|
-
else {
|
|
15161
|
-
// all other states are errors
|
|
15162
|
-
observer.error(error);
|
|
15163
|
-
observer.complete();
|
|
15164
|
-
}
|
|
15165
|
-
});
|
|
15166
|
-
});
|
|
15167
|
-
});
|
|
15168
|
-
return wobs;
|
|
15169
|
-
}
|
|
15170
|
-
fetchSprRecordingFile(aCtx, recordingFileId) {
|
|
15171
|
-
let wobs = new Observable(observer => {
|
|
15172
|
-
let rf = null;
|
|
15173
|
-
let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
|
|
15174
|
-
rfDescrObs.subscribe(value => {
|
|
15175
|
-
rf = value;
|
|
15176
|
-
}, (error) => {
|
|
15177
|
-
observer.error(error);
|
|
15178
|
-
}, () => {
|
|
15179
|
-
let sampleCnt = null;
|
|
15180
|
-
if (rf && rf.channels && rf.frames) {
|
|
15181
|
-
sampleCnt = rf.channels * rf.frames;
|
|
15182
|
-
}
|
|
15183
|
-
// TODO use download storage type depending on sample count of file
|
|
15184
|
-
if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
|
|
15185
|
-
const baseUrl = this.recoFileUrl(recordingFileId);
|
|
15186
|
-
const obNetAb = this.chunkAudioRequestToNetAudioBuffer(aCtx, baseUrl, 0, rf?.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
|
|
15187
|
-
obNetAb.subscribe({
|
|
15188
|
-
next: (nab) => {
|
|
15189
|
-
let adh = new AudioDataHolder(nab);
|
|
15190
|
-
if (rf) {
|
|
15191
|
-
RecordingFileUtils.setAudioData(rf, adh);
|
|
15192
|
-
observer.next(rf);
|
|
15193
|
-
}
|
|
15194
|
-
},
|
|
15195
|
-
complete: () => {
|
|
15196
|
-
observer.complete();
|
|
15197
15174
|
},
|
|
15198
15175
|
error: (error) => {
|
|
15199
15176
|
if (error.status == 404) {
|
|
@@ -15209,47 +15186,97 @@ class RecordingFileService extends BasicRecordingService {
|
|
|
15209
15186
|
}
|
|
15210
15187
|
});
|
|
15211
15188
|
}
|
|
15212
|
-
|
|
15213
|
-
|
|
15214
|
-
|
|
15215
|
-
|
|
15216
|
-
|
|
15217
|
-
|
|
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);
|
|
15218
15214
|
if (rf) {
|
|
15219
|
-
let as = new AudioBufferSource(ab);
|
|
15220
|
-
let adh = new AudioDataHolder(as);
|
|
15221
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();
|
|
15222
15227
|
}
|
|
15223
15228
|
else {
|
|
15224
|
-
|
|
15229
|
+
// all other states are errors
|
|
15230
|
+
observer.error(error);
|
|
15231
|
+
observer.complete();
|
|
15225
15232
|
}
|
|
15226
|
-
|
|
15227
|
-
|
|
15228
|
-
|
|
15229
|
-
|
|
15230
|
-
|
|
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
|
+
});
|
|
15231
15261
|
}
|
|
15232
15262
|
else {
|
|
15233
|
-
observer.
|
|
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);
|
|
15234
15270
|
observer.complete();
|
|
15235
15271
|
}
|
|
15236
|
-
|
|
15237
|
-
|
|
15238
|
-
|
|
15239
|
-
|
|
15240
|
-
|
|
15241
|
-
|
|
15242
|
-
|
|
15243
|
-
|
|
15244
|
-
observer.next(null);
|
|
15245
|
-
observer.complete();
|
|
15246
|
-
}
|
|
15247
|
-
else {
|
|
15248
|
-
// all other states are errors
|
|
15249
|
-
observer.error(error);
|
|
15250
|
-
observer.complete();
|
|
15251
|
-
}
|
|
15252
|
-
});
|
|
15272
|
+
else {
|
|
15273
|
+
// all other states are errors
|
|
15274
|
+
observer.error(error);
|
|
15275
|
+
observer.complete();
|
|
15276
|
+
}
|
|
15277
|
+
}
|
|
15278
|
+
});
|
|
15279
|
+
}
|
|
15253
15280
|
}
|
|
15254
15281
|
});
|
|
15255
15282
|
});
|
|
@@ -15301,7 +15328,7 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
|
|
|
15301
15328
|
<legend>Versions</legend>
|
|
15302
15329
|
<mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
|
|
15303
15330
|
<select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
|
|
15304
|
-
<option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<
|
|
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>
|
|
15305
15332
|
</select>
|
|
15306
15333
|
</fieldset>
|
|
15307
15334
|
<fieldset>
|
|
@@ -15336,7 +15363,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
15336
15363
|
<legend>Versions</legend>
|
|
15337
15364
|
<mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
|
|
15338
15365
|
<select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
|
|
15339
|
-
<option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<
|
|
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>
|
|
15340
15367
|
</select>
|
|
15341
15368
|
</fieldset>
|
|
15342
15369
|
<fieldset>
|
|
@@ -15699,47 +15726,49 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15699
15726
|
let audioContext = AudioContextProvider.audioContextInstance();
|
|
15700
15727
|
if (audioContext) {
|
|
15701
15728
|
this.audioFetching = true;
|
|
15702
|
-
this.recordingFileService.fetchSprRecordingFile(audioContext, rfId).subscribe(
|
|
15703
|
-
|
|
15704
|
-
|
|
15705
|
-
|
|
15706
|
-
|
|
15707
|
-
|
|
15708
|
-
|
|
15709
|
-
|
|
15710
|
-
|
|
15711
|
-
|
|
15712
|
-
|
|
15713
|
-
|
|
15714
|
-
|
|
15715
|
-
|
|
15716
|
-
|
|
15717
|
-
|
|
15718
|
-
|
|
15719
|
-
|
|
15720
|
-
let sel = null;
|
|
15721
|
-
if (esffsr != null) {
|
|
15722
|
-
if (eeffsr != null) {
|
|
15723
|
-
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);
|
|
15724
15747
|
}
|
|
15725
|
-
|
|
15726
|
-
|
|
15727
|
-
|
|
15728
|
-
|
|
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
|
+
}
|
|
15729
15758
|
}
|
|
15759
|
+
else if (eeffsr != null) {
|
|
15760
|
+
sel = new Selection(esr, 0, eeffsr);
|
|
15761
|
+
}
|
|
15762
|
+
clip.selection = sel;
|
|
15730
15763
|
}
|
|
15731
|
-
else if (eeffsr != null) {
|
|
15732
|
-
sel = new Selection(esr, 0, eeffsr);
|
|
15733
|
-
}
|
|
15734
|
-
clip.selection = sel;
|
|
15735
15764
|
}
|
|
15736
15765
|
}
|
|
15766
|
+
this.audioClip = clip;
|
|
15767
|
+
this.loadedRecfile();
|
|
15768
|
+
}, error: error1 => {
|
|
15769
|
+
this.audioFetching = false;
|
|
15770
|
+
this.status = 'Error loading audio file!';
|
|
15737
15771
|
}
|
|
15738
|
-
this.audioClip = clip;
|
|
15739
|
-
this.loadedRecfile();
|
|
15740
|
-
}, error1 => {
|
|
15741
|
-
this.audioFetching = false;
|
|
15742
|
-
this.status = 'Error loading audio file!';
|
|
15743
15772
|
});
|
|
15744
15773
|
}
|
|
15745
15774
|
}
|
|
@@ -15767,7 +15796,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15767
15796
|
this.lastAction.disabled = (this.posInList == null || itemCnt == null || this.posInList >= itemCnt - 1);
|
|
15768
15797
|
}
|
|
15769
15798
|
loadSession(sessionId) {
|
|
15770
|
-
// load session and recording file
|
|
15799
|
+
// load session and recording file metadata only when on init and when session changes
|
|
15771
15800
|
if (sessionId != this.sessionId) {
|
|
15772
15801
|
// tell UI that we are working...
|
|
15773
15802
|
this.naviInfoLoading = true;
|
|
@@ -15805,7 +15834,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15805
15834
|
else {
|
|
15806
15835
|
// rec file with itemcode already exists, add (push) this version ...
|
|
15807
15836
|
exRfsForIc.push(rfd);
|
|
15808
|
-
//
|
|
15837
|
+
// ... and sort latest version (highest version number) to lowest index
|
|
15809
15838
|
exRfsForIc.sort((rfd1, rfd2) => {
|
|
15810
15839
|
return rfd2.version - rfd1.version;
|
|
15811
15840
|
});
|
|
@@ -15859,7 +15888,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15859
15888
|
}
|
|
15860
15889
|
}
|
|
15861
15890
|
}
|
|
15862
|
-
RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token:
|
|
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 });
|
|
15863
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: `
|
|
15864
15893
|
|
|
15865
15894
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -15898,7 +15927,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
15898
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>
|
|
15899
15928
|
</div>
|
|
15900
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"] }]
|
|
15901
|
-
}], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type:
|
|
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: [{
|
|
15902
15931
|
type: ViewChild,
|
|
15903
15932
|
args: [AudioDisplayScrollPane]
|
|
15904
15933
|
}] } });
|
|
@@ -15963,27 +15992,28 @@ class RecordingFileUI extends RecordingFileViewComponent {
|
|
|
15963
15992
|
sf = s.startFrame;
|
|
15964
15993
|
ef = s.endFrame;
|
|
15965
15994
|
}
|
|
15966
|
-
this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {
|
|
15967
|
-
|
|
15968
|
-
|
|
15969
|
-
|
|
15970
|
-
|
|
15971
|
-
|
|
15972
|
-
|
|
15973
|
-
|
|
15974
|
-
|
|
15975
|
-
|
|
15976
|
-
|
|
15977
|
-
|
|
15978
|
-
|
|
15979
|
-
|
|
15980
|
-
|
|
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
|
+
}
|
|
15981
16011
|
});
|
|
15982
16012
|
}
|
|
15983
16013
|
}
|
|
15984
16014
|
}
|
|
15985
16015
|
}
|
|
15986
|
-
RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileUI, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token:
|
|
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 });
|
|
15987
16017
|
RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
|
|
15988
16018
|
<h1>Recording file editing</h1>
|
|
15989
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>
|
|
@@ -16028,7 +16058,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
16028
16058
|
|
|
16029
16059
|
<button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
|
|
16030
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"] }]
|
|
16031
|
-
}], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type:
|
|
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 }]; } });
|
|
16032
16062
|
|
|
16033
16063
|
class MediaUtils {
|
|
16034
16064
|
static toMediaTime(timeInSeconds) {
|
|
@@ -16165,7 +16195,7 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
16165
16195
|
</mat-card-content>
|
|
16166
16196
|
</mat-card>
|
|
16167
16197
|
|
|
16168
|
-
`, 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$
|
|
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" }] });
|
|
16169
16199
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, decorators: [{
|
|
16170
16200
|
type: Component,
|
|
16171
16201
|
args: [{ selector: 'app-recordinglist', template: `
|
|
@@ -16246,7 +16276,7 @@ class RecorderCombiPane extends ResponsiveComponent {
|
|
|
16246
16276
|
this.recordingListComp.selectTop();
|
|
16247
16277
|
}
|
|
16248
16278
|
}
|
|
16249
|
-
RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1$
|
|
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 });
|
|
16250
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: `
|
|
16251
16281
|
<div class="scrollList">
|
|
16252
16282
|
<app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
|
|
@@ -16275,7 +16305,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
16275
16305
|
[playStopAction]="playStopAction"></app-audiodisplay>
|
|
16276
16306
|
</div>
|
|
16277
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"] }]
|
|
16278
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
16308
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
|
|
16279
16309
|
type: ViewChild,
|
|
16280
16310
|
args: [RecordingList]
|
|
16281
16311
|
}], selectDisabled: [{
|
|
@@ -16302,11 +16332,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
16302
16332
|
}] } });
|
|
16303
16333
|
|
|
16304
16334
|
class AudioRecorder extends BasicRecorder {
|
|
16305
|
-
constructor(bpo, changeDetectorRef, renderer,
|
|
16335
|
+
constructor(bpo, changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
|
|
16306
16336
|
super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
|
|
16307
16337
|
this.bpo = bpo;
|
|
16308
16338
|
this.renderer = renderer;
|
|
16309
|
-
this.route = route;
|
|
16310
16339
|
this.recFileService = recFileService;
|
|
16311
16340
|
this.uploader = uploader;
|
|
16312
16341
|
this._project = null;
|
|
@@ -17214,7 +17243,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
17214
17243
|
}
|
|
17215
17244
|
}
|
|
17216
17245
|
}
|
|
17217
|
-
AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, deps: [{ token: i1$
|
|
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 });
|
|
17218
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: `
|
|
17219
17248
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
17220
17249
|
<app-warningbar [show]="isDefaultAudioTestSession()"
|
|
@@ -17335,7 +17364,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
17335
17364
|
</div>
|
|
17336
17365
|
</div>
|
|
17337
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"] }]
|
|
17338
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
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: [{
|
|
17339
17368
|
type: Inject,
|
|
17340
17369
|
args: [SPEECHRECORDER_CONFIG]
|
|
17341
17370
|
}] }]; }, propDecorators: { projectName: [{
|
|
@@ -17380,7 +17409,7 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
17380
17409
|
}
|
|
17381
17410
|
else {
|
|
17382
17411
|
// all this attempts to customize the message do not work anymore (for security reasons)!!
|
|
17383
|
-
|
|
17412
|
+
const message = "Please do not leave the page, until all recordings are uploaded!";
|
|
17384
17413
|
alert(message);
|
|
17385
17414
|
e = e || window.event;
|
|
17386
17415
|
if (e) {
|
|
@@ -17480,7 +17509,7 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
17480
17509
|
return this.dataSaved && !this.ar.isActive();
|
|
17481
17510
|
}
|
|
17482
17511
|
}
|
|
17483
|
-
AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorderComponent, deps: [{ token:
|
|
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 });
|
|
17484
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: `
|
|
17485
17514
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
17486
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"] }] });
|
|
@@ -17489,7 +17518,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
17489
17518
|
args: [{ selector: 'app-audiorecorder-comp', providers: [SessionService], template: `
|
|
17490
17519
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
17491
17520
|
`, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"] }]
|
|
17492
|
-
}], ctorParameters: function () { return [{ type:
|
|
17521
|
+
}], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i4$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: SpeechRecorderUploader }]; }, propDecorators: { ar: [{
|
|
17493
17522
|
type: ViewChild,
|
|
17494
17523
|
args: [AudioRecorder, { static: true }]
|
|
17495
17524
|
}] } });
|
|
@@ -17525,7 +17554,7 @@ class SpeechrecorderngModule {
|
|
|
17525
17554
|
}
|
|
17526
17555
|
SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17527
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,
|
|
17528
|
-
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [
|
|
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] });
|
|
17529
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] });
|
|
17530
17559
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
|
|
17531
17560
|
type: NgModule,
|
|
@@ -17538,7 +17567,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
17538
17567
|
}]
|
|
17539
17568
|
}] });
|
|
17540
17569
|
|
|
17541
|
-
const VERSION = '3.4.
|
|
17570
|
+
const VERSION = '3.4.5';
|
|
17542
17571
|
|
|
17543
17572
|
/*
|
|
17544
17573
|
* Public API Surface of speechrecorderng
|