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
|
}
|
|
@@ -947,7 +947,7 @@ class ArrayAudioBufferSourceNode extends AudioSourceNode {
|
|
|
947
947
|
}
|
|
948
948
|
};
|
|
949
949
|
}
|
|
950
|
-
fillBuffer(
|
|
950
|
+
fillBuffer() {
|
|
951
951
|
if (this._arrayAudioBuffer && this._audioInputStream && this._aisBufs) {
|
|
952
952
|
let filled = this.filledFrames;
|
|
953
953
|
let bufLen = 0;
|
|
@@ -1746,7 +1746,7 @@ const aswpStr = "\n" +
|
|
|
1746
1746
|
"\n" +
|
|
1747
1747
|
" let copied=0;\n" +
|
|
1748
1748
|
" do{\n" +
|
|
1749
|
-
" if(this.currentAudioBufferAvail
|
|
1749
|
+
" if(this.currentAudioBufferAvail===0){\n" +
|
|
1750
1750
|
" let nxtBuff=this.audioBuffers.shift();\n" +
|
|
1751
1751
|
" if(nxtBuff){\n" +
|
|
1752
1752
|
" this.currentAudioBuffer=nxtBuff;\n" +
|
|
@@ -3181,7 +3181,7 @@ class AudioCapture {
|
|
|
3181
3181
|
this.inddbAudioBuffer = null;
|
|
3182
3182
|
this.context = context;
|
|
3183
3183
|
this.n = navigator;
|
|
3184
|
-
this.context.addEventListener('statechange', (
|
|
3184
|
+
this.context.addEventListener('statechange', () => {
|
|
3185
3185
|
if (this.context.state !== 'running') {
|
|
3186
3186
|
this.close();
|
|
3187
3187
|
}
|
|
@@ -4533,7 +4533,7 @@ class Uploader {
|
|
|
4533
4533
|
si += v.size;
|
|
4534
4534
|
}
|
|
4535
4535
|
else if (typeof v === 'string') {
|
|
4536
|
-
// encode to
|
|
4536
|
+
// encode to UTF-8 to get upload size
|
|
4537
4537
|
si += this.te.encode().length;
|
|
4538
4538
|
}
|
|
4539
4539
|
});
|
|
@@ -4571,34 +4571,37 @@ class Uploader {
|
|
|
4571
4571
|
// pipe(timeout()) is not the same as xhr.timeout
|
|
4572
4572
|
let uploadedUpload = null;
|
|
4573
4573
|
//console.debug("Post upload: "+ul)
|
|
4574
|
-
this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe(
|
|
4575
|
-
|
|
4576
|
-
|
|
4577
|
-
|
|
4578
|
-
|
|
4579
|
-
|
|
4580
|
-
|
|
4581
|
-
|
|
4582
|
-
|
|
4583
|
-
// The backend returned an unsuccessful response code.
|
|
4584
|
-
// The response body may contain clues as to what went wrong,
|
|
4585
|
-
console.error(`Upload error: Server returned code ${err.status}`);
|
|
4586
|
-
}
|
|
4587
|
-
this.processError(ul);
|
|
4588
|
-
}, () => {
|
|
4589
|
-
//console.debug('Upload complete method called')
|
|
4590
|
-
if (uploadedUpload) {
|
|
4591
|
-
if (this.DEBUG_DELAY > 0) {
|
|
4592
|
-
window.setTimeout(() => {
|
|
4593
|
-
this.uploadDone(ul);
|
|
4594
|
-
}, this.DEBUG_DELAY);
|
|
4574
|
+
this.http.post(ul.url, ul.data, { withCredentials: this.withCredentials }).pipe(timeout(timeoVal)).subscribe({
|
|
4575
|
+
next: (data) => {
|
|
4576
|
+
uploadedUpload = ul;
|
|
4577
|
+
//console.debug('Next method called for upload: '+uploadedUpload)
|
|
4578
|
+
},
|
|
4579
|
+
error: (err) => {
|
|
4580
|
+
if (err.error instanceof Error) {
|
|
4581
|
+
// A client-side or network error occurred. Handle it accordingly.
|
|
4582
|
+
console.error('Upload error occurred:', err.error.message);
|
|
4595
4583
|
}
|
|
4596
4584
|
else {
|
|
4597
|
-
|
|
4585
|
+
// The backend returned an unsuccessful response code.
|
|
4586
|
+
// The response body may contain clues as to what went wrong,
|
|
4587
|
+
console.error(`Upload error: Server returned code ${err.status}`);
|
|
4588
|
+
}
|
|
4589
|
+
this.processError(ul);
|
|
4590
|
+
}, complete: () => {
|
|
4591
|
+
//console.debug('Upload complete method called')
|
|
4592
|
+
if (uploadedUpload) {
|
|
4593
|
+
if (this.DEBUG_DELAY > 0) {
|
|
4594
|
+
window.setTimeout(() => {
|
|
4595
|
+
this.uploadDone(ul);
|
|
4596
|
+
}, this.DEBUG_DELAY);
|
|
4597
|
+
}
|
|
4598
|
+
else {
|
|
4599
|
+
this.uploadDone(uploadedUpload);
|
|
4600
|
+
}
|
|
4601
|
+
}
|
|
4602
|
+
else {
|
|
4603
|
+
console.error('Upload post complete, but upload not set in next method!');
|
|
4598
4604
|
}
|
|
4599
|
-
}
|
|
4600
|
-
else {
|
|
4601
|
-
console.error('Upload post complete, but upload not set in next method!');
|
|
4602
4605
|
}
|
|
4603
4606
|
});
|
|
4604
4607
|
}
|
|
@@ -4613,7 +4616,7 @@ class Uploader {
|
|
|
4613
4616
|
// set retry timer
|
|
4614
4617
|
this.retryTimerId = window.setTimeout(() => {
|
|
4615
4618
|
this.retryTimerRunning = false;
|
|
4616
|
-
//console.debug("Upload retry timer
|
|
4619
|
+
//console.debug("Upload retry timer expired. Continue processing...")
|
|
4617
4620
|
this.process();
|
|
4618
4621
|
}, this.RETRY_DELAY);
|
|
4619
4622
|
this.retryTimerRunning = true;
|
|
@@ -4707,12 +4710,12 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
4707
4710
|
* Created by klausj on 17.06.2017.
|
|
4708
4711
|
*/
|
|
4709
4712
|
class ProjectService {
|
|
4710
|
-
constructor(http,
|
|
4713
|
+
constructor(http, platformLocation, config) {
|
|
4711
4714
|
this.http = http;
|
|
4712
|
-
this.
|
|
4715
|
+
this.platformLocation = platformLocation;
|
|
4713
4716
|
this.config = config;
|
|
4714
4717
|
this.withCredentials = false;
|
|
4715
|
-
console.log("Base Href: " +
|
|
4718
|
+
console.log("Base Href: " + platformLocation.getBaseHrefFromDOM());
|
|
4716
4719
|
let apiEndPoint = '';
|
|
4717
4720
|
if (config && config.apiEndPoint) {
|
|
4718
4721
|
apiEndPoint = config.apiEndPoint;
|
|
@@ -4797,14 +4800,17 @@ class SessionService {
|
|
|
4797
4800
|
let wrapObs = new Observable(subscriber => {
|
|
4798
4801
|
this._uploadCount++;
|
|
4799
4802
|
let obs = this.http.patch(sesssUrl, body, { withCredentials: this.withCredentials });
|
|
4800
|
-
obs.subscribe(
|
|
4801
|
-
|
|
4802
|
-
|
|
4803
|
-
|
|
4804
|
-
|
|
4805
|
-
|
|
4806
|
-
|
|
4807
|
-
|
|
4803
|
+
obs.subscribe({
|
|
4804
|
+
next: (value) => {
|
|
4805
|
+
subscriber.next(value);
|
|
4806
|
+
},
|
|
4807
|
+
error: error => {
|
|
4808
|
+
this._uploadCount--;
|
|
4809
|
+
subscriber.error(error);
|
|
4810
|
+
}, complete: () => {
|
|
4811
|
+
this._uploadCount--;
|
|
4812
|
+
subscriber.complete();
|
|
4813
|
+
}
|
|
4808
4814
|
});
|
|
4809
4815
|
});
|
|
4810
4816
|
return wrapObs;
|
|
@@ -7423,7 +7429,7 @@ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", v
|
|
|
7423
7429
|
<audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
|
|
7424
7430
|
<audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
|
|
7425
7431
|
</div>
|
|
7426
|
-
`, 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;
|
|
7432
|
+
`, 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" }] });
|
|
7427
7433
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioClipUIContainer, decorators: [{
|
|
7428
7434
|
type: Component,
|
|
7429
7435
|
args: [{ selector: 'app-audio', template: `
|
|
@@ -7433,7 +7439,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
7433
7439
|
<audio-signal [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-signal>
|
|
7434
7440
|
<audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
|
|
7435
7441
|
</div>
|
|
7436
|
-
`, 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;
|
|
7442
|
+
`, 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"] }]
|
|
7437
7443
|
}], ctorParameters: function () { return [{ type: i0.ElementRef }]; }, propDecorators: { canvasRef: [{
|
|
7438
7444
|
type: ViewChild,
|
|
7439
7445
|
args: ['divider', { static: true }]
|
|
@@ -7747,8 +7753,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
7747
7753
|
}] } });
|
|
7748
7754
|
|
|
7749
7755
|
class AudioDisplay {
|
|
7750
|
-
constructor(
|
|
7751
|
-
this.route = route;
|
|
7756
|
+
constructor(ref, eRef) {
|
|
7752
7757
|
this.ref = ref;
|
|
7753
7758
|
this.eRef = eRef;
|
|
7754
7759
|
this._audioClip = null;
|
|
@@ -7811,7 +7816,7 @@ class AudioDisplay {
|
|
|
7811
7816
|
this.status = 'ERROR';
|
|
7812
7817
|
}
|
|
7813
7818
|
}
|
|
7814
|
-
AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplay, deps: [{ token:
|
|
7819
|
+
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 });
|
|
7815
7820
|
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: `
|
|
7816
7821
|
|
|
7817
7822
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -7842,7 +7847,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
7842
7847
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
7843
7848
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
7844
7849
|
`, 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"] }]
|
|
7845
|
-
}], ctorParameters: function () { return [{ type:
|
|
7850
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
|
|
7846
7851
|
type: Input
|
|
7847
7852
|
}], playStopAction: [{
|
|
7848
7853
|
type: Input
|
|
@@ -7873,11 +7878,11 @@ class ResponsiveComponent {
|
|
|
7873
7878
|
});
|
|
7874
7879
|
}
|
|
7875
7880
|
}
|
|
7876
|
-
ResponsiveComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, deps: [{ token: i1$
|
|
7881
|
+
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 });
|
|
7877
7882
|
ResponsiveComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "14.2.12", type: ResponsiveComponent, ngImport: i0 });
|
|
7878
7883
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ResponsiveComponent, decorators: [{
|
|
7879
7884
|
type: Directive
|
|
7880
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
7885
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; } });
|
|
7881
7886
|
|
|
7882
7887
|
class ScrollIntoViewDirective {
|
|
7883
7888
|
constructor(elRef) {
|
|
@@ -8557,7 +8562,7 @@ class Prompting extends ResponsiveComponent {
|
|
|
8557
8562
|
this.onPrevItem.emit();
|
|
8558
8563
|
}
|
|
8559
8564
|
}
|
|
8560
|
-
Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: Prompting, deps: [{ token: i1$
|
|
8565
|
+
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 });
|
|
8561
8566
|
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: `
|
|
8562
8567
|
|
|
8563
8568
|
<app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
|
|
@@ -8606,7 +8611,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
8606
8611
|
|
|
8607
8612
|
|
|
8608
8613
|
`, 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"] }]
|
|
8609
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
8614
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { simpleTrafficLight: [{
|
|
8610
8615
|
type: ViewChild,
|
|
8611
8616
|
args: [SimpleTrafficLight, { static: true }]
|
|
8612
8617
|
}], audioDisplay: [{
|
|
@@ -8657,7 +8662,7 @@ class SessionFinishedDialog {
|
|
|
8657
8662
|
this.dialogRef.close();
|
|
8658
8663
|
}
|
|
8659
8664
|
}
|
|
8660
|
-
SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1$
|
|
8665
|
+
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 });
|
|
8661
8666
|
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>
|
|
8662
8667
|
<div mat-dialog-content>
|
|
8663
8668
|
|
|
@@ -8667,7 +8672,7 @@ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0",
|
|
|
8667
8672
|
<div mat-dialog-actions>
|
|
8668
8673
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
8669
8674
|
</div>
|
|
8670
|
-
`, 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$
|
|
8675
|
+
`, 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"] }] });
|
|
8671
8676
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionFinishedDialog, decorators: [{
|
|
8672
8677
|
type: Component,
|
|
8673
8678
|
args: [{
|
|
@@ -8684,7 +8689,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
8684
8689
|
`
|
|
8685
8690
|
}]
|
|
8686
8691
|
}], ctorParameters: function () {
|
|
8687
|
-
return [{ type: i1$
|
|
8692
|
+
return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
|
|
8688
8693
|
type: Inject,
|
|
8689
8694
|
args: [MAT_DIALOG_DATA]
|
|
8690
8695
|
}] }];
|
|
@@ -8699,7 +8704,7 @@ class MessageDialog {
|
|
|
8699
8704
|
this.dialogRef.close();
|
|
8700
8705
|
}
|
|
8701
8706
|
}
|
|
8702
|
-
MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, deps: [{ token: i1$
|
|
8707
|
+
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 });
|
|
8703
8708
|
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>
|
|
8704
8709
|
<mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
|
|
8705
8710
|
<div mat-dialog-content>
|
|
@@ -8711,7 +8716,7 @@ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
8711
8716
|
<div mat-dialog-actions>
|
|
8712
8717
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
8713
8718
|
</div>
|
|
8714
|
-
`, 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$
|
|
8719
|
+
`, 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"] }] });
|
|
8715
8720
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: MessageDialog, decorators: [{
|
|
8716
8721
|
type: Component,
|
|
8717
8722
|
args: [{
|
|
@@ -8730,7 +8735,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
8730
8735
|
`
|
|
8731
8736
|
}]
|
|
8732
8737
|
}], ctorParameters: function () {
|
|
8733
|
-
return [{ type: i1$
|
|
8738
|
+
return [{ type: i1$3.MatDialogRef }, { type: undefined, decorators: [{
|
|
8734
8739
|
type: Inject,
|
|
8735
8740
|
args: [MAT_DIALOG_DATA]
|
|
8736
8741
|
}] }];
|
|
@@ -9033,62 +9038,64 @@ let BasicRecordingService = class BasicRecordingService {
|
|
|
9033
9038
|
ausps.set('requestUUID', UUID.generate());
|
|
9034
9039
|
}
|
|
9035
9040
|
let obs = new Observable(observer => {
|
|
9036
|
-
this.audioRequestByURL(baseAudioUrl, ausps).subscribe(
|
|
9037
|
-
|
|
9038
|
-
|
|
9039
|
-
|
|
9040
|
-
|
|
9041
|
-
|
|
9042
|
-
|
|
9043
|
-
|
|
9044
|
-
|
|
9045
|
-
|
|
9046
|
-
|
|
9047
|
-
|
|
9048
|
-
|
|
9049
|
-
|
|
9050
|
-
|
|
9051
|
-
|
|
9052
|
-
|
|
9053
|
-
|
|
9054
|
-
|
|
9055
|
-
|
|
9056
|
-
|
|
9057
|
-
|
|
9058
|
-
|
|
9059
|
-
|
|
9060
|
-
|
|
9061
|
-
|
|
9062
|
-
|
|
9063
|
-
|
|
9064
|
-
|
|
9065
|
-
|
|
9066
|
-
|
|
9067
|
-
|
|
9068
|
-
|
|
9069
|
-
|
|
9070
|
-
|
|
9071
|
-
|
|
9072
|
-
|
|
9073
|
-
|
|
9041
|
+
this.audioRequestByURL(baseAudioUrl, ausps).subscribe({
|
|
9042
|
+
next: resp => {
|
|
9043
|
+
// Do not use Promise version, which does not work with Safari 13 (13.0.5)
|
|
9044
|
+
if (resp.body) {
|
|
9045
|
+
//console.debug("chunkAudioRequest: observer.closed: "+observer.closed);
|
|
9046
|
+
//console.debug("Audio file bytes: "+resp.body.byteLength);
|
|
9047
|
+
// Check original audio format
|
|
9048
|
+
let wr = new WavReader(resp.body);
|
|
9049
|
+
const pcmFmt = wr.readFormat();
|
|
9050
|
+
const orgFl = wr.frameLength();
|
|
9051
|
+
// if(pcmFmt){
|
|
9052
|
+
// console.debug("Original WAVE format of download chunk: "+pcmFmt);
|
|
9053
|
+
// }else{
|
|
9054
|
+
// console.error("Could not read WAVE format of original download chunk!");
|
|
9055
|
+
// }
|
|
9056
|
+
// if(orgFl){
|
|
9057
|
+
// console.debug("Original frame length of download chunk: "+orgFl);
|
|
9058
|
+
// }else{
|
|
9059
|
+
// console.error("Could not read WAVE format of original download chunk!");
|
|
9060
|
+
// }
|
|
9061
|
+
if (pcmFmt && orgFl) {
|
|
9062
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
9063
|
+
//console.debug("Decoded audio chunk frames: "+ab.length);
|
|
9064
|
+
let chDl = new ChunkDownload(pcmFmt, orgFl, ab);
|
|
9065
|
+
observer.next(chDl);
|
|
9066
|
+
observer.complete();
|
|
9067
|
+
}, error => {
|
|
9068
|
+
//if(error instanceof HttpErrorResponse) {
|
|
9069
|
+
// if (error.status == 404) {
|
|
9070
|
+
// // Interpret not as an error, the file ist not recorded yet
|
|
9071
|
+
// observer.next(null);
|
|
9072
|
+
// observer.complete()
|
|
9073
|
+
// } else {
|
|
9074
|
+
// // all other states are errors
|
|
9075
|
+
console.error("Recordings service chunkAudioRequest error decoding audio data: " + error.name + ": " + error.message);
|
|
9076
|
+
observer.error(error);
|
|
9077
|
+
// }
|
|
9078
|
+
// }
|
|
9079
|
+
});
|
|
9080
|
+
}
|
|
9081
|
+
else {
|
|
9082
|
+
const errMsg = 'Could not parse audio header for format and/or frame length of download.';
|
|
9083
|
+
console.error(errMsg);
|
|
9084
|
+
observer.error(errMsg);
|
|
9085
|
+
}
|
|
9074
9086
|
}
|
|
9075
9087
|
else {
|
|
9076
|
-
const errMsg = '
|
|
9088
|
+
const errMsg = 'Fetching audio file: response has no body';
|
|
9077
9089
|
console.error(errMsg);
|
|
9078
9090
|
observer.error(errMsg);
|
|
9079
9091
|
}
|
|
9092
|
+
}, error: (error) => {
|
|
9093
|
+
// all other states are errors
|
|
9094
|
+
//const errMsg='Fetching audio file HTTP error: '+error;
|
|
9095
|
+
//console.error(errMsg);
|
|
9096
|
+
observer.error(error);
|
|
9097
|
+
//observer.complete();
|
|
9080
9098
|
}
|
|
9081
|
-
else {
|
|
9082
|
-
const errMsg = 'Fetching audio file: response has no body';
|
|
9083
|
-
console.error(errMsg);
|
|
9084
|
-
observer.error(errMsg);
|
|
9085
|
-
}
|
|
9086
|
-
}, (error) => {
|
|
9087
|
-
// all other states are errors
|
|
9088
|
-
//const errMsg='Fetching audio file HTTP error: '+error;
|
|
9089
|
-
//console.error(errMsg);
|
|
9090
|
-
observer.error(error);
|
|
9091
|
-
//observer.complete();
|
|
9092
9099
|
});
|
|
9093
9100
|
});
|
|
9094
9101
|
return obs;
|
|
@@ -9658,36 +9665,38 @@ class RecordingService extends BasicRecordingService {
|
|
|
9658
9665
|
}
|
|
9659
9666
|
if (recordingFile.session && recFileId) {
|
|
9660
9667
|
let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
|
|
9661
|
-
obs.subscribe(
|
|
9662
|
-
|
|
9663
|
-
|
|
9664
|
-
|
|
9665
|
-
|
|
9666
|
-
|
|
9667
|
-
|
|
9668
|
-
|
|
9669
|
-
|
|
9670
|
-
|
|
9671
|
-
|
|
9672
|
-
|
|
9673
|
-
|
|
9674
|
-
|
|
9675
|
-
|
|
9676
|
-
|
|
9677
|
-
if (err
|
|
9678
|
-
|
|
9679
|
-
|
|
9680
|
-
|
|
9668
|
+
obs.subscribe({
|
|
9669
|
+
next: resp => {
|
|
9670
|
+
// Do not use Promise version, which does not work with Safari 13 (13.0.5)
|
|
9671
|
+
if (resp.body) {
|
|
9672
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
9673
|
+
observer.next(ab);
|
|
9674
|
+
observer.complete();
|
|
9675
|
+
}, error => {
|
|
9676
|
+
observer.error(error);
|
|
9677
|
+
observer.complete();
|
|
9678
|
+
});
|
|
9679
|
+
}
|
|
9680
|
+
else {
|
|
9681
|
+
observer.error('Fetching audio file: response has no body');
|
|
9682
|
+
}
|
|
9683
|
+
}, error: (err) => {
|
|
9684
|
+
if (err instanceof HttpErrorResponse) {
|
|
9685
|
+
if (err.status == 404) {
|
|
9686
|
+
// Interpret not as an error, the file ist not recorded yet
|
|
9687
|
+
observer.next(null);
|
|
9688
|
+
observer.complete();
|
|
9689
|
+
}
|
|
9690
|
+
else {
|
|
9691
|
+
// all other states are errors
|
|
9692
|
+
observer.error(err);
|
|
9693
|
+
observer.complete();
|
|
9694
|
+
}
|
|
9681
9695
|
}
|
|
9682
9696
|
else {
|
|
9683
|
-
// all other states are errors
|
|
9684
9697
|
observer.error(err);
|
|
9685
|
-
observer.complete();
|
|
9686
9698
|
}
|
|
9687
9699
|
}
|
|
9688
|
-
else {
|
|
9689
|
-
observer.error(err);
|
|
9690
|
-
}
|
|
9691
9700
|
});
|
|
9692
9701
|
}
|
|
9693
9702
|
else {
|
|
@@ -9704,49 +9713,50 @@ class RecordingService extends BasicRecordingService {
|
|
|
9704
9713
|
}
|
|
9705
9714
|
if (recordingFile.session && recFileId) {
|
|
9706
9715
|
let obs = this.fetchAudiofile(projectName, recordingFile.session, recFileId);
|
|
9707
|
-
obs.subscribe(resp => {
|
|
9708
|
-
|
|
9709
|
-
|
|
9710
|
-
|
|
9711
|
-
|
|
9712
|
-
|
|
9713
|
-
|
|
9714
|
-
|
|
9715
|
-
|
|
9716
|
-
|
|
9716
|
+
obs.subscribe({ next: resp => {
|
|
9717
|
+
//console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
|
|
9718
|
+
// Do not use Promise version, which does not work with Safari 13 (13.0.5)
|
|
9719
|
+
if (resp.body) {
|
|
9720
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
9721
|
+
let abs = new AudioBufferSource(ab);
|
|
9722
|
+
let adh = new AudioDataHolder(abs);
|
|
9723
|
+
RecordingFileUtils.setAudioData(recordingFile, adh);
|
|
9724
|
+
if (this.debugDelay > 0) {
|
|
9725
|
+
window.setTimeout(() => {
|
|
9726
|
+
observer.next(recordingFile);
|
|
9727
|
+
observer.complete();
|
|
9728
|
+
}, this.debugDelay);
|
|
9729
|
+
}
|
|
9730
|
+
else {
|
|
9717
9731
|
observer.next(recordingFile);
|
|
9718
9732
|
observer.complete();
|
|
9719
|
-
}
|
|
9733
|
+
}
|
|
9734
|
+
}, error => {
|
|
9735
|
+
observer.error(error);
|
|
9736
|
+
observer.complete();
|
|
9737
|
+
});
|
|
9738
|
+
}
|
|
9739
|
+
else {
|
|
9740
|
+
observer.error('Fetching audio file: response has no body');
|
|
9741
|
+
}
|
|
9742
|
+
},
|
|
9743
|
+
error: (err) => {
|
|
9744
|
+
if (err instanceof HttpErrorResponse) {
|
|
9745
|
+
if (err.status == 404) {
|
|
9746
|
+
// Interpret not as an error, the file ist not recorded yet
|
|
9747
|
+
observer.next(null);
|
|
9748
|
+
observer.complete();
|
|
9720
9749
|
}
|
|
9721
9750
|
else {
|
|
9722
|
-
|
|
9751
|
+
// all other states are errors
|
|
9752
|
+
observer.error(err);
|
|
9723
9753
|
observer.complete();
|
|
9724
9754
|
}
|
|
9725
|
-
}, error => {
|
|
9726
|
-
observer.error(error);
|
|
9727
|
-
observer.complete();
|
|
9728
|
-
});
|
|
9729
|
-
}
|
|
9730
|
-
else {
|
|
9731
|
-
observer.error('Fetching audio file: response has no body');
|
|
9732
|
-
}
|
|
9733
|
-
}, (err) => {
|
|
9734
|
-
if (err instanceof HttpErrorResponse) {
|
|
9735
|
-
if (err.status == 404) {
|
|
9736
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
9737
|
-
observer.next(null);
|
|
9738
|
-
observer.complete();
|
|
9739
9755
|
}
|
|
9740
9756
|
else {
|
|
9741
|
-
// all other states are errors
|
|
9742
9757
|
observer.error(err);
|
|
9743
|
-
observer.complete();
|
|
9744
9758
|
}
|
|
9745
|
-
}
|
|
9746
|
-
else {
|
|
9747
|
-
observer.error(err);
|
|
9748
|
-
}
|
|
9749
|
-
});
|
|
9759
|
+
} });
|
|
9750
9760
|
}
|
|
9751
9761
|
else {
|
|
9752
9762
|
observer.error();
|
|
@@ -10068,83 +10078,88 @@ class RecordingService extends BasicRecordingService {
|
|
|
10068
10078
|
let wobs = new Observable(observer => {
|
|
10069
10079
|
if (recordingFile.session) {
|
|
10070
10080
|
let obs = this.fetchSprAudiofile(projectName, recordingFile.session, recordingFile.itemCode, recordingFile.version);
|
|
10071
|
-
obs.subscribe(
|
|
10072
|
-
|
|
10073
|
-
|
|
10081
|
+
obs.subscribe({
|
|
10082
|
+
next: resp => {
|
|
10083
|
+
//console.log("Fetched audio file. HTTP response status: "+resp.status+", type: "+resp.type+", byte length: "+ resp.body.byteLength);
|
|
10084
|
+
// Do not use Promise version, which does not work with Safari 13 (13.0.5)
|
|
10085
|
+
if (resp.body) {
|
|
10086
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
10087
|
+
let abs = new AudioBufferSource(ab);
|
|
10088
|
+
RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(abs));
|
|
10089
|
+
if (this.debugDelay > 0) {
|
|
10090
|
+
window.setTimeout(() => {
|
|
10091
|
+
observer.next(recordingFile);
|
|
10092
|
+
observer.complete();
|
|
10093
|
+
}, this.debugDelay);
|
|
10094
|
+
}
|
|
10095
|
+
else {
|
|
10096
|
+
observer.next(recordingFile);
|
|
10097
|
+
observer.complete();
|
|
10098
|
+
}
|
|
10099
|
+
}, error => {
|
|
10100
|
+
observer.error(error);
|
|
10101
|
+
observer.complete();
|
|
10102
|
+
});
|
|
10103
|
+
}
|
|
10104
|
+
else {
|
|
10105
|
+
observer.error('Fetching audio file: response has no body');
|
|
10106
|
+
}
|
|
10107
|
+
},
|
|
10108
|
+
error: (err) => {
|
|
10109
|
+
if (err instanceof HttpErrorResponse && err.status == 404) {
|
|
10110
|
+
// Interpret not as an error, the file ist not recorded yet
|
|
10111
|
+
observer.next(null);
|
|
10112
|
+
observer.complete();
|
|
10113
|
+
}
|
|
10114
|
+
else {
|
|
10115
|
+
// all other states are errors
|
|
10116
|
+
observer.error(err);
|
|
10117
|
+
}
|
|
10118
|
+
}
|
|
10119
|
+
});
|
|
10120
|
+
}
|
|
10121
|
+
else {
|
|
10122
|
+
observer.error();
|
|
10123
|
+
}
|
|
10124
|
+
});
|
|
10125
|
+
return wobs;
|
|
10126
|
+
}
|
|
10127
|
+
fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
|
|
10128
|
+
let wobs = new Observable(observer => {
|
|
10129
|
+
let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
|
|
10130
|
+
obs.subscribe({ next: resp => {
|
|
10131
|
+
// Do not use Promise version, which does not work with Safari 13
|
|
10074
10132
|
if (resp.body) {
|
|
10075
10133
|
aCtx.decodeAudioData(resp.body, ab => {
|
|
10076
10134
|
let abs = new AudioBufferSource(ab);
|
|
10077
|
-
|
|
10135
|
+
let adh = new AudioDataHolder(abs);
|
|
10136
|
+
let rf = new SprRecordingFile(sessId, itemcode, version, adh);
|
|
10078
10137
|
if (this.debugDelay > 0) {
|
|
10079
10138
|
window.setTimeout(() => {
|
|
10080
|
-
observer.next(
|
|
10139
|
+
observer.next(rf);
|
|
10081
10140
|
observer.complete();
|
|
10082
10141
|
}, this.debugDelay);
|
|
10083
10142
|
}
|
|
10084
10143
|
else {
|
|
10085
|
-
observer.next(
|
|
10144
|
+
observer.next(rf);
|
|
10086
10145
|
observer.complete();
|
|
10087
10146
|
}
|
|
10088
|
-
}, error => {
|
|
10089
|
-
observer.error(error);
|
|
10090
|
-
observer.complete();
|
|
10091
10147
|
});
|
|
10092
10148
|
}
|
|
10093
10149
|
else {
|
|
10094
|
-
observer.error(
|
|
10150
|
+
observer.error();
|
|
10095
10151
|
}
|
|
10096
|
-
},
|
|
10152
|
+
},
|
|
10153
|
+
error: (err) => {
|
|
10097
10154
|
if (err instanceof HttpErrorResponse && err.status == 404) {
|
|
10098
10155
|
// Interpret not as an error, the file ist not recorded yet
|
|
10099
10156
|
observer.next(null);
|
|
10100
10157
|
observer.complete();
|
|
10101
10158
|
}
|
|
10102
10159
|
else {
|
|
10103
|
-
// all other
|
|
10160
|
+
// all other errors are real errors
|
|
10104
10161
|
observer.error(err);
|
|
10105
10162
|
}
|
|
10106
|
-
});
|
|
10107
|
-
}
|
|
10108
|
-
else {
|
|
10109
|
-
observer.error();
|
|
10110
|
-
}
|
|
10111
|
-
});
|
|
10112
|
-
return wobs;
|
|
10113
|
-
}
|
|
10114
|
-
fetchRecordingFile(aCtx, projectName, sessId, itemcode, version) {
|
|
10115
|
-
let wobs = new Observable(observer => {
|
|
10116
|
-
let obs = this.fetchSprAudiofile(projectName, sessId, itemcode, version);
|
|
10117
|
-
obs.subscribe(resp => {
|
|
10118
|
-
// Do not use Promise version, which does not work with Safari 13
|
|
10119
|
-
if (resp.body) {
|
|
10120
|
-
aCtx.decodeAudioData(resp.body, ab => {
|
|
10121
|
-
let abs = new AudioBufferSource(ab);
|
|
10122
|
-
let adh = new AudioDataHolder(abs);
|
|
10123
|
-
let rf = new SprRecordingFile(sessId, itemcode, version, adh);
|
|
10124
|
-
if (this.debugDelay > 0) {
|
|
10125
|
-
window.setTimeout(() => {
|
|
10126
|
-
observer.next(rf);
|
|
10127
|
-
observer.complete();
|
|
10128
|
-
}, this.debugDelay);
|
|
10129
|
-
}
|
|
10130
|
-
else {
|
|
10131
|
-
observer.next(rf);
|
|
10132
|
-
observer.complete();
|
|
10133
|
-
}
|
|
10134
|
-
});
|
|
10135
|
-
}
|
|
10136
|
-
else {
|
|
10137
|
-
observer.error();
|
|
10138
|
-
}
|
|
10139
|
-
}, (err) => {
|
|
10140
|
-
if (err instanceof HttpErrorResponse && err.status == 404) {
|
|
10141
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
10142
|
-
observer.next(null);
|
|
10143
|
-
observer.complete();
|
|
10144
|
-
}
|
|
10145
|
-
else {
|
|
10146
|
-
// all other errors are real errors
|
|
10147
|
-
observer.error(err);
|
|
10148
10163
|
}
|
|
10149
10164
|
});
|
|
10150
10165
|
});
|
|
@@ -10605,7 +10620,7 @@ class UploadStatus {
|
|
|
10605
10620
|
constructor() {
|
|
10606
10621
|
this._awaitNewUpload = false;
|
|
10607
10622
|
this.spinnerMode = 'determinate';
|
|
10608
|
-
this.
|
|
10623
|
+
this.colorStatus = 'primary';
|
|
10609
10624
|
this._value = 100;
|
|
10610
10625
|
this.displayValue = null;
|
|
10611
10626
|
this.toolTipText = '';
|
|
@@ -10644,13 +10659,13 @@ class UploadStatus {
|
|
|
10644
10659
|
set status(status) {
|
|
10645
10660
|
this._status = status;
|
|
10646
10661
|
if ('accent' === status) {
|
|
10647
|
-
this.
|
|
10662
|
+
this.colorStatus = 'accent';
|
|
10648
10663
|
}
|
|
10649
10664
|
else if ('warn' === status) {
|
|
10650
|
-
this.
|
|
10665
|
+
this.colorStatus = 'warn';
|
|
10651
10666
|
}
|
|
10652
10667
|
else {
|
|
10653
|
-
this.
|
|
10668
|
+
this.colorStatus = 'primary';
|
|
10654
10669
|
}
|
|
10655
10670
|
this._updateSpinner();
|
|
10656
10671
|
}
|
|
@@ -10660,12 +10675,14 @@ class UploadStatus {
|
|
|
10660
10675
|
}
|
|
10661
10676
|
UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10662
10677
|
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: `
|
|
10663
|
-
<mat-progress-spinner [mode]="spinnerMode" [color]="
|
|
10678
|
+
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
10679
|
+
[matTooltip]="toolTipText"></mat-progress-spinner>
|
|
10664
10680
|
`, 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"] }] });
|
|
10665
10681
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: UploadStatus, decorators: [{
|
|
10666
10682
|
type: Component,
|
|
10667
10683
|
args: [{ selector: 'app-uploadstatus', template: `
|
|
10668
|
-
<mat-progress-spinner [mode]="spinnerMode" [color]="
|
|
10684
|
+
<mat-progress-spinner [mode]="spinnerMode" [color]="colorStatus" [diameter]="30" [strokeWidth]="5" [value]="_value"
|
|
10685
|
+
[matTooltip]="toolTipText"></mat-progress-spinner>
|
|
10669
10686
|
`, styles: [":host{text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"] }]
|
|
10670
10687
|
}], propDecorators: { value: [{
|
|
10671
10688
|
type: Input
|
|
@@ -10774,7 +10791,7 @@ class TransportPanel extends ResponsiveComponent {
|
|
|
10774
10791
|
}
|
|
10775
10792
|
}
|
|
10776
10793
|
}
|
|
10777
|
-
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: TransportPanel, deps: [{ token: i1$
|
|
10794
|
+
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 });
|
|
10778
10795
|
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: `
|
|
10779
10796
|
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
10780
10797
|
mat-raised-button>
|
|
@@ -10819,7 +10836,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
10819
10836
|
</button>
|
|
10820
10837
|
|
|
10821
10838
|
`, 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"] }]
|
|
10822
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
10839
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { readonly: [{
|
|
10823
10840
|
type: Input
|
|
10824
10841
|
}], actions: [{
|
|
10825
10842
|
type: Input
|
|
@@ -10891,7 +10908,7 @@ class ControlPanel extends ResponsiveComponent {
|
|
|
10891
10908
|
return this._ready;
|
|
10892
10909
|
}
|
|
10893
10910
|
}
|
|
10894
|
-
ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: ControlPanel, deps: [{ token: i1$
|
|
10911
|
+
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 });
|
|
10895
10912
|
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: `
|
|
10896
10913
|
<div *ngIf="!screenXs" style="flex-direction: row" >
|
|
10897
10914
|
<app-sprstatusdisplay style="flex:0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
@@ -10901,9 +10918,9 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
10901
10918
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
10902
10919
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
10903
10920
|
</div>
|
|
10904
|
-
<div *ngIf="screenXs"style="flex-direction: column" >
|
|
10921
|
+
<div *ngIf="screenXs" style="flex-direction: column" >
|
|
10905
10922
|
<div style="flex-direction: row" class="flexFill" >
|
|
10906
|
-
<app-sprstatusdisplay style="flex:10 0 0
|
|
10923
|
+
<app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
10907
10924
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
10908
10925
|
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
10909
10926
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
@@ -10924,9 +10941,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
10924
10941
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
10925
10942
|
<app-readystateindicator [ready]="_ready"></app-readystateindicator>
|
|
10926
10943
|
</div>
|
|
10927
|
-
<div *ngIf="screenXs"style="flex-direction: column" >
|
|
10944
|
+
<div *ngIf="screenXs" style="flex-direction: column" >
|
|
10928
10945
|
<div style="flex-direction: row" class="flexFill" >
|
|
10929
|
-
<app-sprstatusdisplay style="flex:10 0 0
|
|
10946
|
+
<app-sprstatusdisplay style="flex:10 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
10930
10947
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
10931
10948
|
<app-uploadstatus style="flex:0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
10932
10949
|
[status]="uploadStatus" [awaitNewUpload]="processing"></app-uploadstatus>
|
|
@@ -10936,7 +10953,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
10936
10953
|
|
|
10937
10954
|
</div>
|
|
10938
10955
|
`, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"] }]
|
|
10939
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
10956
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i1$3.MatDialog }]; }, propDecorators: { statusDisplay: [{
|
|
10940
10957
|
type: ViewChild,
|
|
10941
10958
|
args: [StatusDisplay, { static: true }]
|
|
10942
10959
|
}], transportPanel: [{
|
|
@@ -11591,7 +11608,7 @@ class RecordingItemControls extends ResponsiveComponent {
|
|
|
11591
11608
|
// this.status = 'ERROR';
|
|
11592
11609
|
}
|
|
11593
11610
|
}
|
|
11594
|
-
RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemControls, deps: [{ token: i1$
|
|
11611
|
+
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 });
|
|
11595
11612
|
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: `
|
|
11596
11613
|
<button matTooltip="Start playback" (click)="playStartAction?.perform()"
|
|
11597
11614
|
[disabled]="playStartAction?.disabled"
|
|
@@ -11640,7 +11657,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
11640
11657
|
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
11641
11658
|
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
11642
11659
|
`, 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"] }]
|
|
11643
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
11660
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { audioSignalCollapsed: [{
|
|
11644
11661
|
type: Input
|
|
11645
11662
|
}], enableDownload: [{
|
|
11646
11663
|
type: Input
|
|
@@ -11721,7 +11738,7 @@ class RecordingItemDisplay extends ResponsiveComponent {
|
|
|
11721
11738
|
let peakDBVal = levelInfo.powerLevelDB();
|
|
11722
11739
|
if (this.peakDbLvl < peakDBVal) {
|
|
11723
11740
|
this.peakDbLvl = peakDBVal;
|
|
11724
|
-
// the event comes from outside
|
|
11741
|
+
// the event comes from outside an Angular zone
|
|
11725
11742
|
this.changeDetectorRef.detectChanges();
|
|
11726
11743
|
}
|
|
11727
11744
|
this.liveLevel.update(levelInfo);
|
|
@@ -11737,7 +11754,7 @@ class RecordingItemDisplay extends ResponsiveComponent {
|
|
|
11737
11754
|
this.changeDetectorRef.detectChanges();
|
|
11738
11755
|
}
|
|
11739
11756
|
}
|
|
11740
|
-
RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i1$
|
|
11757
|
+
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 });
|
|
11741
11758
|
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: `
|
|
11742
11759
|
<div [class]="{audioStatusDisplay:!screenXs,audioStatusDisplayXs:screenXs}">
|
|
11743
11760
|
<audio-levelbar style="flex:1 0 1%" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
|
|
@@ -11752,7 +11769,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
11752
11769
|
<spr-recordingitemcontrols style="flex:0 0 0px" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
|
|
11753
11770
|
</div>
|
|
11754
11771
|
`, 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"] }]
|
|
11755
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
11772
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }, { type: i0.ElementRef }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { liveLevel: [{
|
|
11756
11773
|
type: ViewChild,
|
|
11757
11774
|
args: [LevelBar, { static: true }]
|
|
11758
11775
|
}], streamingMode: [{
|
|
@@ -14011,7 +14028,7 @@ class SessionManager extends BasicRecorder {
|
|
|
14011
14028
|
}
|
|
14012
14029
|
}
|
|
14013
14030
|
}
|
|
14014
|
-
SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SessionManager, deps: [{ token: i1$
|
|
14031
|
+
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 });
|
|
14015
14032
|
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: `
|
|
14016
14033
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
14017
14034
|
<app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
@@ -14115,7 +14132,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
14115
14132
|
</div>
|
|
14116
14133
|
`, 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"] }]
|
|
14117
14134
|
}], ctorParameters: function () {
|
|
14118
|
-
return [{ type: i1$
|
|
14135
|
+
return [{ type: i1$2.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$3.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
|
|
14119
14136
|
type: Inject,
|
|
14120
14137
|
args: [SPEECHRECORDER_CONFIG]
|
|
14121
14138
|
}] }];
|
|
@@ -14564,7 +14581,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
14564
14581
|
}
|
|
14565
14582
|
else {
|
|
14566
14583
|
// all this attempts to customize the message do not work anymore (for security reasons)!!
|
|
14567
|
-
|
|
14584
|
+
const message = "Please do not leave the page, until all recordings are uploaded!";
|
|
14568
14585
|
alert(message);
|
|
14569
14586
|
e = e || window.event;
|
|
14570
14587
|
if (e) {
|
|
@@ -14688,7 +14705,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
14688
14705
|
projUrl = window.location.protocol + '//' + window.location.hostname + ':' + window.location.port + '/wikispeech/rest/projects/?sessionId=' + this.sessionId;
|
|
14689
14706
|
}
|
|
14690
14707
|
if (projUrl) {
|
|
14691
|
-
|
|
14708
|
+
const pLoader = new XMLHttpRequest();
|
|
14692
14709
|
pLoader.open("GET", projUrl, true);
|
|
14693
14710
|
pLoader.setRequestHeader('Accept', 'application/json');
|
|
14694
14711
|
pLoader.responseType = "json";
|
|
@@ -14723,7 +14740,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
14723
14740
|
this.sm.statusMsg = 'ERROR: Recording.';
|
|
14724
14741
|
}
|
|
14725
14742
|
}
|
|
14726
|
-
SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token:
|
|
14743
|
+
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 });
|
|
14727
14744
|
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: `
|
|
14728
14745
|
<app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
|
|
14729
14746
|
`, 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"] }] });
|
|
@@ -14732,7 +14749,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
14732
14749
|
args: [{ selector: 'app-speechrecorder', providers: [SessionService], template: `
|
|
14733
14750
|
<app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
|
|
14734
14751
|
`, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"] }]
|
|
14735
|
-
}], ctorParameters: function () { return [{ type:
|
|
14752
|
+
}], 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: [{
|
|
14736
14753
|
type: ViewChild,
|
|
14737
14754
|
args: [SessionManager, { static: true }]
|
|
14738
14755
|
}] } });
|
|
@@ -14938,7 +14955,7 @@ class AudioDisplayPlayer {
|
|
|
14938
14955
|
this.status = 'ERROR';
|
|
14939
14956
|
}
|
|
14940
14957
|
}
|
|
14941
|
-
AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token:
|
|
14958
|
+
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 });
|
|
14942
14959
|
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: `
|
|
14943
14960
|
|
|
14944
14961
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -14969,7 +14986,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
14969
14986
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
14970
14987
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
|
|
14971
14988
|
`, 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"] }]
|
|
14972
|
-
}], ctorParameters: function () { return [{ type:
|
|
14989
|
+
}], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i0.ChangeDetectorRef }, { type: i0.ElementRef }]; }, propDecorators: { playStartAction: [{
|
|
14973
14990
|
type: Input
|
|
14974
14991
|
}], playStopAction: [{
|
|
14975
14992
|
type: Input
|
|
@@ -15119,37 +15136,39 @@ class RecordingFileService extends BasicRecordingService {
|
|
|
15119
15136
|
let wobs = new Observable(observer => {
|
|
15120
15137
|
if (recordingFile.recordingFileId) {
|
|
15121
15138
|
let obs = this.fetchAudiofile(recordingFile.recordingFileId);
|
|
15122
|
-
obs.subscribe(resp => {
|
|
15123
|
-
|
|
15124
|
-
|
|
15125
|
-
|
|
15126
|
-
|
|
15127
|
-
|
|
15128
|
-
|
|
15129
|
-
|
|
15139
|
+
obs.subscribe({ next: resp => {
|
|
15140
|
+
// Do not use Promise version, which does not work with Safari 13
|
|
15141
|
+
if (resp.body) {
|
|
15142
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
15143
|
+
let as = new AudioBufferSource(ab);
|
|
15144
|
+
RecordingFileUtils.setAudioData(recordingFile, new AudioDataHolder(as));
|
|
15145
|
+
if (this.debugDelay > 0) {
|
|
15146
|
+
window.setTimeout(() => {
|
|
15147
|
+
observer.next(recordingFile);
|
|
15148
|
+
observer.complete();
|
|
15149
|
+
}, this.debugDelay);
|
|
15150
|
+
}
|
|
15151
|
+
else {
|
|
15130
15152
|
observer.next(recordingFile);
|
|
15131
15153
|
observer.complete();
|
|
15132
|
-
}
|
|
15133
|
-
}
|
|
15134
|
-
|
|
15135
|
-
|
|
15136
|
-
|
|
15137
|
-
|
|
15138
|
-
|
|
15139
|
-
|
|
15140
|
-
|
|
15141
|
-
|
|
15142
|
-
|
|
15143
|
-
|
|
15144
|
-
|
|
15145
|
-
|
|
15146
|
-
|
|
15147
|
-
|
|
15148
|
-
|
|
15149
|
-
|
|
15150
|
-
// all other states are errors
|
|
15151
|
-
observer.error(error);
|
|
15152
|
-
observer.complete();
|
|
15154
|
+
}
|
|
15155
|
+
});
|
|
15156
|
+
}
|
|
15157
|
+
else {
|
|
15158
|
+
observer.error('Received no audio data!');
|
|
15159
|
+
}
|
|
15160
|
+
},
|
|
15161
|
+
error: (error) => {
|
|
15162
|
+
if (error.status == 404) {
|
|
15163
|
+
// Interpret not as an error, the file ist not recorded yet
|
|
15164
|
+
observer.next(null);
|
|
15165
|
+
observer.complete();
|
|
15166
|
+
}
|
|
15167
|
+
else {
|
|
15168
|
+
// all other states are errors
|
|
15169
|
+
observer.error(error);
|
|
15170
|
+
observer.complete();
|
|
15171
|
+
}
|
|
15153
15172
|
}
|
|
15154
15173
|
});
|
|
15155
15174
|
}
|
|
@@ -15163,81 +15182,39 @@ class RecordingFileService extends BasicRecordingService {
|
|
|
15163
15182
|
let wobs = new Observable(observer => {
|
|
15164
15183
|
let rf = null;
|
|
15165
15184
|
let rfDescrObs = this.recordingFileDescrObserver(recordingFileId);
|
|
15166
|
-
rfDescrObs.subscribe(value => {
|
|
15167
|
-
|
|
15168
|
-
|
|
15169
|
-
|
|
15170
|
-
|
|
15171
|
-
|
|
15172
|
-
|
|
15173
|
-
|
|
15174
|
-
|
|
15175
|
-
|
|
15176
|
-
|
|
15177
|
-
|
|
15178
|
-
|
|
15179
|
-
|
|
15180
|
-
|
|
15181
|
-
|
|
15182
|
-
|
|
15183
|
-
|
|
15184
|
-
|
|
15185
|
-
|
|
15186
|
-
|
|
15187
|
-
|
|
15185
|
+
rfDescrObs.subscribe({ next: value => {
|
|
15186
|
+
rf = value;
|
|
15187
|
+
}, error: (error) => {
|
|
15188
|
+
observer.error(error);
|
|
15189
|
+
}, complete: () => {
|
|
15190
|
+
let rfAudioObs = this.fetchAudiofile(recordingFileId);
|
|
15191
|
+
rfAudioObs.subscribe({
|
|
15192
|
+
next: resp => {
|
|
15193
|
+
// Do not use Promise version, which does not work with Safari 13
|
|
15194
|
+
if (resp.body) {
|
|
15195
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
15196
|
+
if (rf) {
|
|
15197
|
+
let as = new AudioBufferSource(ab);
|
|
15198
|
+
RecordingFileUtils.setAudioData(rf, new AudioDataHolder(as));
|
|
15199
|
+
}
|
|
15200
|
+
else {
|
|
15201
|
+
observer.error('Recording file object null');
|
|
15202
|
+
}
|
|
15203
|
+
if (this.debugDelay > 0) {
|
|
15204
|
+
window.setTimeout(() => {
|
|
15205
|
+
observer.next(rf);
|
|
15206
|
+
observer.complete();
|
|
15207
|
+
}, this.debugDelay);
|
|
15208
|
+
}
|
|
15209
|
+
else {
|
|
15210
|
+
observer.next(rf);
|
|
15211
|
+
observer.complete();
|
|
15212
|
+
}
|
|
15213
|
+
});
|
|
15188
15214
|
}
|
|
15189
15215
|
else {
|
|
15190
|
-
observer.
|
|
15191
|
-
observer.complete();
|
|
15216
|
+
observer.error('Received no audio data');
|
|
15192
15217
|
}
|
|
15193
|
-
});
|
|
15194
|
-
}
|
|
15195
|
-
else {
|
|
15196
|
-
observer.error('Received no audio data');
|
|
15197
|
-
}
|
|
15198
|
-
}, (error) => {
|
|
15199
|
-
if (error.status == 404) {
|
|
15200
|
-
// Interpret not as an error, the file ist not recorded yet
|
|
15201
|
-
observer.next(null);
|
|
15202
|
-
observer.complete();
|
|
15203
|
-
}
|
|
15204
|
-
else {
|
|
15205
|
-
// all other states are errors
|
|
15206
|
-
observer.error(error);
|
|
15207
|
-
observer.complete();
|
|
15208
|
-
}
|
|
15209
|
-
});
|
|
15210
|
-
});
|
|
15211
|
-
});
|
|
15212
|
-
return wobs;
|
|
15213
|
-
}
|
|
15214
|
-
fetchSprRecordingFile(aCtx, recordingFileId) {
|
|
15215
|
-
let wobs = new Observable(observer => {
|
|
15216
|
-
let rf = null;
|
|
15217
|
-
let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
|
|
15218
|
-
rfDescrObs.subscribe(value => {
|
|
15219
|
-
rf = value;
|
|
15220
|
-
}, (error) => {
|
|
15221
|
-
observer.error(error);
|
|
15222
|
-
}, () => {
|
|
15223
|
-
let sampleCnt = null;
|
|
15224
|
-
if (rf && rf.channels && rf.frames) {
|
|
15225
|
-
sampleCnt = rf.channels * rf.frames;
|
|
15226
|
-
}
|
|
15227
|
-
// TODO use download storage type depending on sample count of file
|
|
15228
|
-
if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
|
|
15229
|
-
const baseUrl = this.recoFileUrl(recordingFileId);
|
|
15230
|
-
const obNetAb = this.chunkAudioRequestToNetAudioBuffer(aCtx, baseUrl, 0, rf === null || rf === void 0 ? void 0 : rf.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
|
|
15231
|
-
obNetAb.subscribe({
|
|
15232
|
-
next: (nab) => {
|
|
15233
|
-
let adh = new AudioDataHolder(nab);
|
|
15234
|
-
if (rf) {
|
|
15235
|
-
RecordingFileUtils.setAudioData(rf, adh);
|
|
15236
|
-
observer.next(rf);
|
|
15237
|
-
}
|
|
15238
|
-
},
|
|
15239
|
-
complete: () => {
|
|
15240
|
-
observer.complete();
|
|
15241
15218
|
},
|
|
15242
15219
|
error: (error) => {
|
|
15243
15220
|
if (error.status == 404) {
|
|
@@ -15253,47 +15230,97 @@ class RecordingFileService extends BasicRecordingService {
|
|
|
15253
15230
|
}
|
|
15254
15231
|
});
|
|
15255
15232
|
}
|
|
15256
|
-
|
|
15257
|
-
|
|
15258
|
-
|
|
15259
|
-
|
|
15260
|
-
|
|
15261
|
-
|
|
15233
|
+
});
|
|
15234
|
+
});
|
|
15235
|
+
return wobs;
|
|
15236
|
+
}
|
|
15237
|
+
fetchSprRecordingFile(aCtx, recordingFileId) {
|
|
15238
|
+
let wobs = new Observable(observer => {
|
|
15239
|
+
let rf = null;
|
|
15240
|
+
let rfDescrObs = this.sprRecordingFileDescrObserver(recordingFileId);
|
|
15241
|
+
rfDescrObs.subscribe({ next: value => {
|
|
15242
|
+
rf = value;
|
|
15243
|
+
},
|
|
15244
|
+
error: (error) => {
|
|
15245
|
+
observer.error(error);
|
|
15246
|
+
}, complete: () => {
|
|
15247
|
+
let sampleCnt = null;
|
|
15248
|
+
if (rf && rf.channels && rf.frames) {
|
|
15249
|
+
sampleCnt = rf.channels * rf.frames;
|
|
15250
|
+
}
|
|
15251
|
+
// TODO use download storage type depending on sample count of file
|
|
15252
|
+
if (rf && rf.samplerate && sampleCnt != null && sampleCnt > this._maxAutoNetMemStoreSamples) {
|
|
15253
|
+
const baseUrl = this.recoFileUrl(recordingFileId);
|
|
15254
|
+
const obNetAb = this.chunkAudioRequestToNetAudioBuffer(aCtx, baseUrl, 0, rf === null || rf === void 0 ? void 0 : rf.samplerate, BasicRecordingService.DEFAULT_CHUNKED_DOWNLOAD_SECONDS, rf.frames);
|
|
15255
|
+
obNetAb.subscribe({
|
|
15256
|
+
next: (nab) => {
|
|
15257
|
+
let adh = new AudioDataHolder(nab);
|
|
15262
15258
|
if (rf) {
|
|
15263
|
-
let as = new AudioBufferSource(ab);
|
|
15264
|
-
let adh = new AudioDataHolder(as);
|
|
15265
15259
|
RecordingFileUtils.setAudioData(rf, adh);
|
|
15260
|
+
observer.next(rf);
|
|
15261
|
+
}
|
|
15262
|
+
},
|
|
15263
|
+
complete: () => {
|
|
15264
|
+
observer.complete();
|
|
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);
|
|
15270
|
+
observer.complete();
|
|
15266
15271
|
}
|
|
15267
15272
|
else {
|
|
15268
|
-
|
|
15273
|
+
// all other states are errors
|
|
15274
|
+
observer.error(error);
|
|
15275
|
+
observer.complete();
|
|
15269
15276
|
}
|
|
15270
|
-
|
|
15271
|
-
|
|
15272
|
-
|
|
15273
|
-
|
|
15274
|
-
|
|
15277
|
+
}
|
|
15278
|
+
});
|
|
15279
|
+
}
|
|
15280
|
+
else {
|
|
15281
|
+
let rfAudioObs = this.fetchAudiofile(recordingFileId);
|
|
15282
|
+
rfAudioObs.subscribe({ next: resp => {
|
|
15283
|
+
// Do not use Promise version, which does not work with Safari 13
|
|
15284
|
+
if (resp.body) {
|
|
15285
|
+
aCtx.decodeAudioData(resp.body, ab => {
|
|
15286
|
+
if (rf) {
|
|
15287
|
+
let as = new AudioBufferSource(ab);
|
|
15288
|
+
let adh = new AudioDataHolder(as);
|
|
15289
|
+
RecordingFileUtils.setAudioData(rf, adh);
|
|
15290
|
+
}
|
|
15291
|
+
else {
|
|
15292
|
+
observer.error('Recording file object null');
|
|
15293
|
+
}
|
|
15294
|
+
if (this.debugDelay > 0) {
|
|
15295
|
+
window.setTimeout(() => {
|
|
15296
|
+
observer.next(rf);
|
|
15297
|
+
observer.complete();
|
|
15298
|
+
}, this.debugDelay);
|
|
15299
|
+
}
|
|
15300
|
+
else {
|
|
15301
|
+
observer.next(rf);
|
|
15302
|
+
observer.complete();
|
|
15303
|
+
}
|
|
15304
|
+
});
|
|
15275
15305
|
}
|
|
15276
15306
|
else {
|
|
15277
|
-
observer.
|
|
15307
|
+
observer.error('Received no audio data');
|
|
15308
|
+
}
|
|
15309
|
+
},
|
|
15310
|
+
error: (error) => {
|
|
15311
|
+
if (error.status == 404) {
|
|
15312
|
+
// Interpret not as an error, the file ist not recorded yet
|
|
15313
|
+
observer.next(null);
|
|
15278
15314
|
observer.complete();
|
|
15279
15315
|
}
|
|
15280
|
-
|
|
15281
|
-
|
|
15282
|
-
|
|
15283
|
-
|
|
15284
|
-
|
|
15285
|
-
|
|
15286
|
-
|
|
15287
|
-
|
|
15288
|
-
observer.next(null);
|
|
15289
|
-
observer.complete();
|
|
15290
|
-
}
|
|
15291
|
-
else {
|
|
15292
|
-
// all other states are errors
|
|
15293
|
-
observer.error(error);
|
|
15294
|
-
observer.complete();
|
|
15295
|
-
}
|
|
15296
|
-
});
|
|
15316
|
+
else {
|
|
15317
|
+
// all other states are errors
|
|
15318
|
+
observer.error(error);
|
|
15319
|
+
observer.complete();
|
|
15320
|
+
}
|
|
15321
|
+
}
|
|
15322
|
+
});
|
|
15323
|
+
}
|
|
15297
15324
|
}
|
|
15298
15325
|
});
|
|
15299
15326
|
});
|
|
@@ -15347,7 +15374,7 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0
|
|
|
15347
15374
|
<legend>Versions</legend>
|
|
15348
15375
|
<mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
|
|
15349
15376
|
<select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
|
|
15350
|
-
<option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<
|
|
15377
|
+
<option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<ng-container *ngIf="i==0"> (latest)</ng-container></option>
|
|
15351
15378
|
</select>
|
|
15352
15379
|
</fieldset>
|
|
15353
15380
|
<fieldset>
|
|
@@ -15382,7 +15409,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
15382
15409
|
<legend>Versions</legend>
|
|
15383
15410
|
<mat-progress-spinner *ngIf="naviInfoLoading" mode="indeterminate" [diameter]="15"></mat-progress-spinner>
|
|
15384
15411
|
<select *ngIf="!naviInfoLoading" [disabled]="versions==null || versions.length==1" (change)="selectVersionChange($event)">
|
|
15385
|
-
<option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<
|
|
15412
|
+
<option *ngFor="let v of versions; let i = index" [selected]="v===version" value="{{v}}">{{v}}<ng-container *ngIf="i==0"> (latest)</ng-container></option>
|
|
15386
15413
|
</select>
|
|
15387
15414
|
</fieldset>
|
|
15388
15415
|
<fieldset>
|
|
@@ -15748,47 +15775,49 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15748
15775
|
let audioContext = AudioContextProvider.audioContextInstance();
|
|
15749
15776
|
if (audioContext) {
|
|
15750
15777
|
this.audioFetching = true;
|
|
15751
|
-
this.recordingFileService.fetchSprRecordingFile(audioContext, rfId).subscribe(
|
|
15752
|
-
|
|
15753
|
-
|
|
15754
|
-
|
|
15755
|
-
|
|
15756
|
-
|
|
15757
|
-
|
|
15758
|
-
|
|
15759
|
-
|
|
15760
|
-
|
|
15761
|
-
|
|
15762
|
-
|
|
15763
|
-
|
|
15764
|
-
|
|
15765
|
-
|
|
15766
|
-
|
|
15767
|
-
|
|
15768
|
-
|
|
15769
|
-
let sel = null;
|
|
15770
|
-
if (esffsr != null) {
|
|
15771
|
-
if (eeffsr != null) {
|
|
15772
|
-
sel = new Selection(ab.sampleRate, esffsr, eeffsr);
|
|
15778
|
+
this.recordingFileService.fetchSprRecordingFile(audioContext, rfId).subscribe({
|
|
15779
|
+
next: value => {
|
|
15780
|
+
this.audioFetching = false;
|
|
15781
|
+
this.status = 'Audio file loaded.';
|
|
15782
|
+
let clip = null;
|
|
15783
|
+
this.recordingFile = value;
|
|
15784
|
+
if (this.recordingFile) {
|
|
15785
|
+
let ab = this.recordingFile.audioDataHolder;
|
|
15786
|
+
if (ab) {
|
|
15787
|
+
clip = new AudioClip(ab);
|
|
15788
|
+
let esffsr = null;
|
|
15789
|
+
let eeffsr = null;
|
|
15790
|
+
let esr = null;
|
|
15791
|
+
if (clip.audioDataHolder != null) {
|
|
15792
|
+
esr = ab.sampleRate;
|
|
15793
|
+
if (esr != null) {
|
|
15794
|
+
esffsr = RecordingFileUtil.editStartFrameForSampleRate(this.recordingFile, esr);
|
|
15795
|
+
eeffsr = RecordingFileUtil.editEndFrameForSampleRate(this.recordingFile, esr);
|
|
15773
15796
|
}
|
|
15774
|
-
|
|
15775
|
-
|
|
15776
|
-
|
|
15777
|
-
|
|
15797
|
+
let sel = null;
|
|
15798
|
+
if (esffsr != null) {
|
|
15799
|
+
if (eeffsr != null) {
|
|
15800
|
+
sel = new Selection(ab.sampleRate, esffsr, eeffsr);
|
|
15801
|
+
}
|
|
15802
|
+
else {
|
|
15803
|
+
//let ch0 = ab.getChannelData(0);
|
|
15804
|
+
let frameLength = ab.frameLen;
|
|
15805
|
+
sel = new Selection(esr, esffsr, frameLength);
|
|
15806
|
+
}
|
|
15778
15807
|
}
|
|
15808
|
+
else if (eeffsr != null) {
|
|
15809
|
+
sel = new Selection(esr, 0, eeffsr);
|
|
15810
|
+
}
|
|
15811
|
+
clip.selection = sel;
|
|
15779
15812
|
}
|
|
15780
|
-
else if (eeffsr != null) {
|
|
15781
|
-
sel = new Selection(esr, 0, eeffsr);
|
|
15782
|
-
}
|
|
15783
|
-
clip.selection = sel;
|
|
15784
15813
|
}
|
|
15785
15814
|
}
|
|
15815
|
+
this.audioClip = clip;
|
|
15816
|
+
this.loadedRecfile();
|
|
15817
|
+
}, error: error1 => {
|
|
15818
|
+
this.audioFetching = false;
|
|
15819
|
+
this.status = 'Error loading audio file!';
|
|
15786
15820
|
}
|
|
15787
|
-
this.audioClip = clip;
|
|
15788
|
-
this.loadedRecfile();
|
|
15789
|
-
}, error1 => {
|
|
15790
|
-
this.audioFetching = false;
|
|
15791
|
-
this.status = 'Error loading audio file!';
|
|
15792
15821
|
});
|
|
15793
15822
|
}
|
|
15794
15823
|
}
|
|
@@ -15816,7 +15845,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15816
15845
|
this.lastAction.disabled = (this.posInList == null || itemCnt == null || this.posInList >= itemCnt - 1);
|
|
15817
15846
|
}
|
|
15818
15847
|
loadSession(sessionId) {
|
|
15819
|
-
// load session and recording file
|
|
15848
|
+
// load session and recording file metadata only when on init and when session changes
|
|
15820
15849
|
if (sessionId != this.sessionId) {
|
|
15821
15850
|
// tell UI that we are working...
|
|
15822
15851
|
this.naviInfoLoading = true;
|
|
@@ -15854,7 +15883,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15854
15883
|
else {
|
|
15855
15884
|
// rec file with itemcode already exists, add (push) this version ...
|
|
15856
15885
|
exRfsForIc.push(rfd);
|
|
15857
|
-
//
|
|
15886
|
+
// ... and sort latest version (highest version number) to lowest index
|
|
15858
15887
|
exRfsForIc.sort((rfd1, rfd2) => {
|
|
15859
15888
|
return rfd2.version - rfd1.version;
|
|
15860
15889
|
});
|
|
@@ -15908,7 +15937,7 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
15908
15937
|
}
|
|
15909
15938
|
}
|
|
15910
15939
|
}
|
|
15911
|
-
RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileViewComponent, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token:
|
|
15940
|
+
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 });
|
|
15912
15941
|
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: `
|
|
15913
15942
|
|
|
15914
15943
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
@@ -15947,7 +15976,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
15947
15976
|
<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>
|
|
15948
15977
|
</div>
|
|
15949
15978
|
`, 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"] }]
|
|
15950
|
-
}], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type:
|
|
15979
|
+
}], 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: [{
|
|
15951
15980
|
type: ViewChild,
|
|
15952
15981
|
args: [AudioDisplayScrollPane]
|
|
15953
15982
|
}] } });
|
|
@@ -16013,27 +16042,28 @@ class RecordingFileUI extends RecordingFileViewComponent {
|
|
|
16013
16042
|
sf = s.startFrame;
|
|
16014
16043
|
ef = s.endFrame;
|
|
16015
16044
|
}
|
|
16016
|
-
this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe((value) => {
|
|
16017
|
-
|
|
16018
|
-
|
|
16019
|
-
|
|
16020
|
-
|
|
16021
|
-
|
|
16022
|
-
|
|
16023
|
-
|
|
16024
|
-
|
|
16025
|
-
|
|
16026
|
-
|
|
16027
|
-
|
|
16028
|
-
|
|
16029
|
-
|
|
16030
|
-
|
|
16045
|
+
this.recordingFileService.saveEditSelection(this.recordingFile.recordingFileId, sr, sf, ef).subscribe({ next: (value) => { },
|
|
16046
|
+
error: () => {
|
|
16047
|
+
this.dialog.open(MessageDialog, {
|
|
16048
|
+
data: {
|
|
16049
|
+
type: 'error',
|
|
16050
|
+
title: 'Save selection edit error',
|
|
16051
|
+
msg: "Could not save edit selection to WikiSpeech server!",
|
|
16052
|
+
advice: "Please check network connection and server state."
|
|
16053
|
+
}
|
|
16054
|
+
});
|
|
16055
|
+
}, complete: () => {
|
|
16056
|
+
// Or use returned selection value from server?
|
|
16057
|
+
this.savedEditSelection = s;
|
|
16058
|
+
this.editSaved = true;
|
|
16059
|
+
this.snackBar.open('Selection edit saved successfully.', 'OK', { duration: 1500 });
|
|
16060
|
+
}
|
|
16031
16061
|
});
|
|
16032
16062
|
}
|
|
16033
16063
|
}
|
|
16034
16064
|
}
|
|
16035
16065
|
}
|
|
16036
|
-
RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingFileUI, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token:
|
|
16066
|
+
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 });
|
|
16037
16067
|
RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.2.12", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
|
|
16038
16068
|
<h1>Recording file editing</h1>
|
|
16039
16069
|
<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>
|
|
@@ -16078,7 +16108,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
16078
16108
|
|
|
16079
16109
|
<button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
|
|
16080
16110
|
`, 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"] }]
|
|
16081
|
-
}], ctorParameters: function () { return [{ type: RecordingFileService }, { type: RecordingService }, { type: SessionService }, { type:
|
|
16111
|
+
}], 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 }]; } });
|
|
16082
16112
|
|
|
16083
16113
|
class MediaUtils {
|
|
16084
16114
|
static toMediaTime(timeInSeconds) {
|
|
@@ -16216,7 +16246,7 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version:
|
|
|
16216
16246
|
</mat-card-content>
|
|
16217
16247
|
</mat-card>
|
|
16218
16248
|
|
|
16219
|
-
`, 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$
|
|
16249
|
+
`, 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" }] });
|
|
16220
16250
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecordingList, decorators: [{
|
|
16221
16251
|
type: Component,
|
|
16222
16252
|
args: [{ selector: 'app-recordinglist', template: `
|
|
@@ -16297,7 +16327,7 @@ class RecorderCombiPane extends ResponsiveComponent {
|
|
|
16297
16327
|
this.recordingListComp.selectTop();
|
|
16298
16328
|
}
|
|
16299
16329
|
}
|
|
16300
|
-
RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: RecorderCombiPane, deps: [{ token: i1$
|
|
16330
|
+
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 });
|
|
16301
16331
|
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: `
|
|
16302
16332
|
<div class="scrollList">
|
|
16303
16333
|
<app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
|
|
@@ -16326,7 +16356,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
16326
16356
|
[playStopAction]="playStopAction"></app-audiodisplay>
|
|
16327
16357
|
</div>
|
|
16328
16358
|
`, 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"] }]
|
|
16329
|
-
}], ctorParameters: function () { return [{ type: i1$
|
|
16359
|
+
}], ctorParameters: function () { return [{ type: i1$2.BreakpointObserver }]; }, propDecorators: { recordingListComp: [{
|
|
16330
16360
|
type: ViewChild,
|
|
16331
16361
|
args: [RecordingList]
|
|
16332
16362
|
}], selectDisabled: [{
|
|
@@ -16353,11 +16383,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
16353
16383
|
}] } });
|
|
16354
16384
|
|
|
16355
16385
|
class AudioRecorder extends BasicRecorder {
|
|
16356
|
-
constructor(bpo, changeDetectorRef, renderer,
|
|
16386
|
+
constructor(bpo, changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
|
|
16357
16387
|
super(bpo, changeDetectorRef, dialog, sessionService, uploader, config);
|
|
16358
16388
|
this.bpo = bpo;
|
|
16359
16389
|
this.renderer = renderer;
|
|
16360
|
-
this.route = route;
|
|
16361
16390
|
this.recFileService = recFileService;
|
|
16362
16391
|
this.uploader = uploader;
|
|
16363
16392
|
this._project = null;
|
|
@@ -17267,7 +17296,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
17267
17296
|
}
|
|
17268
17297
|
}
|
|
17269
17298
|
}
|
|
17270
|
-
AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorder, deps: [{ token: i1$
|
|
17299
|
+
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 });
|
|
17271
17300
|
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: `
|
|
17272
17301
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
17273
17302
|
<app-warningbar [show]="isDefaultAudioTestSession()"
|
|
@@ -17389,7 +17418,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
17389
17418
|
</div>
|
|
17390
17419
|
`, 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"] }]
|
|
17391
17420
|
}], ctorParameters: function () {
|
|
17392
|
-
return [{ type: i1$
|
|
17421
|
+
return [{ type: i1$2.BreakpointObserver }, { type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$3.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
|
|
17393
17422
|
type: Inject,
|
|
17394
17423
|
args: [SPEECHRECORDER_CONFIG]
|
|
17395
17424
|
}] }];
|
|
@@ -17435,7 +17464,7 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
17435
17464
|
}
|
|
17436
17465
|
else {
|
|
17437
17466
|
// all this attempts to customize the message do not work anymore (for security reasons)!!
|
|
17438
|
-
|
|
17467
|
+
const message = "Please do not leave the page, until all recordings are uploaded!";
|
|
17439
17468
|
alert(message);
|
|
17440
17469
|
e = e || window.event;
|
|
17441
17470
|
if (e) {
|
|
@@ -17535,7 +17564,7 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
17535
17564
|
return this.dataSaved && !this.ar.isActive();
|
|
17536
17565
|
}
|
|
17537
17566
|
}
|
|
17538
|
-
AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: AudioRecorderComponent, deps: [{ token:
|
|
17567
|
+
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 });
|
|
17539
17568
|
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: `
|
|
17540
17569
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
17541
17570
|
`, 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"] }] });
|
|
@@ -17544,7 +17573,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
17544
17573
|
args: [{ selector: 'app-audiorecorder-comp', providers: [SessionService], template: `
|
|
17545
17574
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
17546
17575
|
`, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"] }]
|
|
17547
|
-
}], ctorParameters: function () { return [{ type:
|
|
17576
|
+
}], ctorParameters: function () { return [{ type: i4$2.ActivatedRoute }, { type: i4$2.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: SpeechRecorderUploader }]; }, propDecorators: { ar: [{
|
|
17548
17577
|
type: ViewChild,
|
|
17549
17578
|
args: [AudioRecorder, { static: true }]
|
|
17550
17579
|
}] } });
|
|
@@ -17580,7 +17609,7 @@ class SpeechrecorderngModule {
|
|
|
17580
17609
|
}
|
|
17581
17610
|
SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
17582
17611
|
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,
|
|
17583
|
-
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [
|
|
17612
|
+
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] });
|
|
17584
17613
|
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] });
|
|
17585
17614
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
|
|
17586
17615
|
type: NgModule,
|
|
@@ -17593,7 +17622,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.2.12", ngImpo
|
|
|
17593
17622
|
}]
|
|
17594
17623
|
}] });
|
|
17595
17624
|
|
|
17596
|
-
const VERSION = '3.4.
|
|
17625
|
+
const VERSION = '3.4.5';
|
|
17597
17626
|
|
|
17598
17627
|
/*
|
|
17599
17628
|
* Public API Surface of speechrecorderng
|