speechrecorderng 2.24.2 → 2.25.2
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/audio/audio_display.mjs +4 -4
- package/esm2020/lib/audio/audio_player.mjs +4 -4
- package/esm2020/lib/audio/capture/capture.mjs +1 -1
- package/esm2020/lib/audio/io/stream.mjs +41 -1
- package/esm2020/lib/audio/ui/audio_canvas_layer_comp.mjs +7 -7
- package/esm2020/lib/audio/ui/audio_display_control.mjs +4 -4
- package/esm2020/lib/audio/ui/audio_display_scroll_pane.mjs +4 -4
- package/esm2020/lib/audio/ui/audiosignal.mjs +4 -4
- package/esm2020/lib/audio/ui/container.mjs +4 -4
- package/esm2020/lib/audio/ui/livelevel.mjs +4 -4
- package/esm2020/lib/audio/ui/scroll_pane_horizontal.mjs +4 -4
- package/esm2020/lib/audio/ui/sonagram.mjs +4 -4
- package/esm2020/lib/io/stream.mjs +10 -1
- package/esm2020/lib/recorder_component.mjs +1 -1
- package/esm2020/lib/speechrecorder/project/project.mjs +1 -1
- package/esm2020/lib/speechrecorder/project/project.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/recordings/recordings.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/script/script.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/audiorecorder.mjs +122 -110
- package/esm2020/lib/speechrecorder/session/basicrecorder.mjs +179 -14
- package/esm2020/lib/speechrecorder/session/controlpanel.mjs +46 -22
- package/esm2020/lib/speechrecorder/session/progress.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/prompting.mjs +16 -16
- package/esm2020/lib/speechrecorder/session/recorder_combi_pane.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recording_list.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-meta.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-navi.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-u-i.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recording-file-view.component.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/recordingfile/recordingfile-service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/session.service.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/session_finished_dialog.mjs +4 -4
- package/esm2020/lib/speechrecorder/session/sessionmanager.mjs +94 -61
- package/esm2020/lib/speechrecorder/session/warning_bar.mjs +4 -4
- package/esm2020/lib/speechrecorder/spruploader.mjs +4 -4
- package/esm2020/lib/speechrecorder/startstopsignal/ui/simpletrafficlight.mjs +4 -4
- package/esm2020/lib/speechrecorderng.component.mjs +18 -5
- package/esm2020/lib/speechrecorderng.module.mjs +8 -8
- package/esm2020/lib/spr.config.mjs +4 -4
- package/esm2020/lib/spr.module.version.mjs +2 -2
- package/esm2020/lib/ui/canvas_layer_comp.mjs +4 -4
- package/esm2020/lib/ui/message_dialog.mjs +4 -4
- package/esm2020/lib/ui/recordingitem_display.mjs +7 -7
- package/esm2020/lib/utils/scrollIntoViewToBottom.mjs +4 -4
- package/esm2020/lib/utils/wake_lock.mjs +114 -0
- package/esm2020/lib/utils/wake_lock_media.mjs +2 -0
- package/fesm2015/speechrecorderng.mjs +811 -404
- package/fesm2015/speechrecorderng.mjs.map +1 -1
- package/fesm2020/speechrecorderng.mjs +805 -404
- package/fesm2020/speechrecorderng.mjs.map +1 -1
- package/lib/audio/io/stream.d.ts +13 -0
- package/lib/io/stream.d.ts +3 -0
- package/lib/recorder_component.d.ts +1 -0
- package/lib/speechrecorder/project/project.d.ts +1 -0
- package/lib/speechrecorder/session/audiorecorder.d.ts +11 -11
- package/lib/speechrecorder/session/basicrecorder.d.ts +44 -4
- package/lib/speechrecorder/session/controlpanel.d.ts +7 -0
- package/lib/speechrecorder/session/sessionmanager.d.ts +13 -10
- package/lib/speechrecorderng.component.d.ts +1 -0
- package/lib/speechrecorderng.module.d.ts +1 -1
- package/lib/spr.module.version.d.ts +1 -1
- package/lib/utils/wake_lock.d.ts +23 -0
- package/lib/utils/wake_lock_media.d.ts +1 -0
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
2
|
import { InjectionToken, Injectable, Inject, Component, Input, Directive, EventEmitter, ViewChild, HostListener, Output, HostBinding, NgModule } from '@angular/core';
|
|
3
3
|
import { timeout } from 'rxjs/operators';
|
|
4
|
-
import { Observable } from 'rxjs';
|
|
4
|
+
import { Observable, BehaviorSubject } from 'rxjs';
|
|
5
5
|
import * as i1 from '@angular/common/http';
|
|
6
6
|
import { HttpHeaders, HttpClientModule } from '@angular/common/http';
|
|
7
7
|
import * as i4 from '@angular/common';
|
|
@@ -19,10 +19,10 @@ import * as i1$2 from '@angular/material/dialog';
|
|
|
19
19
|
import { MAT_DIALOG_DATA, MatDialogModule } from '@angular/material/dialog';
|
|
20
20
|
import * as i3$2 from '@angular/material/button';
|
|
21
21
|
import { MatButtonModule } from '@angular/material/button';
|
|
22
|
+
import { __decorate, __param } from 'tslib';
|
|
22
23
|
import * as i1$3 from '@angular/material/progress-spinner';
|
|
23
24
|
import { MatProgressSpinnerModule } from '@angular/material/progress-spinner';
|
|
24
25
|
import * as i8 from '@angular/flex-layout/flex';
|
|
25
|
-
import NoSleep from 'nosleep.js';
|
|
26
26
|
import * as i7 from '@angular/material/progress-bar';
|
|
27
27
|
import { MatProgressBarModule } from '@angular/material/progress-bar';
|
|
28
28
|
import { FlexLayoutModule } from '@angular/flex-layout';
|
|
@@ -1784,9 +1784,9 @@ class SpeechRecorderConfig {
|
|
|
1784
1784
|
this.withCredentials = false;
|
|
1785
1785
|
}
|
|
1786
1786
|
}
|
|
1787
|
-
SpeechRecorderConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
1788
|
-
SpeechRecorderConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
1789
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
1787
|
+
SpeechRecorderConfig.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderConfig, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1788
|
+
SpeechRecorderConfig.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderConfig });
|
|
1789
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderConfig, decorators: [{
|
|
1790
1790
|
type: Injectable
|
|
1791
1791
|
}], ctorParameters: function () { return []; } });
|
|
1792
1792
|
|
|
@@ -1838,9 +1838,9 @@ class ProjectService {
|
|
|
1838
1838
|
}
|
|
1839
1839
|
}
|
|
1840
1840
|
ProjectService.PROJECT_API_CTX = 'project';
|
|
1841
|
-
ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
1842
|
-
ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
1843
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
1841
|
+
ProjectService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProjectService, deps: [{ token: i1.HttpClient }, { token: i4.PlatformLocation }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1842
|
+
ProjectService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProjectService });
|
|
1843
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProjectService, decorators: [{
|
|
1844
1844
|
type: Injectable
|
|
1845
1845
|
}], ctorParameters: function () {
|
|
1846
1846
|
return [{ type: i1.HttpClient }, { type: i4.PlatformLocation }, { type: SpeechRecorderConfig, decorators: [{
|
|
@@ -1898,9 +1898,9 @@ class SessionService {
|
|
|
1898
1898
|
}
|
|
1899
1899
|
}
|
|
1900
1900
|
SessionService.SESSION_API_CTX = 'session';
|
|
1901
|
-
SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
1902
|
-
SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
1903
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
1901
|
+
SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
1902
|
+
SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionService });
|
|
1903
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionService, decorators: [{
|
|
1904
1904
|
type: Injectable
|
|
1905
1905
|
}], ctorParameters: function () {
|
|
1906
1906
|
return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
@@ -1941,8 +1941,8 @@ class SimpleTrafficLight {
|
|
|
1941
1941
|
}
|
|
1942
1942
|
}
|
|
1943
1943
|
}
|
|
1944
|
-
SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
1945
|
-
SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
1944
|
+
SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1945
|
+
SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
|
|
1946
1946
|
|
|
1947
1947
|
<div>
|
|
1948
1948
|
<div class="circle {{lighttop}}"></div>
|
|
@@ -1950,7 +1950,7 @@ SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
|
|
|
1950
1950
|
<div class="circle {{lightbottom}}"></div>
|
|
1951
1951
|
</div>
|
|
1952
1952
|
`, isInline: true, styles: [".circle{width:50px;height:50px;border-radius:50%;margin:5px;background:grey}\n", ".red{background:red}\n", ".yellow{background:yellow}\n", ".green{background:green}\n", ".black{background:black}\n", ":host{display:flex;flex-direction:column;background:black;padding:2px;height:170px;max-height:170px;flex:0 0 content}\n"] });
|
|
1953
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
1953
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SimpleTrafficLight, decorators: [{
|
|
1954
1954
|
type: Component,
|
|
1955
1955
|
args: [{
|
|
1956
1956
|
selector: 'app-simpletrafficlight',
|
|
@@ -2056,9 +2056,9 @@ class CanvasLayerComponent {
|
|
|
2056
2056
|
}
|
|
2057
2057
|
}
|
|
2058
2058
|
}
|
|
2059
|
-
CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2060
|
-
CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
2061
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2059
|
+
CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2060
|
+
CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: CanvasLayerComponent, ngImport: i0 });
|
|
2061
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CanvasLayerComponent, decorators: [{
|
|
2062
2062
|
type: Directive
|
|
2063
2063
|
}], ctorParameters: function () { return []; } });
|
|
2064
2064
|
|
|
@@ -2291,9 +2291,9 @@ class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
|
|
|
2291
2291
|
//});
|
|
2292
2292
|
}
|
|
2293
2293
|
}
|
|
2294
|
-
BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2295
|
-
BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
2296
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2294
|
+
BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2295
|
+
BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
|
|
2296
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
|
|
2297
2297
|
type: Directive
|
|
2298
2298
|
}] });
|
|
2299
2299
|
class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
|
|
@@ -2494,9 +2494,9 @@ class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
|
|
|
2494
2494
|
}
|
|
2495
2495
|
}
|
|
2496
2496
|
}
|
|
2497
|
-
AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2498
|
-
AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
2499
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2497
|
+
AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2498
|
+
AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: AudioCanvasLayerComponent, inputs: { pointerPosition: "pointerPosition", selecting: "selecting", selection: "selection" }, outputs: { pointerPositionEventEmitter: "pointerPositionEventEmitter", selectingEventEmitter: "selectingEventEmitter", selectedEventEmitter: "selectedEventEmitter" }, host: { listeners: { "document:mouseup": "onMouseup($event)" } }, viewQueries: [{ propertyName: "bgCanvasRef", first: true, predicate: ["bg"], descendants: true, static: true }, { propertyName: "cursorCanvasRef", first: true, predicate: ["cursor"], descendants: true, static: true }], usesInheritance: true, ngImport: i0 });
|
|
2499
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
|
|
2500
2500
|
type: Directive
|
|
2501
2501
|
}], propDecorators: { bgCanvasRef: [{
|
|
2502
2502
|
type: ViewChild,
|
|
@@ -2819,14 +2819,14 @@ class AudioSignal extends AudioCanvasLayerComponent {
|
|
|
2819
2819
|
this.playFramePosition = 0;
|
|
2820
2820
|
}
|
|
2821
2821
|
}
|
|
2822
|
-
AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2823
|
-
AudioSignal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
2822
|
+
AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2823
|
+
AudioSignal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioSignal, selector: "audio-signal", viewQueries: [{ propertyName: "audioSignalCanvasRef", first: true, predicate: ["audioSignal"], descendants: true, static: true }, { propertyName: "playPosCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
2824
2824
|
<canvas #bg height="10"></canvas>
|
|
2825
2825
|
<canvas #audioSignal height="10"></canvas>
|
|
2826
2826
|
<canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
|
|
2827
2827
|
(mouseleave)="updateCursorCanvas($event, false)"></canvas>
|
|
2828
2828
|
<canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] });
|
|
2829
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2829
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioSignal, decorators: [{
|
|
2830
2830
|
type: Component,
|
|
2831
2831
|
args: [{
|
|
2832
2832
|
selector: 'audio-signal',
|
|
@@ -3802,14 +3802,14 @@ class Sonagram extends AudioCanvasLayerComponent {
|
|
|
3802
3802
|
//this.startRender();
|
|
3803
3803
|
}
|
|
3804
3804
|
}
|
|
3805
|
-
Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
3806
|
-
Sonagram.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
3805
|
+
Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3806
|
+
Sonagram.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: Sonagram, selector: "audio-sonagram", viewQueries: [{ propertyName: "sonagramCanvasRef", first: true, predicate: ["sonagram"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["marker"], descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
3807
3807
|
<canvas #sonagram height="10"></canvas>
|
|
3808
3808
|
<canvas #bg height="10"></canvas>
|
|
3809
3809
|
<canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
|
|
3810
3810
|
(mouseleave)="updateCursorCanvas($event, false)"></canvas>
|
|
3811
3811
|
<canvas #marker height="10"></canvas>`, isInline: true, styles: [":host{min-height:0px}\n", "canvas{top:0;left:0;width:0;height:0;min-height:0px;position:absolute}\n"] });
|
|
3812
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
3812
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Sonagram, decorators: [{
|
|
3813
3813
|
type: Component,
|
|
3814
3814
|
args: [{
|
|
3815
3815
|
selector: 'audio-sonagram',
|
|
@@ -4174,8 +4174,8 @@ class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
|
|
|
4174
4174
|
}
|
|
4175
4175
|
}
|
|
4176
4176
|
AudioClipUIContainer.DIVIDER_PIXEL_SIZE = 10;
|
|
4177
|
-
AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4178
|
-
AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4177
|
+
AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4178
|
+
AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioClipUIContainer, selector: "app-audio", inputs: { audioData: "audioData", audioClip: "audioClip" }, outputs: { selectionEventEmitter: "selectionEventEmitter" }, host: { listeners: { "window:resize": "onResize($event)", "document:mouseup": "onMouseup($event)", "document:mousemove": "onMousemove($event)" } }, viewQueries: [{ propertyName: "canvasRef", first: true, predicate: ["divider"], descendants: true, static: true }, { propertyName: "ceRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "as", first: true, predicate: AudioSignal, descendants: true, static: true }, { propertyName: "so", first: true, predicate: Sonagram, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
4179
4179
|
<div #virtualCanvas>
|
|
4180
4180
|
<canvas #divider (mousedown)="mousedown($event)" (mouseover)="mouseover($event)"
|
|
4181
4181
|
(mouseleave)="mouseleave($event)" height="10"></canvas>
|
|
@@ -4183,7 +4183,7 @@ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
|
|
|
4183
4183
|
<audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
|
|
4184
4184
|
</div>
|
|
4185
4185
|
`, isInline: true, styles: ["div{margin:0;padding:0;top:0;left:0;width:100%;height:100%;position:relative;box-sizing:border-box;transform:none;overflow:hidden}\n", "canvas{top:0;left:0;width:0;height:0;cursor:ns-resize;position:absolute;zIndex:1;transform:none}\n", "audio-signal{top:0;left:0;position:absolute;zIndex:1;transform:none}\n", "audio-sonagram{top:0;left:0;position:absolute;zIndex:1;transform:none}\n"], components: [{ type: AudioSignal, selector: "audio-signal" }, { type: Sonagram, selector: "audio-sonagram" }] });
|
|
4186
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4186
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioClipUIContainer, decorators: [{
|
|
4187
4187
|
type: Component,
|
|
4188
4188
|
args: [{
|
|
4189
4189
|
selector: 'app-audio',
|
|
@@ -4369,13 +4369,13 @@ class AudioDisplayScrollPane {
|
|
|
4369
4369
|
this.ac.playFramePosition = framePos;
|
|
4370
4370
|
}
|
|
4371
4371
|
}
|
|
4372
|
-
AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4373
|
-
AudioDisplayScrollPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4372
|
+
AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4373
|
+
AudioDisplayScrollPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: { audioClip: "audioClip" }, outputs: { zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomSelectedAction: "zoomSelectedAction", zoomFitToPanelAction: "zoomFitToPanelAction" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "ac", first: true, predicate: AudioClipUIContainer, descendants: true, static: true }], ngImport: i0, template: `
|
|
4374
4374
|
|
|
4375
4375
|
<app-audio #audioSignalContainer (selectionEventEmitter)="selectionChanged($event)"></app-audio>
|
|
4376
4376
|
|
|
4377
4377
|
`, isInline: true, styles: [":host{flex:2;width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "app-audio{margin:0;padding:0;top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n"], components: [{ type: AudioClipUIContainer, selector: "app-audio", inputs: ["audioData", "audioClip"], outputs: ["selectionEventEmitter"] }] });
|
|
4378
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4378
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
|
|
4379
4379
|
type: Component,
|
|
4380
4380
|
args: [{
|
|
4381
4381
|
selector: 'audio-display-scroll-pane',
|
|
@@ -4462,8 +4462,8 @@ class AudioDisplayControl {
|
|
|
4462
4462
|
this.status = 'ERROR';
|
|
4463
4463
|
}
|
|
4464
4464
|
}
|
|
4465
|
-
AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4466
|
-
AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4465
|
+
AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayControl, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4466
|
+
AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioDisplayControl, selector: "audio-display-control", inputs: { audioClip: "audioClip", playStartAction: "playStartAction", playSelectionAction: "playSelectionAction", playStopAction: "playStopAction", zoomInAction: "zoomInAction", zoomOutAction: "zoomOutAction", zoomFitToPanelAction: "zoomFitToPanelAction", zoomSelectedAction: "zoomSelectedAction", autoPlayOnSelectToggleAction: "autoPlayOnSelectToggleAction" }, viewQueries: [{ propertyName: "autoplaySelectedCheckbox", first: true, predicate: MatCheckbox, descendants: true, static: true }], ngImport: i0, template: `
|
|
4467
4467
|
<div #controlPanel style="display:flex;flex-direction: row;">
|
|
4468
4468
|
<fieldset>
|
|
4469
4469
|
|
|
@@ -4507,7 +4507,7 @@ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
|
4507
4507
|
|
|
4508
4508
|
</fieldset>
|
|
4509
4509
|
</div>`, isInline: true, styles: [":host{flex:0}\n"], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i2$1.MatCheckbox, selector: "mat-checkbox", inputs: ["disableRipple", "color", "tabIndex", "aria-label", "aria-labelledby", "aria-describedby", "id", "required", "labelPosition", "name", "value", "checked", "disabled", "indeterminate"], outputs: ["change", "indeterminateChange"], exportAs: ["matCheckbox"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
4510
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4510
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayControl, decorators: [{
|
|
4511
4511
|
type: Component,
|
|
4512
4512
|
args: [{
|
|
4513
4513
|
selector: 'audio-display-control',
|
|
@@ -4649,8 +4649,8 @@ class AudioDisplay {
|
|
|
4649
4649
|
this.status = 'ERROR';
|
|
4650
4650
|
}
|
|
4651
4651
|
}
|
|
4652
|
-
AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4653
|
-
AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4652
|
+
AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplay, deps: [{ token: i1$1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4653
|
+
AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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: `
|
|
4654
4654
|
|
|
4655
4655
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
4656
4656
|
|
|
@@ -4664,7 +4664,7 @@ AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
4664
4664
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
4665
4665
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
4666
4666
|
`, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0px;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"], components: [{ type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
|
|
4667
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4667
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplay, decorators: [{
|
|
4668
4668
|
type: Component,
|
|
4669
4669
|
args: [{
|
|
4670
4670
|
selector: 'app-audiodisplay',
|
|
@@ -4732,9 +4732,9 @@ class ScrollIntoViewDirective {
|
|
|
4732
4732
|
}
|
|
4733
4733
|
}
|
|
4734
4734
|
}
|
|
4735
|
-
ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4736
|
-
ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
4737
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4735
|
+
ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
4736
|
+
ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 });
|
|
4737
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
|
|
4738
4738
|
type: Directive,
|
|
4739
4739
|
args: [{
|
|
4740
4740
|
selector: "[scrollIntoViewToBottom]"
|
|
@@ -4768,8 +4768,8 @@ class Progress {
|
|
|
4768
4768
|
}
|
|
4769
4769
|
}
|
|
4770
4770
|
}
|
|
4771
|
-
Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4772
|
-
Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4771
|
+
Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4772
|
+
Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: Progress, selector: "app-sprprogress", inputs: { items: "items", selectedItemIdx: "selectedItemIdx", enableDownload: "enableDownload" }, outputs: { onRowSelect: "onRowSelect", rowSelect: "rowSelect", onShowDoneAction: "onShowDoneAction", clickDone: "clickDone", onDownloadDoneAction: "onDownloadDoneAction", clickDownloadDone: "clickDownloadDone" }, ngImport: i0, template: `
|
|
4773
4773
|
|
|
4774
4774
|
<table class="mat-typography">
|
|
4775
4775
|
<thead>
|
|
@@ -4797,7 +4797,7 @@ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
|
4797
4797
|
</tbody>
|
|
4798
4798
|
</table>
|
|
4799
4799
|
`, isInline: true, styles: [":host{overflow-x:hidden;overflow-y:scroll;padding:10pt;flex:.1 0 content;background:white;min-height:1px}\n", "table{min-height:1px;border-collapse:collapse}table,th,td{border:1px solid lightgrey;padding:.5em}\n", ".selRow{background:lightblue}\n", ".promptDescriptor{max-width:200px;text-overflow:ellipsis;overflow:hidden;white-space:nowrap}\n"], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }] });
|
|
4800
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4800
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Progress, decorators: [{
|
|
4801
4801
|
type: Component,
|
|
4802
4802
|
args: [{
|
|
4803
4803
|
selector: 'app-sprprogress',
|
|
@@ -4903,12 +4903,12 @@ class Recinstructions {
|
|
|
4903
4903
|
return riTxt;
|
|
4904
4904
|
}
|
|
4905
4905
|
}
|
|
4906
|
-
Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4907
|
-
Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4906
|
+
Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4907
|
+
Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: Recinstructions, selector: "spr-recinstructions", inputs: { recinstructions: "recinstructions", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount" }, ngImport: i0, template: `
|
|
4908
4908
|
|
|
4909
4909
|
{{displayText()}}
|
|
4910
4910
|
`, isInline: true, styles: [":host{justify-content:left;align-items:flex-start;background:white;text-align:left;font-size:1em;flex:0;width:100%}\n"] });
|
|
4911
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4911
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Recinstructions, decorators: [{
|
|
4912
4912
|
type: Component,
|
|
4913
4913
|
args: [{
|
|
4914
4914
|
selector: 'spr-recinstructions',
|
|
@@ -5096,13 +5096,13 @@ class Prompter {
|
|
|
5096
5096
|
}
|
|
5097
5097
|
}
|
|
5098
5098
|
}
|
|
5099
|
-
Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5100
|
-
Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5099
|
+
Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Prompter, deps: [{ token: i0.ElementRef }, { token: i0.Renderer2 }, { token: ProjectService }], target: i0.ɵɵFactoryTarget.Component });
|
|
5100
|
+
Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: Prompter, selector: "app-sprprompter", inputs: { projectName: "projectName", prompterHeight: "prompterHeight", promptMediaItems: "promptMediaItems" }, host: { properties: { "class.fill": "this.prompterStyleFill" } }, ngImport: i0, template: `
|
|
5101
5101
|
|
|
5102
5102
|
<!--<ng-template [ngIf]="text">{{text}}</ng-template>-->
|
|
5103
5103
|
<!-- <img *ngIf="src" #promptImage [src]="srcUrl()" [height]="prompterHeight-20" /> -->
|
|
5104
5104
|
`, isInline: true, styles: [":host{justify-content:center;align-items:center;background:white;text-align:center;line-height:1.2em;font-weight:700;flex:0 1}\n", ":host(.fill){flex:3;width:100%;height:100%;max-height:100%;max-width:100%;vertical-align:middle}\n"] });
|
|
5105
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5105
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Prompter, decorators: [{
|
|
5106
5106
|
type: Component,
|
|
5107
5107
|
args: [{
|
|
5108
5108
|
selector: 'app-sprprompter',
|
|
@@ -5276,11 +5276,11 @@ class PromptContainer {
|
|
|
5276
5276
|
}
|
|
5277
5277
|
}
|
|
5278
5278
|
}
|
|
5279
|
-
PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5280
|
-
PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5279
|
+
PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5280
|
+
PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PromptContainer, selector: "app-sprpromptcontainer", inputs: { projectName: "projectName", mediaitems: "mediaitems" }, host: { listeners: { "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "prompter", first: true, predicate: Prompter, descendants: true, static: true }], ngImport: i0, template: `
|
|
5281
5281
|
<app-sprprompter #prompter [projectName]="projectName" [promptMediaItems]="mediaitems" [style.font-size]="fontSize+'px'" [style.visibility]="prDisplay" [prompterHeight]="prompterHeight"></app-sprprompter>
|
|
5282
5282
|
`, isInline: true, styles: [":host{flex:3;padding:10pt;height:100%;max-height:100%;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px;width:100%}\n"], components: [{ type: Prompter, selector: "app-sprprompter", inputs: ["projectName", "prompterHeight", "promptMediaItems"] }] });
|
|
5283
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5283
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptContainer, decorators: [{
|
|
5284
5284
|
type: Component,
|
|
5285
5285
|
args: [{
|
|
5286
5286
|
selector: 'app-sprpromptcontainer',
|
|
@@ -5423,15 +5423,15 @@ class PromptingContainer {
|
|
|
5423
5423
|
//ev.preventDefault();
|
|
5424
5424
|
}
|
|
5425
5425
|
}
|
|
5426
|
-
PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5427
|
-
PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5426
|
+
PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5427
|
+
PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: { projectName: "projectName", promptItem: "promptItem", showPrompt: "showPrompt", selectedItemIdx: "selectedItemIdx", itemCount: "itemCount", transportActions: "transportActions" }, host: { listeners: { "touchstart": "onTouchstart($event)", "touchend": "onTouchEnd($event)", "touchmove": "onTouchMove($event)", "touchcancel": "onTouchCancel($event)" } }, ngImport: i0, template: `
|
|
5428
5428
|
<spr-recinstructions [selectedItemIdx]="selectedItemIdx" [itemCount]="itemCount"
|
|
5429
5429
|
[recinstructions]="promptItem?.recinstructions?.recinstructions"></spr-recinstructions>
|
|
5430
5430
|
<app-sprpromptcontainer [projectName]="projectName"
|
|
5431
5431
|
[mediaitems]="showPrompt?(promptItem?promptItem.mediaitems:null):null"></app-sprpromptcontainer>
|
|
5432
5432
|
|
|
5433
5433
|
`, isInline: true, styles: [":host{position:relative;flex:3;padding:10pt;justify-content:center;align-items:center;background:white;text-align:center;display:flex;flex-direction:column;min-height:0px}\n"], components: [{ type: Recinstructions, selector: "spr-recinstructions", inputs: ["recinstructions", "selectedItemIdx", "itemCount"] }, { type: PromptContainer, selector: "app-sprpromptcontainer", inputs: ["projectName", "mediaitems"] }] });
|
|
5434
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5434
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptingContainer, decorators: [{
|
|
5435
5435
|
type: Component,
|
|
5436
5436
|
args: [{
|
|
5437
5437
|
selector: 'app-sprpromptingcontainer',
|
|
@@ -5503,8 +5503,8 @@ class Prompting {
|
|
|
5503
5503
|
this.onPrevItem.emit();
|
|
5504
5504
|
}
|
|
5505
5505
|
}
|
|
5506
|
-
Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5507
|
-
Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5506
|
+
Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Prompting, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5507
|
+
Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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 }], ngImport: i0, template: `
|
|
5508
5508
|
|
|
5509
5509
|
<app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
|
|
5510
5510
|
<app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
|
|
@@ -5527,7 +5527,7 @@ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
|
|
|
5527
5527
|
|
|
5528
5528
|
|
|
5529
5529
|
`, isInline: true, styles: [":host{position:relative;margin:0;padding:0;background:lightgrey;width:100%;flex:1;min-height:0px;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "app-simpletrafficlight{margin:10px;min-height:0px;z-index:3}\n", "app-sprprogress{z-index:3}\n", "div{display:none;position:absolute;z-index:5}\n", "div.active{display:flex;position:absolute;bottom:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:5;box-sizing:border-box;background-color:#0000}\n"], components: [{ type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: ["status"] }, { type: PromptingContainer, selector: "app-sprpromptingcontainer", inputs: ["projectName", "promptItem", "showPrompt", "selectedItemIdx", "itemCount", "transportActions"] }, { type: Progress, selector: "app-sprprogress", inputs: ["items", "selectedItemIdx", "enableDownload"], outputs: ["onRowSelect", "rowSelect", "onShowDoneAction", "clickDone", "onDownloadDoneAction", "clickDownloadDone"] }, { type: AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }], directives: [{ type: i3$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
|
|
5530
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5530
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Prompting, decorators: [{
|
|
5531
5531
|
type: Component,
|
|
5532
5532
|
args: [{
|
|
5533
5533
|
selector: 'app-sprprompting',
|
|
@@ -5661,98 +5661,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
5661
5661
|
type: Output
|
|
5662
5662
|
}] } });
|
|
5663
5663
|
|
|
5664
|
-
class Float32ArrayChunkerOutStream {
|
|
5665
|
-
constructor(outStream) {
|
|
5666
|
-
this.outStream = outStream;
|
|
5667
|
-
this.bufs = new Array();
|
|
5668
|
-
this._channels = 0;
|
|
5669
|
-
this._chunkSize = 0;
|
|
5670
|
-
this.filled = 0;
|
|
5671
|
-
this.receivedFrames = 0;
|
|
5672
|
-
this.sentFrames = 0;
|
|
5673
|
-
}
|
|
5674
|
-
createBuffers() {
|
|
5675
|
-
this.bufs = new Array(this._channels);
|
|
5676
|
-
for (let ch = 0; ch < this._channels; ch++) {
|
|
5677
|
-
this.bufs[ch] = new Float32Array(this._chunkSize);
|
|
5678
|
-
}
|
|
5679
|
-
}
|
|
5680
|
-
set chunkSize(chunkSize) {
|
|
5681
|
-
this._chunkSize = chunkSize;
|
|
5682
|
-
this.createBuffers();
|
|
5683
|
-
}
|
|
5684
|
-
set channels(channels) {
|
|
5685
|
-
this._channels = channels;
|
|
5686
|
-
this.createBuffers();
|
|
5687
|
-
}
|
|
5688
|
-
write(buffers) {
|
|
5689
|
-
let copied = 0;
|
|
5690
|
-
if (buffers.length > 0) {
|
|
5691
|
-
let buffersLen = buffers[0].length;
|
|
5692
|
-
this.receivedFrames += buffersLen;
|
|
5693
|
-
let avail = buffersLen;
|
|
5694
|
-
// Fill out buffers until all values copied
|
|
5695
|
-
while (avail > 0) {
|
|
5696
|
-
let toFill = this._chunkSize - this.filled;
|
|
5697
|
-
if (toFill > avail) {
|
|
5698
|
-
toFill = avail;
|
|
5699
|
-
}
|
|
5700
|
-
let sliceEnd = copied + toFill;
|
|
5701
|
-
// Firefox on Android sends only the first channel
|
|
5702
|
-
for (let ch = 0; ch < buffersLen; ch++) {
|
|
5703
|
-
if (buffers[ch]) {
|
|
5704
|
-
let cpPrt = buffers[ch].slice(copied, sliceEnd);
|
|
5705
|
-
let buf = this.bufs[ch];
|
|
5706
|
-
buf.set(cpPrt, this.filled);
|
|
5707
|
-
}
|
|
5708
|
-
}
|
|
5709
|
-
copied += toFill;
|
|
5710
|
-
avail -= toFill;
|
|
5711
|
-
this.filled += toFill;
|
|
5712
|
-
if (this.filled == this._chunkSize) {
|
|
5713
|
-
this.outStream.write(this.bufs);
|
|
5714
|
-
this.sentFrames += this.filled;
|
|
5715
|
-
this.filled = 0;
|
|
5716
|
-
}
|
|
5717
|
-
}
|
|
5718
|
-
}
|
|
5719
|
-
return copied;
|
|
5720
|
-
}
|
|
5721
|
-
flush() {
|
|
5722
|
-
if (this.filled > 0) {
|
|
5723
|
-
let restBufs = new Array(this._channels);
|
|
5724
|
-
for (let ch = 0; ch < this._channels; ch++) {
|
|
5725
|
-
restBufs[ch] = this.bufs[ch].slice(0, this.filled);
|
|
5726
|
-
}
|
|
5727
|
-
this.outStream.write(restBufs);
|
|
5728
|
-
this.outStream.flush();
|
|
5729
|
-
this.sentFrames += this.filled;
|
|
5730
|
-
this.filled = 0;
|
|
5731
|
-
}
|
|
5732
|
-
}
|
|
5733
|
-
close() {
|
|
5734
|
-
this.outStream.close();
|
|
5735
|
-
}
|
|
5736
|
-
}
|
|
5737
|
-
|
|
5738
|
-
class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream {
|
|
5739
|
-
constructor(outStream, chunkDurationSeconds) {
|
|
5740
|
-
super(outStream);
|
|
5741
|
-
this.chunkDurationSeconds = chunkDurationSeconds;
|
|
5742
|
-
this.sampleRate = null;
|
|
5743
|
-
this.sequenceAudioFloat32OutStream = outStream;
|
|
5744
|
-
}
|
|
5745
|
-
setFormat(channels, sampleRate) {
|
|
5746
|
-
this.channels = channels;
|
|
5747
|
-
this.sampleRate = sampleRate;
|
|
5748
|
-
this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
|
|
5749
|
-
this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
|
|
5750
|
-
}
|
|
5751
|
-
nextStream() {
|
|
5752
|
-
this.sequenceAudioFloat32OutStream.nextStream();
|
|
5753
|
-
}
|
|
5754
|
-
}
|
|
5755
|
-
|
|
5756
5664
|
class SessionFinishedDialog {
|
|
5757
5665
|
constructor(dialogRef, data) {
|
|
5758
5666
|
this.dialogRef = dialogRef;
|
|
@@ -5762,8 +5670,8 @@ class SessionFinishedDialog {
|
|
|
5762
5670
|
this.dialogRef.close();
|
|
5763
5671
|
}
|
|
5764
5672
|
}
|
|
5765
|
-
SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5766
|
-
SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5673
|
+
SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionFinishedDialog, deps: [{ token: i1$2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
5674
|
+
SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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>
|
|
5767
5675
|
<div mat-dialog-content>
|
|
5768
5676
|
|
|
5769
5677
|
<p>Thank you! The recording session is complete.</p>
|
|
@@ -5773,7 +5681,7 @@ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
5773
5681
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
5774
5682
|
</div>
|
|
5775
5683
|
`, isInline: true, components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3$2.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"] }], directives: [{ type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
|
|
5776
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5684
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionFinishedDialog, decorators: [{
|
|
5777
5685
|
type: Component,
|
|
5778
5686
|
args: [{
|
|
5779
5687
|
selector: 'spr-session-finished-dialog',
|
|
@@ -5804,8 +5712,8 @@ class MessageDialog {
|
|
|
5804
5712
|
this.dialogRef.close();
|
|
5805
5713
|
}
|
|
5806
5714
|
}
|
|
5807
|
-
MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5808
|
-
MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5715
|
+
MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MessageDialog, deps: [{ token: i1$2.MatDialogRef }, { token: MAT_DIALOG_DATA }], target: i0.ɵɵFactoryTarget.Component });
|
|
5716
|
+
MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: MessageDialog, selector: "msg-dialog", ngImport: i0, template: `<h1 mat-dialog-title><mat-icon *ngIf="data.type==='error'" [style.color]="'red'">error</mat-icon>
|
|
5809
5717
|
<mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
|
|
5810
5718
|
<div mat-dialog-content>
|
|
5811
5719
|
|
|
@@ -5817,7 +5725,7 @@ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
5817
5725
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
5818
5726
|
</div>
|
|
5819
5727
|
`, isInline: true, components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }, { type: i3$2.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"] }], directives: [{ type: i1$2.MatDialogTitle, selector: "[mat-dialog-title], [matDialogTitle]", inputs: ["id"], exportAs: ["matDialogTitle"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i1$2.MatDialogContent, selector: "[mat-dialog-content], mat-dialog-content, [matDialogContent]" }, { type: i1$2.MatDialogActions, selector: "[mat-dialog-actions], mat-dialog-actions, [matDialogActions]" }] });
|
|
5820
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5728
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MessageDialog, decorators: [{
|
|
5821
5729
|
type: Component,
|
|
5822
5730
|
args: [{
|
|
5823
5731
|
selector: 'msg-dialog',
|
|
@@ -6157,14 +6065,14 @@ class LevelBar {
|
|
|
6157
6065
|
}
|
|
6158
6066
|
}
|
|
6159
6067
|
}
|
|
6160
|
-
LevelBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6161
|
-
LevelBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6068
|
+
LevelBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LevelBar, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
6069
|
+
LevelBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: LevelBar, selector: "audio-levelbar", inputs: { streamingMode: "streamingMode", displayLevelInfos: "displayLevelInfos" }, host: { listeners: { "scroll": "onScroll($event)", "window:resize": "onResize($event)" } }, viewQueries: [{ propertyName: "virtualCanvasRef", first: true, predicate: ["virtualCanvas"], descendants: true, static: true }, { propertyName: "liveLevelCanvasRef", first: true, predicate: ["levelbar"], descendants: true, static: true }, { propertyName: "markerCanvasRef", first: true, predicate: ["markerCanvas"], descendants: true, static: true }], ngImport: i0, template: `
|
|
6162
6070
|
<div #virtualCanvas>
|
|
6163
6071
|
<canvas #levelbar></canvas>
|
|
6164
6072
|
<canvas #markerCanvas></canvas>
|
|
6165
6073
|
</div>
|
|
6166
6074
|
`, isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n", "div{top:0;left:0;width:100%;height:100%;box-sizing:border-box}\n", "canvas{top:0;left:0;width:100%;height:100%;position:absolute}\n"] });
|
|
6167
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6075
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LevelBar, decorators: [{
|
|
6168
6076
|
type: Component,
|
|
6169
6077
|
args: [{
|
|
6170
6078
|
selector: 'audio-levelbar',
|
|
@@ -6227,14 +6135,14 @@ class StatusDisplay {
|
|
|
6227
6135
|
this.statusWaiting = false;
|
|
6228
6136
|
}
|
|
6229
6137
|
}
|
|
6230
|
-
StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6231
|
-
StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6138
|
+
StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6139
|
+
StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: { statusAlertType: "statusAlertType", statusMsg: "statusMsg", statusWaiting: "statusWaiting" }, ngImport: i0, template: `
|
|
6232
6140
|
<p matTooltip="Status">
|
|
6233
6141
|
<mat-progress-spinner *ngIf="statusWaiting" color="black" mode="indeterminate" [diameter]="30" [strokeWidth]="5"></mat-progress-spinner><mat-icon *ngIf="statusAlertType==='error'" style="color:red">report_problem</mat-icon>
|
|
6234
6142
|
{{statusMsg}}
|
|
6235
6143
|
</p>
|
|
6236
6144
|
`, isInline: true, styles: [":host{display:inline;text-align:left;font-size:smaller}\n", "p{padding:4px;white-space:nowrap;display:inline-block}\n", "mat-progress-spinner{color:#000;display:inline-block}\n", "span{color:red}\n"], components: [{ type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
6237
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6145
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: StatusDisplay, decorators: [{
|
|
6238
6146
|
type: Component,
|
|
6239
6147
|
args: [{
|
|
6240
6148
|
selector: 'app-sprstatusdisplay',
|
|
@@ -6319,11 +6227,11 @@ class UploadStatus {
|
|
|
6319
6227
|
return this._status;
|
|
6320
6228
|
}
|
|
6321
6229
|
}
|
|
6322
|
-
UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6323
|
-
UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6230
|
+
UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6231
|
+
UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: UploadStatus, selector: "app-uploadstatus", inputs: { value: "value", awaitNewUpload: "awaitNewUpload", status: "status" }, ngImport: i0, template: `
|
|
6324
6232
|
<mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
|
|
6325
6233
|
`, isInline: true, styles: [":host{flex:1;text-align:left}\n", "mat-progress-spinner{display:inline-block}\n"], components: [{ type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
6326
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6234
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UploadStatus, decorators: [{
|
|
6327
6235
|
type: Component,
|
|
6328
6236
|
args: [{
|
|
6329
6237
|
selector: 'app-uploadstatus',
|
|
@@ -6351,11 +6259,11 @@ class ProgressDisplay {
|
|
|
6351
6259
|
this.progressMsg = '[itemcode]';
|
|
6352
6260
|
}
|
|
6353
6261
|
}
|
|
6354
|
-
ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6355
|
-
ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6262
|
+
ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6263
|
+
ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
|
|
6356
6264
|
<p>{{progressMsg}}</p>
|
|
6357
6265
|
`, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] });
|
|
6358
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6266
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProgressDisplay, decorators: [{
|
|
6359
6267
|
type: Component,
|
|
6360
6268
|
args: [{
|
|
6361
6269
|
selector: 'app-sprprogressdisplay',
|
|
@@ -6455,8 +6363,8 @@ class TransportPanel {
|
|
|
6455
6363
|
}
|
|
6456
6364
|
}
|
|
6457
6365
|
}
|
|
6458
|
-
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6459
|
-
TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6366
|
+
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TransportPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6367
|
+
TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: TransportPanel, selector: "app-sprtransport", inputs: { readonly: "readonly", actions: "actions", navigationEnabled: "navigationEnabled", pausingEnabled: "pausingEnabled" }, ngImport: i0, template: `
|
|
6460
6368
|
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
6461
6369
|
mat-raised-button>
|
|
6462
6370
|
<mat-icon>chevron_left</mat-icon>
|
|
@@ -6477,7 +6385,7 @@ TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
|
6477
6385
|
</button>
|
|
6478
6386
|
|
|
6479
6387
|
`, isInline: true, styles: [":host{flex:20;align-self:center;width:100%;text-align:center;align-content:center;margin:0}\n", "div{display:inline;flex:0}\n", "button{touch-action:manipulation}\n"], components: [{ type: i3$2.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"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
|
|
6480
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6388
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TransportPanel, decorators: [{
|
|
6481
6389
|
type: Component,
|
|
6482
6390
|
args: [{
|
|
6483
6391
|
selector: 'app-sprtransport',
|
|
@@ -6529,6 +6437,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
6529
6437
|
}], pausingEnabled: [{
|
|
6530
6438
|
type: Input
|
|
6531
6439
|
}] } });
|
|
6440
|
+
class WakeLockIndicator {
|
|
6441
|
+
constructor() {
|
|
6442
|
+
this._screenLocked = false;
|
|
6443
|
+
}
|
|
6444
|
+
set screenLocked(screenLock) {
|
|
6445
|
+
this._screenLocked = screenLock;
|
|
6446
|
+
}
|
|
6447
|
+
}
|
|
6448
|
+
WakeLockIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6449
|
+
WakeLockIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
|
|
6450
|
+
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
6451
|
+
`, isInline: true, components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
6452
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WakeLockIndicator, decorators: [{
|
|
6453
|
+
type: Component,
|
|
6454
|
+
args: [{
|
|
6455
|
+
selector: 'app-wakelockindicator',
|
|
6456
|
+
template: `
|
|
6457
|
+
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
6458
|
+
`,
|
|
6459
|
+
styles: []
|
|
6460
|
+
}]
|
|
6461
|
+
}], ctorParameters: function () { return []; }, propDecorators: { screenLocked: [{
|
|
6462
|
+
type: Input
|
|
6463
|
+
}] } });
|
|
6532
6464
|
class ReadyStateIndicator {
|
|
6533
6465
|
constructor() {
|
|
6534
6466
|
this._ready = true;
|
|
@@ -6544,16 +6476,16 @@ class ReadyStateIndicator {
|
|
|
6544
6476
|
return this._ready;
|
|
6545
6477
|
}
|
|
6546
6478
|
}
|
|
6547
|
-
ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6548
|
-
ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6549
|
-
|
|
6479
|
+
ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6480
|
+
ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
|
|
6481
|
+
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
6550
6482
|
`, isInline: true, components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
6551
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6483
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ReadyStateIndicator, decorators: [{
|
|
6552
6484
|
type: Component,
|
|
6553
6485
|
args: [{
|
|
6554
6486
|
selector: 'app-readystateindicator',
|
|
6555
6487
|
template: `
|
|
6556
|
-
|
|
6488
|
+
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
6557
6489
|
`,
|
|
6558
6490
|
styles: []
|
|
6559
6491
|
}]
|
|
@@ -6574,8 +6506,8 @@ class ControlPanel {
|
|
|
6574
6506
|
return this._ready;
|
|
6575
6507
|
}
|
|
6576
6508
|
}
|
|
6577
|
-
ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6578
|
-
ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6509
|
+
ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ControlPanel, deps: [{ token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
6510
|
+
ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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 }], ngImport: i0, template: `
|
|
6579
6511
|
<div fxHide.xs fxLayout="row" >
|
|
6580
6512
|
<app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
6581
6513
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
@@ -6595,8 +6527,8 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
6595
6527
|
<app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
6596
6528
|
|
|
6597
6529
|
</div>
|
|
6598
|
-
`, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height
|
|
6599
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6530
|
+
`, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], components: [{ type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }, { type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }], directives: [{ type: i3$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.FlexFillDirective, selector: "[fxFill], [fxFlexFill]" }, { type: i8.DefaultFlexAlignDirective, selector: " [fxFlexAlign], [fxFlexAlign.xs], [fxFlexAlign.sm], [fxFlexAlign.md], [fxFlexAlign.lg], [fxFlexAlign.xl], [fxFlexAlign.lt-sm], [fxFlexAlign.lt-md], [fxFlexAlign.lt-lg], [fxFlexAlign.lt-xl], [fxFlexAlign.gt-xs], [fxFlexAlign.gt-sm], [fxFlexAlign.gt-md], [fxFlexAlign.gt-lg]", inputs: ["fxFlexAlign", "fxFlexAlign.xs", "fxFlexAlign.sm", "fxFlexAlign.md", "fxFlexAlign.lg", "fxFlexAlign.xl", "fxFlexAlign.lt-sm", "fxFlexAlign.lt-md", "fxFlexAlign.lt-lg", "fxFlexAlign.lt-xl", "fxFlexAlign.gt-xs", "fxFlexAlign.gt-sm", "fxFlexAlign.gt-md", "fxFlexAlign.gt-lg"] }] });
|
|
6531
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ControlPanel, decorators: [{
|
|
6600
6532
|
type: Component,
|
|
6601
6533
|
args: [{
|
|
6602
6534
|
selector: 'app-sprcontrolpanel',
|
|
@@ -7070,8 +7002,8 @@ class RecordingItemControls {
|
|
|
7070
7002
|
// this.status = 'ERROR';
|
|
7071
7003
|
}
|
|
7072
7004
|
}
|
|
7073
|
-
RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7074
|
-
RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
7005
|
+
RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingItemControls, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
7006
|
+
RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: { audioSignalCollapsed: "audioSignalCollapsed", enableDownload: "enableDownload", peakDbLvl: "peakDbLvl", agc: "agc", audioLoaded: "audioLoaded", playStartAction: "playStartAction", playStopAction: "playStopAction", displayLevelInfos: "displayLevelInfos" }, outputs: { onShowRecordingDetails: "onShowRecordingDetails", onDownloadRecording: "onDownloadRecording" }, ngImport: i0, template: `
|
|
7075
7007
|
<button matTooltip="Start playback" (click)="playStartAction?.perform()"
|
|
7076
7008
|
[disabled]="playStartAction?.disabled"
|
|
7077
7009
|
[style.color]="playStartAction?.disabled ? 'grey' : 'green'">
|
|
@@ -7094,7 +7026,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
7094
7026
|
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
7095
7027
|
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
7096
7028
|
`, isInline: true, styles: [":host{flex:0;width:100%;background:darkgray;padding:4px;box-sizing:border-box;height:100%;display:flex;flex-direction:row;flex-wrap:nowrap}\n", "span{flex:0;font-weight:700;display:inline-block;white-space:nowrap;box-sizing:border-box}\n", "button{touch-action:manipulation}\n"], components: [{ type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }, { type: i3$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }], pipes: { "number": i4.DecimalPipe } });
|
|
7097
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
7029
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingItemControls, decorators: [{
|
|
7098
7030
|
type: Component,
|
|
7099
7031
|
args: [{
|
|
7100
7032
|
selector: 'spr-recordingitemcontrols',
|
|
@@ -7236,14 +7168,14 @@ class RecordingItemDisplay {
|
|
|
7236
7168
|
this.changeDetectorRef.detectChanges();
|
|
7237
7169
|
}
|
|
7238
7170
|
}
|
|
7239
|
-
RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7240
|
-
RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
7171
|
+
RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingItemDisplay, deps: [{ token: i0.ElementRef }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
7172
|
+
RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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 }], ngImport: i0, template: `
|
|
7241
7173
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
7242
7174
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
|
|
7243
7175
|
<spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
|
|
7244
7176
|
</div>
|
|
7245
7177
|
`, isInline: true, styles: ["div{width:100%;background:darkgray;padding:4px;box-sizing:border-box;flex-wrap:nowrap}\n", "audio-levelbar{box-sizing:border-box}\n"], components: [{ type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos"] }, { type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3$1.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }] });
|
|
7246
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
7178
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingItemDisplay, decorators: [{
|
|
7247
7179
|
type: Component,
|
|
7248
7180
|
args: [{
|
|
7249
7181
|
selector: 'spr-recordingitemdisplay',
|
|
@@ -7288,23 +7220,324 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
7288
7220
|
type: Input
|
|
7289
7221
|
}] } });
|
|
7290
7222
|
|
|
7223
|
+
class Float32ArrayChunkerOutStream {
|
|
7224
|
+
constructor(outStream) {
|
|
7225
|
+
this.outStream = outStream;
|
|
7226
|
+
this.bufs = new Array();
|
|
7227
|
+
this._channels = 0;
|
|
7228
|
+
this._chunkSize = 0;
|
|
7229
|
+
this.filled = 0;
|
|
7230
|
+
this.receivedFrames = 0;
|
|
7231
|
+
this.sentFrames = 0;
|
|
7232
|
+
}
|
|
7233
|
+
createBuffers() {
|
|
7234
|
+
this.bufs = new Array(this._channels);
|
|
7235
|
+
for (let ch = 0; ch < this._channels; ch++) {
|
|
7236
|
+
this.bufs[ch] = new Float32Array(this._chunkSize);
|
|
7237
|
+
}
|
|
7238
|
+
}
|
|
7239
|
+
set chunkSize(chunkSize) {
|
|
7240
|
+
this._chunkSize = chunkSize;
|
|
7241
|
+
this.createBuffers();
|
|
7242
|
+
}
|
|
7243
|
+
get chunkSize() {
|
|
7244
|
+
return this._chunkSize;
|
|
7245
|
+
}
|
|
7246
|
+
set channels(channels) {
|
|
7247
|
+
this._channels = channels;
|
|
7248
|
+
this.createBuffers();
|
|
7249
|
+
}
|
|
7250
|
+
get channels() {
|
|
7251
|
+
return this._channels;
|
|
7252
|
+
}
|
|
7253
|
+
available() {
|
|
7254
|
+
return this._chunkSize - this.filled;
|
|
7255
|
+
}
|
|
7256
|
+
write(buffers) {
|
|
7257
|
+
let copied = 0;
|
|
7258
|
+
if (buffers.length > 0) {
|
|
7259
|
+
let buffersLen = buffers[0].length;
|
|
7260
|
+
this.receivedFrames += buffersLen;
|
|
7261
|
+
let avail = buffersLen;
|
|
7262
|
+
// Fill out buffers until all values copied
|
|
7263
|
+
while (avail > 0) {
|
|
7264
|
+
let toFill = this._chunkSize - this.filled;
|
|
7265
|
+
if (toFill > avail) {
|
|
7266
|
+
toFill = avail;
|
|
7267
|
+
}
|
|
7268
|
+
let sliceEnd = copied + toFill;
|
|
7269
|
+
// Firefox on Android sends only the first channel
|
|
7270
|
+
for (let ch = 0; ch < buffersLen; ch++) {
|
|
7271
|
+
if (buffers[ch]) {
|
|
7272
|
+
let cpPrt = buffers[ch].slice(copied, sliceEnd);
|
|
7273
|
+
let buf = this.bufs[ch];
|
|
7274
|
+
buf.set(cpPrt, this.filled);
|
|
7275
|
+
}
|
|
7276
|
+
}
|
|
7277
|
+
copied += toFill;
|
|
7278
|
+
avail -= toFill;
|
|
7279
|
+
this.filled += toFill;
|
|
7280
|
+
if (this.filled == this._chunkSize) {
|
|
7281
|
+
this.outStream.write(this.bufs);
|
|
7282
|
+
this.sentFrames += this.filled;
|
|
7283
|
+
this.filled = 0;
|
|
7284
|
+
}
|
|
7285
|
+
}
|
|
7286
|
+
}
|
|
7287
|
+
return copied;
|
|
7288
|
+
}
|
|
7289
|
+
flush() {
|
|
7290
|
+
if (this.filled > 0) {
|
|
7291
|
+
let restBufs = new Array(this._channels);
|
|
7292
|
+
for (let ch = 0; ch < this._channels; ch++) {
|
|
7293
|
+
restBufs[ch] = this.bufs[ch].slice(0, this.filled);
|
|
7294
|
+
}
|
|
7295
|
+
this.outStream.write(restBufs);
|
|
7296
|
+
this.outStream.flush();
|
|
7297
|
+
this.sentFrames += this.filled;
|
|
7298
|
+
this.filled = 0;
|
|
7299
|
+
}
|
|
7300
|
+
}
|
|
7301
|
+
close() {
|
|
7302
|
+
this.outStream.close();
|
|
7303
|
+
}
|
|
7304
|
+
}
|
|
7305
|
+
|
|
7306
|
+
class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream {
|
|
7307
|
+
constructor(outStream, chunkDurationSeconds) {
|
|
7308
|
+
super(outStream);
|
|
7309
|
+
this.chunkDurationSeconds = chunkDurationSeconds;
|
|
7310
|
+
this.sampleRate = null;
|
|
7311
|
+
this.sequenceAudioFloat32OutStream = outStream;
|
|
7312
|
+
}
|
|
7313
|
+
setFormat(channels, sampleRate) {
|
|
7314
|
+
console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: " + channels + ",sampleRate: " + sampleRate + ")");
|
|
7315
|
+
this.channels = channels;
|
|
7316
|
+
this.sampleRate = sampleRate;
|
|
7317
|
+
this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
|
|
7318
|
+
console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: " + this.chunkSize);
|
|
7319
|
+
this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
|
|
7320
|
+
}
|
|
7321
|
+
nextStream() {
|
|
7322
|
+
this.sequenceAudioFloat32OutStream.nextStream();
|
|
7323
|
+
}
|
|
7324
|
+
}
|
|
7325
|
+
/**
|
|
7326
|
+
* Streams a SequenceAudioFloat32OutStream to multiple streams
|
|
7327
|
+
*/
|
|
7328
|
+
class SequenceAudioFloat32OutStreamMultiplier {
|
|
7329
|
+
constructor() {
|
|
7330
|
+
this._sequenceAudioFloat32OutStreams = new Array();
|
|
7331
|
+
}
|
|
7332
|
+
get sequenceAudioFloat32OutStreams() {
|
|
7333
|
+
return this._sequenceAudioFloat32OutStreams;
|
|
7334
|
+
}
|
|
7335
|
+
setFormat(channels, sampleRate) {
|
|
7336
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7337
|
+
os.setFormat(channels, sampleRate);
|
|
7338
|
+
}
|
|
7339
|
+
}
|
|
7340
|
+
nextStream() {
|
|
7341
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7342
|
+
os.nextStream();
|
|
7343
|
+
}
|
|
7344
|
+
}
|
|
7345
|
+
close() {
|
|
7346
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7347
|
+
os.close();
|
|
7348
|
+
}
|
|
7349
|
+
}
|
|
7350
|
+
flush() {
|
|
7351
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7352
|
+
os.flush();
|
|
7353
|
+
}
|
|
7354
|
+
}
|
|
7355
|
+
write(buffers) {
|
|
7356
|
+
let toWrite = buffers.length;
|
|
7357
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7358
|
+
os.write(buffers);
|
|
7359
|
+
}
|
|
7360
|
+
return toWrite;
|
|
7361
|
+
}
|
|
7362
|
+
}
|
|
7363
|
+
|
|
7364
|
+
const WAKE_LOCK_VIDEO_MP4_URI = 'data:video/mp4;base64,AAAAIGZ0eXBpc29tAAACAGlzb21pc28yYXZjMW1wNDEAAAAIZnJlZQAAG31tZGF0AAACrgYF//+q3EXpvebZSLeWLNgg2SPu73gyNjQgLSBjb3JlIDE1NSByMjkxNyAwYTg0ZDk4IC0gSC4yNjQvTVBFRy00IEFWQyBjb2RlYyAtIENvcHlsZWZ0IDIwMDMtMjAxOCAtIGh0dHA6Ly93d3cudmlkZW9sYW4ub3JnL3gyNjQuaHRtbCAtIG9wdGlvbnM6IGNhYmFjPTEgcmVmPTMgZGVibG9jaz0xOjA6MCBhbmFseXNlPTB4MzoweDExMyBtZT1oZXggc3VibWU9NyBwc3k9MSBwc3lfcmQ9MS4wMDowLjAwIG1peGVkX3JlZj0xIG1lX3JhbmdlPTE2IGNocm9tYV9tZT0xIHRyZWxsaXM9MSA4eDhkY3Q9MSBjcW09MCBkZWFkem9uZT0yMSwxMSBmYXN0X3Bza2lwPTEgY2hyb21hX3FwX29mZnNldD0tMiB0aHJlYWRzPTIgbG9va2FoZWFkX3RocmVhZHM9MSBzbGljZWRfdGhyZWFkcz0wIG5yPTAgZGVjaW1hdGU9MSBpbnRlcmxhY2VkPTAgYmx1cmF5X2NvbXBhdD0wIGNvbnN0cmFpbmVkX2ludHJhPTAgYmZyYW1lcz0zIGJfcHlyYW1pZD0yIGJfYWRhcHQ9MSBiX2JpYXM9MCBkaXJlY3Q9MSB3ZWlnaHRiPTEgb3Blbl9nb3A9MCB3ZWlnaHRwPTIga2V5aW50PTI1MCBrZXlpbnRfbWluPTI1IHNjZW5lY3V0PTQwIGludHJhX3JlZnJlc2g9MCByY19sb29rYWhlYWQ9NDAgcmM9Y3JmIG1idHJlZT0xIGNyZj0yMy4wIHFjb21wPTAuNjAgcXBtaW49MCBxcG1heD02OSBxcHN0ZXA9NCBpcF9yYXRpbz0xLjQwIGFxPTE6MS4wMACAAAAAJ2WIhAA7//73Tr8Cm1TCKgOSVwr2yqQmr/tBF6luwQMZUeHtiyA0IQAAAAtBmiRsQ7/+qZYe8N4CAExhdmM1OC41NC4xMDAAQiAIwRg4AAAACEGeQniF/wMzIRAEYIwcIRAEYIwcAAAACAGeYXRCvwQkIRAEYIwcIRAEYIwcAAAACAGeY2pCvwQlIRAEYIwcIRAEYIwcAAAAEUGaaEmo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AAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAKAAAAAAEAAAQAAAAAAQAAAAAAAAABAAACAAAAAAEAAAoAAAAAAQAABAAAAAABAAAAAAAAAAEAAAIAAAAAAQAACgAAAAABAAAEAAAAAAEAAAAAAAAAAQAAAgAAAAABAAAEAAAAAChzdHNjAAAAAAAAAAIAAAABAAAAAgAAAAEAAAACAAAAAQAAAAEAAAP8c3RzegAAAAAAAAAAAAAA+gAAAt0AAAAPAAAADAAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABUAAAAOAAAADAAAAAwAAAAVAAAADgAAAAwAAAAMAAAAFQAAAA4AAAAMAAAADAAAABQAAAP0c3RjbwAAAAAAAAD5AAAAMAAAAzMA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AAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAXAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAA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';
|
|
7365
|
+
|
|
7366
|
+
/**
|
|
7367
|
+
* Utility to prevent devices from screen lock.
|
|
7368
|
+
* If supported uses the HTML5 wake lock API, if not, plays an invisible video.
|
|
7369
|
+
*
|
|
7370
|
+
* Note: I've used the GitHub project richtr/nosleep.js for that. The worked in most cases, but failed sometimes on an
|
|
7371
|
+
* Android smartphone.
|
|
7372
|
+
*/
|
|
7373
|
+
class WakeLockManager {
|
|
7374
|
+
constructor() {
|
|
7375
|
+
var _a;
|
|
7376
|
+
this.wakeLockApiSupported = false;
|
|
7377
|
+
this.wakeLockRetryCount = 0;
|
|
7378
|
+
this.randomSeekRequired = false;
|
|
7379
|
+
this._behaviorSubject = new BehaviorSubject(false);
|
|
7380
|
+
this.VIDEO_LENGTH = 10;
|
|
7381
|
+
this.wakeLockApiSupported = ('wakeLock' in navigator);
|
|
7382
|
+
console.debug("Wake lock API supported: " + this.wakeLockApiSupported);
|
|
7383
|
+
this.userAgent = UserAgentBuilder.userAgent();
|
|
7384
|
+
this.randomSeekRequired = (((_a = this.userAgent) === null || _a === void 0 ? void 0 : _a.detectedBrowser) === Browser$1.Safari);
|
|
7385
|
+
}
|
|
7386
|
+
get behaviorSubject() {
|
|
7387
|
+
return this._behaviorSubject;
|
|
7388
|
+
}
|
|
7389
|
+
enableWakeLock() {
|
|
7390
|
+
if (this.wakeLockApiSupported) {
|
|
7391
|
+
//@ts-ignore
|
|
7392
|
+
navigator.wakeLock.request('screen').then((wls) => {
|
|
7393
|
+
this.wakeLockSentinel = wls;
|
|
7394
|
+
this.wakeLockRetryCount = 0;
|
|
7395
|
+
console.debug('Wake lock screen request successful.');
|
|
7396
|
+
this._behaviorSubject.next(true);
|
|
7397
|
+
}).catch((reason) => {
|
|
7398
|
+
console.error('Wakelock failed: ' + reason);
|
|
7399
|
+
this._behaviorSubject.error(reason);
|
|
7400
|
+
});
|
|
7401
|
+
}
|
|
7402
|
+
else {
|
|
7403
|
+
if (!this.mp4VideoElement) {
|
|
7404
|
+
this.mp4VideoElement = document.createElement('video');
|
|
7405
|
+
this.mp4VideoElement.loop = !this.randomSeekRequired;
|
|
7406
|
+
this.mp4VideoElement.playsInline = true;
|
|
7407
|
+
this.mp4VideoElement.src = WAKE_LOCK_VIDEO_MP4_URI;
|
|
7408
|
+
this.mp4VideoElement.addEventListener('play', (ev) => {
|
|
7409
|
+
console.debug('Wake lock video playing...');
|
|
7410
|
+
this._behaviorSubject.next(true);
|
|
7411
|
+
});
|
|
7412
|
+
this.mp4VideoElement.addEventListener('ended', (ev) => {
|
|
7413
|
+
console.debug('Wake lock video ended.');
|
|
7414
|
+
this._behaviorSubject.next(false);
|
|
7415
|
+
});
|
|
7416
|
+
this.mp4VideoElement.addEventListener('pause', (ev) => {
|
|
7417
|
+
console.debug('Wake lock video pause.');
|
|
7418
|
+
this._behaviorSubject.next(false);
|
|
7419
|
+
});
|
|
7420
|
+
if (this.randomSeekRequired) {
|
|
7421
|
+
this.mp4VideoElement.addEventListener('timeupdate', (ev) => {
|
|
7422
|
+
if (this.randomSeekRequired && this.mp4VideoElement) {
|
|
7423
|
+
let thirdVideoLen = this.VIDEO_LENGTH / 3;
|
|
7424
|
+
if (this.mp4VideoElement.currentTime > thirdVideoLen * 2) {
|
|
7425
|
+
let newPos = (thirdVideoLen * Math.random());
|
|
7426
|
+
//console.debug('Wake lock random seek to '+newPos+'s');
|
|
7427
|
+
this.mp4VideoElement.currentTime = newPos;
|
|
7428
|
+
}
|
|
7429
|
+
}
|
|
7430
|
+
});
|
|
7431
|
+
}
|
|
7432
|
+
this.mp4VideoElement.addEventListener('error', (ev) => {
|
|
7433
|
+
console.debug('Wake lock video error: ' + ev.message);
|
|
7434
|
+
this._behaviorSubject.error(ev.error);
|
|
7435
|
+
});
|
|
7436
|
+
console.debug('Added listeners to wake lock video.');
|
|
7437
|
+
}
|
|
7438
|
+
this.startWakeLockVideo();
|
|
7439
|
+
}
|
|
7440
|
+
}
|
|
7441
|
+
startWakeLockVideo() {
|
|
7442
|
+
if (this.mp4VideoElement) {
|
|
7443
|
+
this.mp4VideoElement.play().then(() => {
|
|
7444
|
+
this.wakeLockRetryCount = 0;
|
|
7445
|
+
}).catch((err) => {
|
|
7446
|
+
console.debug('Failed starting wake lock video!');
|
|
7447
|
+
if (this.wakeLockRetryCount < 1) {
|
|
7448
|
+
window.setTimeout(() => {
|
|
7449
|
+
this.wakeLockRetryCount++;
|
|
7450
|
+
console.debug('Retry wake lock video #' + this.wakeLockRetryCount);
|
|
7451
|
+
this.startWakeLockVideo();
|
|
7452
|
+
}, 4000);
|
|
7453
|
+
}
|
|
7454
|
+
else {
|
|
7455
|
+
console.debug('Giving up to try to start wake lock video.');
|
|
7456
|
+
}
|
|
7457
|
+
});
|
|
7458
|
+
}
|
|
7459
|
+
}
|
|
7460
|
+
disableWakeLock() {
|
|
7461
|
+
if (this.wakeLockApiSupported) {
|
|
7462
|
+
this.wakeLockSentinel.release().then(() => {
|
|
7463
|
+
console.debug('Wake lock release successful.');
|
|
7464
|
+
this._behaviorSubject.next(false);
|
|
7465
|
+
}).catch((reason) => {
|
|
7466
|
+
console.error('Wakelock release failed: ' + reason);
|
|
7467
|
+
this._behaviorSubject.error(reason);
|
|
7468
|
+
});
|
|
7469
|
+
}
|
|
7470
|
+
else {
|
|
7471
|
+
if (this.mp4VideoElement) {
|
|
7472
|
+
this.mp4VideoElement.pause();
|
|
7473
|
+
}
|
|
7474
|
+
}
|
|
7475
|
+
}
|
|
7476
|
+
}
|
|
7477
|
+
|
|
7291
7478
|
const FORCE_REQUEST_AUDIO_PERMISSIONS = false;
|
|
7292
7479
|
const RECFILE_API_CTX = 'recfile';
|
|
7293
7480
|
const MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour
|
|
7294
7481
|
const LEVEL_BAR_INTERVALL_SECONDS = 0.1; // 100ms
|
|
7295
|
-
|
|
7296
|
-
|
|
7482
|
+
const NOSLEEP_VIDEO_TITLE = 'No Sleep';
|
|
7483
|
+
class ChunkManager {
|
|
7484
|
+
constructor(chunkAudioBufferReceiver) {
|
|
7485
|
+
this.chunkAudioBufferReceiver = chunkAudioBufferReceiver;
|
|
7486
|
+
this.channels = 0;
|
|
7487
|
+
this.sampleRate = -1;
|
|
7488
|
+
this.chunkIdx = 0;
|
|
7489
|
+
}
|
|
7490
|
+
set recordingFile(value) {
|
|
7491
|
+
this._rf = value;
|
|
7492
|
+
}
|
|
7493
|
+
close() {
|
|
7494
|
+
// Nothing to do
|
|
7495
|
+
}
|
|
7496
|
+
flush() {
|
|
7497
|
+
this.chunkAudioBufferReceiver.postAudioStreamEnd(this.chunkIdx);
|
|
7498
|
+
}
|
|
7499
|
+
nextStream() {
|
|
7500
|
+
// reset chunk counter
|
|
7501
|
+
this.chunkIdx = 0;
|
|
7502
|
+
this.chunkAudioBufferReceiver.postAudioStreamStart();
|
|
7503
|
+
}
|
|
7504
|
+
setFormat(channels, sampleRate) {
|
|
7505
|
+
this.channels = channels;
|
|
7506
|
+
this.sampleRate = sampleRate;
|
|
7507
|
+
}
|
|
7508
|
+
write(buffers) {
|
|
7509
|
+
let aCtx = AudioContextProvider.audioContextInstance();
|
|
7510
|
+
let bChs = buffers.length;
|
|
7511
|
+
let frameLen = 0;
|
|
7512
|
+
if (aCtx && bChs > 0) {
|
|
7513
|
+
frameLen = buffers[0].length;
|
|
7514
|
+
let ad = aCtx.createBuffer(this.channels, frameLen, this.sampleRate);
|
|
7515
|
+
for (let ch = 0; ch < this.channels; ch++) {
|
|
7516
|
+
ad.copyToChannel(buffers[ch], ch);
|
|
7517
|
+
}
|
|
7518
|
+
this.chunkAudioBufferReceiver.postChunkAudioBuffer(ad, this.chunkIdx);
|
|
7519
|
+
this.chunkIdx++;
|
|
7520
|
+
}
|
|
7521
|
+
return frameLen;
|
|
7522
|
+
}
|
|
7523
|
+
}
|
|
7524
|
+
let BasicRecorder = class BasicRecorder {
|
|
7525
|
+
constructor(dialog, sessionService, uploader, config) {
|
|
7297
7526
|
this.dialog = dialog;
|
|
7298
7527
|
this.sessionService = sessionService;
|
|
7528
|
+
this.uploader = uploader;
|
|
7529
|
+
this.config = config;
|
|
7299
7530
|
this.statusMsg = '';
|
|
7300
7531
|
this.statusWaiting = false;
|
|
7301
7532
|
this.readonly = false;
|
|
7533
|
+
this.rfUuid = null;
|
|
7302
7534
|
this.processingRecording = false;
|
|
7303
7535
|
this.ac = null;
|
|
7304
7536
|
this._wakeLock = false;
|
|
7305
7537
|
this._selectedDeviceId = undefined;
|
|
7306
7538
|
this._channelCount = 2;
|
|
7307
7539
|
this._session = null;
|
|
7540
|
+
this.startedDate = null;
|
|
7308
7541
|
this.uploadProgress = 100;
|
|
7309
7542
|
this.uploadStatus = 'ok';
|
|
7310
7543
|
this.audioSignalCollapsed = true;
|
|
@@ -7314,7 +7547,9 @@ class BasicRecorder {
|
|
|
7314
7547
|
this.audioFetchSubscription = null;
|
|
7315
7548
|
this.destroyed = false;
|
|
7316
7549
|
this.navigationDisabled = true;
|
|
7317
|
-
|
|
7550
|
+
// Default: Disabled chunked upload
|
|
7551
|
+
this._uploadChunkSizeSeconds = null;
|
|
7552
|
+
this._screenLocked = false;
|
|
7318
7553
|
this.userAgent = UserAgentBuilder.userAgent();
|
|
7319
7554
|
console.debug("Detected platform: " + this.userAgent.detectedPlatform);
|
|
7320
7555
|
console.debug("Detected browser: " + this.userAgent.detectedBrowser);
|
|
@@ -7324,6 +7559,16 @@ class BasicRecorder {
|
|
|
7324
7559
|
this.streamLevelMeasure = new StreamLevelMeasure();
|
|
7325
7560
|
this.selCaptureDeviceId = null;
|
|
7326
7561
|
}
|
|
7562
|
+
get uploadChunkSizeSeconds() {
|
|
7563
|
+
return this._uploadChunkSizeSeconds;
|
|
7564
|
+
}
|
|
7565
|
+
set uploadChunkSizeSeconds(value) {
|
|
7566
|
+
let oldValue = this.uploadChunkSizeSeconds;
|
|
7567
|
+
this._uploadChunkSizeSeconds = value;
|
|
7568
|
+
if (value !== oldValue) {
|
|
7569
|
+
this.configureStreamCaptureStream();
|
|
7570
|
+
}
|
|
7571
|
+
}
|
|
7327
7572
|
get wakeLock() {
|
|
7328
7573
|
return this._wakeLock;
|
|
7329
7574
|
}
|
|
@@ -7332,18 +7577,27 @@ class BasicRecorder {
|
|
|
7332
7577
|
}
|
|
7333
7578
|
enableWakeLockCond() {
|
|
7334
7579
|
if (this.wakeLock === true) {
|
|
7335
|
-
if (!this.
|
|
7336
|
-
this.
|
|
7337
|
-
|
|
7338
|
-
|
|
7339
|
-
|
|
7580
|
+
if (!this.wakeLockManager) {
|
|
7581
|
+
this.wakeLockManager = new WakeLockManager();
|
|
7582
|
+
this.wakeLockManager.behaviorSubject.subscribe({
|
|
7583
|
+
next: (v) => {
|
|
7584
|
+
this._screenLocked = v;
|
|
7585
|
+
},
|
|
7586
|
+
error: (err) => {
|
|
7587
|
+
console.error("Wake lock error!");
|
|
7588
|
+
this._screenLocked = false;
|
|
7589
|
+
}
|
|
7590
|
+
});
|
|
7340
7591
|
}
|
|
7592
|
+
this.wakeLockManager.enableWakeLock();
|
|
7341
7593
|
}
|
|
7342
7594
|
}
|
|
7343
7595
|
disableWakeLockCond() {
|
|
7344
|
-
|
|
7345
|
-
|
|
7346
|
-
|
|
7596
|
+
var _a;
|
|
7597
|
+
(_a = this.wakeLockManager) === null || _a === void 0 ? void 0 : _a.disableWakeLock();
|
|
7598
|
+
}
|
|
7599
|
+
get screenLocked() {
|
|
7600
|
+
return this._screenLocked;
|
|
7347
7601
|
}
|
|
7348
7602
|
set audioDevices(audioDevices) {
|
|
7349
7603
|
this._audioDevices = audioDevices;
|
|
@@ -7364,6 +7618,27 @@ class BasicRecorder {
|
|
|
7364
7618
|
this.statusAlertType = 'info';
|
|
7365
7619
|
this.statusMsg = 'Ready.';
|
|
7366
7620
|
}
|
|
7621
|
+
configureStreamCaptureStream() {
|
|
7622
|
+
let outStream;
|
|
7623
|
+
if (this.uploadChunkSizeSeconds) {
|
|
7624
|
+
// Multiply the capture stream to...
|
|
7625
|
+
let sasm = new SequenceAudioFloat32OutStreamMultiplier();
|
|
7626
|
+
// ...upload audio data in chunks...
|
|
7627
|
+
let chMng = new ChunkManager(this); // The chunk manager connects the chunked audio stream to this class to upload the chunks
|
|
7628
|
+
let chOsUpload = new SequenceAudioFloat32ChunkerOutStream(chMng, this.uploadChunkSizeSeconds); // The audio stream chunker itself
|
|
7629
|
+
sasm.sequenceAudioFloat32OutStreams.push(chOsUpload);
|
|
7630
|
+
// ...and to measure the level
|
|
7631
|
+
let chOsLvlMeas = new SequenceAudioFloat32ChunkerOutStream(this.streamLevelMeasure, LEVEL_BAR_INTERVALL_SECONDS);
|
|
7632
|
+
sasm.sequenceAudioFloat32OutStreams.push(chOsLvlMeas);
|
|
7633
|
+
outStream = sasm;
|
|
7634
|
+
}
|
|
7635
|
+
else {
|
|
7636
|
+
outStream = new SequenceAudioFloat32ChunkerOutStream(this.streamLevelMeasure, LEVEL_BAR_INTERVALL_SECONDS);
|
|
7637
|
+
}
|
|
7638
|
+
if (this.ac) {
|
|
7639
|
+
this.ac.audioOutStream = outStream;
|
|
7640
|
+
}
|
|
7641
|
+
}
|
|
7367
7642
|
start() {
|
|
7368
7643
|
this.statusAlertType = 'info';
|
|
7369
7644
|
this.statusMsg = 'Starting session...';
|
|
@@ -7570,6 +7845,73 @@ class BasicRecorder {
|
|
|
7570
7845
|
});
|
|
7571
7846
|
}
|
|
7572
7847
|
}
|
|
7848
|
+
startItem() {
|
|
7849
|
+
this.startedDate = null;
|
|
7850
|
+
this.enableWakeLockCond();
|
|
7851
|
+
this.rfUuid = UUID.generate();
|
|
7852
|
+
this.transportActions.startAction.disabled = true;
|
|
7853
|
+
this.transportActions.pauseAction.disabled = true;
|
|
7854
|
+
}
|
|
7855
|
+
started() {
|
|
7856
|
+
//this.enableWakeLockCond();
|
|
7857
|
+
if (!this.startedDate) {
|
|
7858
|
+
this.startedDate = new Date();
|
|
7859
|
+
}
|
|
7860
|
+
this.transportActions.startAction.disabled = true;
|
|
7861
|
+
}
|
|
7862
|
+
postRecording(wavFile, recUrl) {
|
|
7863
|
+
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
7864
|
+
let ul = new Upload(wavBlob, recUrl);
|
|
7865
|
+
this.uploader.queueUpload(ul);
|
|
7866
|
+
}
|
|
7867
|
+
postAudioStreamStart() {
|
|
7868
|
+
var _a;
|
|
7869
|
+
if (this.rfUuid) {
|
|
7870
|
+
let apiEndPoint = '';
|
|
7871
|
+
if (this.config && this.config.apiEndPoint) {
|
|
7872
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
7873
|
+
}
|
|
7874
|
+
if (apiEndPoint !== '') {
|
|
7875
|
+
apiEndPoint = apiEndPoint + '/';
|
|
7876
|
+
}
|
|
7877
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
7878
|
+
let recUrl = sessionsUrl + '/' + ((_a = this.session) === null || _a === void 0 ? void 0 : _a.sessionId) + '/' + RECFILE_API_CTX + '/' + this.rfUuid + '/prepareChunksRequest';
|
|
7879
|
+
let fd = new FormData();
|
|
7880
|
+
// Note: At least one parameter must be set
|
|
7881
|
+
fd.set('uuid', this.rfUuid);
|
|
7882
|
+
if (!this.startedDate) {
|
|
7883
|
+
this.startedDate = new Date();
|
|
7884
|
+
}
|
|
7885
|
+
fd.set('startedDate', this.startedDate.toJSON());
|
|
7886
|
+
let ul = new Upload(fd, recUrl);
|
|
7887
|
+
this.uploader.queueUpload(ul);
|
|
7888
|
+
}
|
|
7889
|
+
else {
|
|
7890
|
+
console.error("Recording file UUID not set!");
|
|
7891
|
+
}
|
|
7892
|
+
}
|
|
7893
|
+
postAudioStreamEnd(chunkCount) {
|
|
7894
|
+
var _a;
|
|
7895
|
+
if (this.rfUuid) {
|
|
7896
|
+
let apiEndPoint = '';
|
|
7897
|
+
if (this.config && this.config.apiEndPoint) {
|
|
7898
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
7899
|
+
}
|
|
7900
|
+
if (apiEndPoint !== '') {
|
|
7901
|
+
apiEndPoint = apiEndPoint + '/';
|
|
7902
|
+
}
|
|
7903
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
7904
|
+
let recUrl = sessionsUrl + '/' + ((_a = this.session) === null || _a === void 0 ? void 0 : _a.sessionId) + '/' + RECFILE_API_CTX + '/' + this.rfUuid + '/concatChunksRequest';
|
|
7905
|
+
let fd = new FormData();
|
|
7906
|
+
fd.set('uuid', this.rfUuid);
|
|
7907
|
+
fd.set('chunkCount', chunkCount.toString());
|
|
7908
|
+
let ul = new Upload(fd, recUrl);
|
|
7909
|
+
this.uploader.queueUpload(ul);
|
|
7910
|
+
}
|
|
7911
|
+
else {
|
|
7912
|
+
console.error("Recording file UUID not set!");
|
|
7913
|
+
}
|
|
7914
|
+
}
|
|
7573
7915
|
closed() {
|
|
7574
7916
|
this.statusAlertType = 'info';
|
|
7575
7917
|
this.statusMsg = 'Session closed.';
|
|
@@ -7586,7 +7928,11 @@ class BasicRecorder {
|
|
|
7586
7928
|
}
|
|
7587
7929
|
});
|
|
7588
7930
|
}
|
|
7589
|
-
}
|
|
7931
|
+
};
|
|
7932
|
+
BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS = 30;
|
|
7933
|
+
BasicRecorder = __decorate([
|
|
7934
|
+
__param(3, Inject(SPEECHRECORDER_CONFIG))
|
|
7935
|
+
], BasicRecorder);
|
|
7590
7936
|
|
|
7591
7937
|
/**
|
|
7592
7938
|
* Created by klausj on 17.06.2017.
|
|
@@ -7814,9 +8160,9 @@ class RecordingService {
|
|
|
7814
8160
|
}
|
|
7815
8161
|
RecordingService.REC_API_CTX = 'recfile';
|
|
7816
8162
|
RecordingService.RECORDING_API_CTX = 'recordingfile';
|
|
7817
|
-
RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7818
|
-
RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
7819
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
8163
|
+
RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8164
|
+
RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingService });
|
|
8165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingService, decorators: [{
|
|
7820
8166
|
type: Injectable
|
|
7821
8167
|
}], ctorParameters: function () {
|
|
7822
8168
|
return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
@@ -7832,9 +8178,9 @@ class SpeechRecorderUploader extends Uploader {
|
|
|
7832
8178
|
this.config = config;
|
|
7833
8179
|
}
|
|
7834
8180
|
}
|
|
7835
|
-
SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7836
|
-
SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
7837
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
8181
|
+
SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderUploader, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
8182
|
+
SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderUploader });
|
|
8183
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
|
|
7838
8184
|
type: Injectable
|
|
7839
8185
|
}], ctorParameters: function () {
|
|
7840
8186
|
return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
@@ -7856,12 +8202,12 @@ class WarningBar {
|
|
|
7856
8202
|
}
|
|
7857
8203
|
}
|
|
7858
8204
|
}
|
|
7859
|
-
WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7860
|
-
WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
8205
|
+
WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8206
|
+
WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: WarningBar, selector: "app-warningbar", inputs: { warningText: "warningText", show: "show" }, providers: [SessionService], ngImport: i0, template: `
|
|
7861
8207
|
<div [class]="displayClass">{{warningText}}</div>
|
|
7862
8208
|
|
|
7863
8209
|
`, isInline: true, styles: [":host{flex:0 0 content;background:orange}\n", ".off{display:none}\n", ".on{padding:2px;display:inline-block;width:100%;font-weight:700;font-size:larger;text-align:center}\n"] });
|
|
7864
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
8210
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WarningBar, decorators: [{
|
|
7865
8211
|
type: Component,
|
|
7866
8212
|
args: [{
|
|
7867
8213
|
selector: 'app-warningbar',
|
|
@@ -7900,7 +8246,7 @@ const DEFAULT_PRE_REC_DELAY = 1000;
|
|
|
7900
8246
|
const DEFAULT_POST_REC_DELAY = 500;
|
|
7901
8247
|
class SessionManager extends BasicRecorder {
|
|
7902
8248
|
constructor(changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
|
|
7903
|
-
super(dialog, sessionService);
|
|
8249
|
+
super(dialog, sessionService, uploader, config);
|
|
7904
8250
|
this.changeDetectorRef = changeDetectorRef;
|
|
7905
8251
|
this.renderer = renderer;
|
|
7906
8252
|
this.dialog = dialog;
|
|
@@ -7941,6 +8287,7 @@ class SessionManager extends BasicRecorder {
|
|
|
7941
8287
|
};
|
|
7942
8288
|
}
|
|
7943
8289
|
ngOnDestroy() {
|
|
8290
|
+
console.debug("Com destroy, disable wake lock.");
|
|
7944
8291
|
this.disableWakeLockCond();
|
|
7945
8292
|
this.destroyed = true;
|
|
7946
8293
|
// TODO stop capture /playback
|
|
@@ -7960,7 +8307,7 @@ class SessionManager extends BasicRecorder {
|
|
|
7960
8307
|
context = AudioContextProvider.audioContextInstance();
|
|
7961
8308
|
}
|
|
7962
8309
|
catch (err) {
|
|
7963
|
-
this.status =
|
|
8310
|
+
this.status = 9 /* ERROR */;
|
|
7964
8311
|
let errMsg = 'Unknown error';
|
|
7965
8312
|
if (err instanceof Error) {
|
|
7966
8313
|
errMsg = err.message;
|
|
@@ -7984,7 +8331,7 @@ class SessionManager extends BasicRecorder {
|
|
|
7984
8331
|
console.info("No audio context available!");
|
|
7985
8332
|
}
|
|
7986
8333
|
if (!context || !navigator.mediaDevices) {
|
|
7987
|
-
this.status =
|
|
8334
|
+
this.status = 9 /* ERROR */;
|
|
7988
8335
|
let errMsg = 'Browser does not support Media streams!';
|
|
7989
8336
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
7990
8337
|
this.statusAlertType = 'error';
|
|
@@ -8003,7 +8350,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8003
8350
|
if (this.ac) {
|
|
8004
8351
|
this.transportActions.startAction.onAction = () => this.startItem();
|
|
8005
8352
|
this.ac.listener = this;
|
|
8006
|
-
this.
|
|
8353
|
+
this.configureStreamCaptureStream();
|
|
8007
8354
|
// Don't list the devices here. If we do not have audio permissions we only get anonymized devices without labels.
|
|
8008
8355
|
//this.ac.listDevices();
|
|
8009
8356
|
}
|
|
@@ -8062,6 +8409,12 @@ class SessionManager extends BasicRecorder {
|
|
|
8062
8409
|
this.transportActions.bwdAction.perform();
|
|
8063
8410
|
}
|
|
8064
8411
|
}
|
|
8412
|
+
updateWakeLock(dataSaved = this.dataSaved) {
|
|
8413
|
+
//console.debug("Update wake lock: dataSaved: "+dataSaved+", not active: "+! this.isActive())
|
|
8414
|
+
if (dataSaved && !this.isActive()) {
|
|
8415
|
+
this.disableWakeLockCond();
|
|
8416
|
+
}
|
|
8417
|
+
}
|
|
8065
8418
|
progressPercentValue() {
|
|
8066
8419
|
let v = 100;
|
|
8067
8420
|
if (this.items) {
|
|
@@ -8149,10 +8502,10 @@ class SessionManager extends BasicRecorder {
|
|
|
8149
8502
|
}
|
|
8150
8503
|
}
|
|
8151
8504
|
startItem() {
|
|
8152
|
-
this.
|
|
8153
|
-
|
|
8154
|
-
this.transportActions.pauseAction.disabled = true;
|
|
8505
|
+
this.status = 2 /* STARTING */;
|
|
8506
|
+
super.startItem();
|
|
8155
8507
|
if (this.readonly) {
|
|
8508
|
+
this.status = 1 /* IDLE */;
|
|
8156
8509
|
return;
|
|
8157
8510
|
}
|
|
8158
8511
|
this.transportActions.fwdAction.disabled = true;
|
|
@@ -8389,10 +8742,10 @@ class SessionManager extends BasicRecorder {
|
|
|
8389
8742
|
this.enableNavigation();
|
|
8390
8743
|
}
|
|
8391
8744
|
isRecording() {
|
|
8392
|
-
return (this.status ===
|
|
8745
|
+
return (this.status === 3 /* PRE_RECORDING */ || this.status === 4 /* RECORDING */);
|
|
8393
8746
|
}
|
|
8394
8747
|
isActive() {
|
|
8395
|
-
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status ===
|
|
8748
|
+
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status === 9 /* ERROR */) || this.processingRecording || this.sessionService.uploadCount > 0);
|
|
8396
8749
|
}
|
|
8397
8750
|
prevItem() {
|
|
8398
8751
|
let newPrIdx = this._promptIndex;
|
|
@@ -8453,8 +8806,8 @@ class SessionManager extends BasicRecorder {
|
|
|
8453
8806
|
}
|
|
8454
8807
|
}
|
|
8455
8808
|
started() {
|
|
8456
|
-
this.status =
|
|
8457
|
-
|
|
8809
|
+
this.status = 3 /* PRE_RECORDING */;
|
|
8810
|
+
super.started();
|
|
8458
8811
|
this.startStopSignalState = 1 /* PRERECORDING */;
|
|
8459
8812
|
if (this._session) {
|
|
8460
8813
|
if (this._session.status === "LOADED") {
|
|
@@ -8507,7 +8860,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8507
8860
|
this.maxRecTimerRunning = true;
|
|
8508
8861
|
this.preRecTimerId = window.setTimeout(() => {
|
|
8509
8862
|
this.preRecTimerRunning = false;
|
|
8510
|
-
this.status =
|
|
8863
|
+
this.status = 4 /* RECORDING */;
|
|
8511
8864
|
this.startStopSignalState = 3 /* RECORDING */;
|
|
8512
8865
|
if (this.section.mode === 'AUTORECORDING') {
|
|
8513
8866
|
this.transportActions.nextAction.disabled = false;
|
|
@@ -8526,19 +8879,19 @@ class SessionManager extends BasicRecorder {
|
|
|
8526
8879
|
this.preRecTimerRunning = true;
|
|
8527
8880
|
}
|
|
8528
8881
|
stopItem() {
|
|
8529
|
-
this.status =
|
|
8882
|
+
this.status = 5 /* POST_REC_STOP */;
|
|
8530
8883
|
this.startStopSignalState = 2 /* POSTRECORDING */;
|
|
8531
8884
|
this.transportActions.stopAction.disabled = true;
|
|
8532
8885
|
this.transportActions.nextAction.disabled = true;
|
|
8533
8886
|
this.postRecTimerId = window.setTimeout(() => {
|
|
8534
8887
|
this.postRecTimerRunning = false;
|
|
8535
|
-
this.status =
|
|
8888
|
+
this.status = 7 /* STOPPING_STOP */;
|
|
8536
8889
|
this.stopRecording();
|
|
8537
8890
|
}, this.postDelay);
|
|
8538
8891
|
this.postRecTimerRunning = true;
|
|
8539
8892
|
}
|
|
8540
8893
|
pauseItem() {
|
|
8541
|
-
this.status =
|
|
8894
|
+
this.status = 6 /* POST_REC_PAUSE */;
|
|
8542
8895
|
this.transportActions.pauseAction.disabled = true;
|
|
8543
8896
|
this.startStopSignalState = 2 /* POSTRECORDING */;
|
|
8544
8897
|
this.transportActions.stopAction.disabled = true;
|
|
@@ -8546,7 +8899,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8546
8899
|
this.transportActions.pauseAction.disabled = true;
|
|
8547
8900
|
this.postRecTimerId = window.setTimeout(() => {
|
|
8548
8901
|
this.postRecTimerRunning = false;
|
|
8549
|
-
this.status =
|
|
8902
|
+
this.status = 8 /* STOPPING_PAUSE */;
|
|
8550
8903
|
this.stopRecording();
|
|
8551
8904
|
}, this.postDelay);
|
|
8552
8905
|
this.postRecTimerRunning = true;
|
|
@@ -8570,7 +8923,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8570
8923
|
this.postRecTimerRunning = false;
|
|
8571
8924
|
}
|
|
8572
8925
|
this.maxRecTimerRunning = false;
|
|
8573
|
-
this.status =
|
|
8926
|
+
this.status = 7 /* STOPPING_STOP */;
|
|
8574
8927
|
if (this.ac) {
|
|
8575
8928
|
this.ac.stop();
|
|
8576
8929
|
}
|
|
@@ -8623,7 +8976,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8623
8976
|
rf = new SprRecordingFile(sessId, ic, it.recs.length, ad);
|
|
8624
8977
|
it.recs.push(rf);
|
|
8625
8978
|
}
|
|
8626
|
-
if (this.enableUploadRecordings) {
|
|
8979
|
+
if (this.enableUploadRecordings && !this.uploadChunkSizeSeconds) {
|
|
8627
8980
|
// TODO use SpeechRecorderconfig resp. RecfileService
|
|
8628
8981
|
// convert asynchronously to 16-bit integer PCM
|
|
8629
8982
|
// TODO could we avoid conversion to save CPU resources and transfer float PCM directly?
|
|
@@ -8645,6 +8998,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8645
8998
|
ww.writeAsync(ad, (wavFile) => {
|
|
8646
8999
|
this.postRecording(wavFile, recUrl);
|
|
8647
9000
|
this.processingRecording = false;
|
|
9001
|
+
this.updateWakeLock();
|
|
8648
9002
|
});
|
|
8649
9003
|
}
|
|
8650
9004
|
}
|
|
@@ -8661,7 +9015,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8661
9015
|
}
|
|
8662
9016
|
}
|
|
8663
9017
|
}
|
|
8664
|
-
let autoStart = (this.status ===
|
|
9018
|
+
let autoStart = (this.status === 7 /* STOPPING_STOP */);
|
|
8665
9019
|
this.status = 1 /* IDLE */;
|
|
8666
9020
|
let startNext = false;
|
|
8667
9021
|
if (complete) {
|
|
@@ -8678,6 +9032,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8678
9032
|
}
|
|
8679
9033
|
}
|
|
8680
9034
|
this.statusMsg = 'Session complete!';
|
|
9035
|
+
this.updateWakeLock();
|
|
8681
9036
|
let dialogRef = this.dialog.open(SessionFinishedDialog, {});
|
|
8682
9037
|
// enable navigation
|
|
8683
9038
|
this.transportActions.fwdAction.disabled = false;
|
|
@@ -8693,6 +9048,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8693
9048
|
else {
|
|
8694
9049
|
this.navigationDisabled = false;
|
|
8695
9050
|
this.updateNavigationActions();
|
|
9051
|
+
this.updateWakeLock();
|
|
8696
9052
|
}
|
|
8697
9053
|
}
|
|
8698
9054
|
// apply recorded item
|
|
@@ -8702,6 +9058,25 @@ class SessionManager extends BasicRecorder {
|
|
|
8702
9058
|
}
|
|
8703
9059
|
this.changeDetectorRef.detectChanges();
|
|
8704
9060
|
}
|
|
9061
|
+
postChunkAudioBuffer(audioBuffer, chunkIdx) {
|
|
9062
|
+
var _a;
|
|
9063
|
+
this.processingRecording = true;
|
|
9064
|
+
let ww = new WavWriter();
|
|
9065
|
+
//new REST API URL
|
|
9066
|
+
let apiEndPoint = '';
|
|
9067
|
+
if (this.config && this.config.apiEndPoint) {
|
|
9068
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
9069
|
+
}
|
|
9070
|
+
if (apiEndPoint !== '') {
|
|
9071
|
+
apiEndPoint = apiEndPoint + '/';
|
|
9072
|
+
}
|
|
9073
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
9074
|
+
let recUrl = sessionsUrl + '/' + ((_a = this.session) === null || _a === void 0 ? void 0 : _a.sessionId) + '/' + RECFILE_API_CTX + '/' + this.promptItem.itemcode + '/' + this.rfUuid + '/' + chunkIdx;
|
|
9075
|
+
ww.writeAsync(audioBuffer, (wavFile) => {
|
|
9076
|
+
this.postRecording(wavFile, recUrl);
|
|
9077
|
+
this.processingRecording = false;
|
|
9078
|
+
});
|
|
9079
|
+
}
|
|
8705
9080
|
postRecording(wavFile, recUrl) {
|
|
8706
9081
|
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
8707
9082
|
let ul = new Upload(wavBlob, recUrl);
|
|
@@ -8734,8 +9109,8 @@ class SessionManager extends BasicRecorder {
|
|
|
8734
9109
|
}
|
|
8735
9110
|
}
|
|
8736
9111
|
}
|
|
8737
|
-
SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
8738
|
-
SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9112
|
+
SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionManager, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$2.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
|
|
9113
|
+
SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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: `
|
|
8739
9114
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
8740
9115
|
<app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
8741
9116
|
<app-sprprompting [projectName]="projectName"
|
|
@@ -8756,32 +9131,35 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
|
8756
9131
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
8757
9132
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording()" [displayLevelInfos]="displayLevelInfos"></audio-levelbar>
|
|
8758
9133
|
<div fxLayout="row">
|
|
8759
|
-
|
|
8760
|
-
|
|
8761
|
-
|
|
8762
|
-
|
|
8763
|
-
|
|
8764
|
-
|
|
8765
|
-
|
|
8766
|
-
|
|
8767
|
-
|
|
8768
|
-
|
|
8769
|
-
|
|
8770
|
-
|
|
9134
|
+
<spr-recordingitemcontrols fxFlex="10 0 1"
|
|
9135
|
+
[audioLoaded]="displayAudioClip?.buffer!==null"
|
|
9136
|
+
[playStartAction]="controlAudioPlayer?.startAction"
|
|
9137
|
+
[playStopAction]="controlAudioPlayer?.stopAction"
|
|
9138
|
+
[peakDbLvl]="peakLevelInDb"
|
|
9139
|
+
[agc]="this.ac?.agcStatus"
|
|
9140
|
+
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
9141
|
+
</spr-recordingitemcontrols>
|
|
9142
|
+
|
|
9143
|
+
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9144
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9145
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9146
|
+
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
8771
9147
|
</div>
|
|
9148
|
+
</div>
|
|
8772
9149
|
<div #controlpanel class="controlpanel" fxLayout="row">
|
|
8773
9150
|
<div fxFlex="1 1 30%" fxLayoutAlign="start center">
|
|
8774
9151
|
<app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
|
|
8775
9152
|
</div>
|
|
8776
|
-
|
|
8777
|
-
|
|
8778
|
-
|
|
8779
|
-
|
|
8780
|
-
|
|
8781
|
-
|
|
9153
|
+
<app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="items==null || items.length>1"></app-sprtransport>
|
|
9154
|
+
<div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
|
|
9155
|
+
<app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9156
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9157
|
+
<app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9158
|
+
<app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
9159
|
+
</div>
|
|
8782
9160
|
</div>
|
|
8783
|
-
`, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height
|
|
8784
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9161
|
+
`, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n"], components: [{ type: WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }, { type: Prompting, selector: "app-sprprompting", inputs: ["projectName", "startStopSignalState", "promptItem", "showPrompt", "items", "selectedItemIdx", "transportActions", "enableDownload", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["onItemSelect", "onNextItem", "onPrevItem"] }, { type: i7.MatProgressBar, selector: "mat-progress-bar", inputs: ["color", "value", "bufferValue", "mode"], outputs: ["animationEnd"], exportAs: ["matProgressBar"] }, { type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos"] }, { type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { type: TransportPanel, selector: "app-sprtransport", inputs: ["readonly", "actions", "navigationEnabled", "pausingEnabled"] }], directives: [{ type: i3$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }, { type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3$1.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i8.DefaultLayoutAlignDirective, selector: " [fxLayoutAlign], [fxLayoutAlign.xs], [fxLayoutAlign.sm], [fxLayoutAlign.md], [fxLayoutAlign.lg], [fxLayoutAlign.xl], [fxLayoutAlign.lt-sm], [fxLayoutAlign.lt-md], [fxLayoutAlign.lt-lg], [fxLayoutAlign.lt-xl], [fxLayoutAlign.gt-xs], [fxLayoutAlign.gt-sm], [fxLayoutAlign.gt-md], [fxLayoutAlign.gt-lg]", inputs: ["fxLayoutAlign", "fxLayoutAlign.xs", "fxLayoutAlign.sm", "fxLayoutAlign.md", "fxLayoutAlign.lg", "fxLayoutAlign.xl", "fxLayoutAlign.lt-sm", "fxLayoutAlign.lt-md", "fxLayoutAlign.lt-lg", "fxLayoutAlign.lt-xl", "fxLayoutAlign.gt-xs", "fxLayoutAlign.gt-sm", "fxLayoutAlign.gt-md", "fxLayoutAlign.gt-lg"] }] });
|
|
9162
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionManager, decorators: [{
|
|
8785
9163
|
type: Component,
|
|
8786
9164
|
args: [{
|
|
8787
9165
|
selector: 'app-sprrecordingsession',
|
|
@@ -8807,29 +9185,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
8807
9185
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
8808
9186
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording()" [displayLevelInfos]="displayLevelInfos"></audio-levelbar>
|
|
8809
9187
|
<div fxLayout="row">
|
|
8810
|
-
|
|
8811
|
-
|
|
8812
|
-
|
|
8813
|
-
|
|
8814
|
-
|
|
8815
|
-
|
|
8816
|
-
|
|
8817
|
-
|
|
8818
|
-
|
|
8819
|
-
|
|
8820
|
-
|
|
8821
|
-
|
|
9188
|
+
<spr-recordingitemcontrols fxFlex="10 0 1"
|
|
9189
|
+
[audioLoaded]="displayAudioClip?.buffer!==null"
|
|
9190
|
+
[playStartAction]="controlAudioPlayer?.startAction"
|
|
9191
|
+
[playStopAction]="controlAudioPlayer?.stopAction"
|
|
9192
|
+
[peakDbLvl]="peakLevelInDb"
|
|
9193
|
+
[agc]="this.ac?.agcStatus"
|
|
9194
|
+
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
9195
|
+
</spr-recordingitemcontrols>
|
|
9196
|
+
|
|
9197
|
+
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9198
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9199
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9200
|
+
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
8822
9201
|
</div>
|
|
9202
|
+
</div>
|
|
8823
9203
|
<div #controlpanel class="controlpanel" fxLayout="row">
|
|
8824
9204
|
<div fxFlex="1 1 30%" fxLayoutAlign="start center">
|
|
8825
9205
|
<app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
|
|
8826
9206
|
</div>
|
|
8827
|
-
|
|
8828
|
-
|
|
8829
|
-
|
|
8830
|
-
|
|
8831
|
-
|
|
8832
|
-
|
|
9207
|
+
<app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="items==null || items.length>1"></app-sprtransport>
|
|
9208
|
+
<div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
|
|
9209
|
+
<app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9210
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9211
|
+
<app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9212
|
+
<app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
9213
|
+
</div>
|
|
8833
9214
|
</div>
|
|
8834
9215
|
`,
|
|
8835
9216
|
styles: [`:host {
|
|
@@ -8919,9 +9300,9 @@ class ScriptService {
|
|
|
8919
9300
|
return this.http.get(scriptUrl, { withCredentials: this.withCredentials });
|
|
8920
9301
|
}
|
|
8921
9302
|
}
|
|
8922
|
-
ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
8923
|
-
ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
8924
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9303
|
+
ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScriptService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
9304
|
+
ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScriptService });
|
|
9305
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScriptService, decorators: [{
|
|
8925
9306
|
type: Injectable
|
|
8926
9307
|
}], ctorParameters: function () {
|
|
8927
9308
|
return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
@@ -8971,7 +9352,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
8971
9352
|
ngAfterViewInit() {
|
|
8972
9353
|
// let wakeLockSupp=('wakeLock' in navigator);
|
|
8973
9354
|
// alert('Wake lock API supported: '+wakeLockSupp);
|
|
8974
|
-
if (this.sm.status !==
|
|
9355
|
+
if (this.sm.status !== 9 /* ERROR */) {
|
|
8975
9356
|
let initSuccess = this.init();
|
|
8976
9357
|
if (initSuccess) {
|
|
8977
9358
|
this.route.queryParams.subscribe((params) => {
|
|
@@ -9092,6 +9473,9 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9092
9473
|
// TODO
|
|
9093
9474
|
}
|
|
9094
9475
|
}
|
|
9476
|
+
get screenLocked() {
|
|
9477
|
+
return this.sm.screenLocked;
|
|
9478
|
+
}
|
|
9095
9479
|
startSession() {
|
|
9096
9480
|
this.sm.statusWaiting = false;
|
|
9097
9481
|
this.sm.start();
|
|
@@ -9153,6 +9537,8 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9153
9537
|
}
|
|
9154
9538
|
this.sm.uploadProgress = percentUpl;
|
|
9155
9539
|
}
|
|
9540
|
+
//console.debug("Upload update, update wake lock.")
|
|
9541
|
+
this.sm.updateWakeLock(this.dataSaved);
|
|
9156
9542
|
this.changeDetectorRef.detectChanges();
|
|
9157
9543
|
}
|
|
9158
9544
|
configure() {
|
|
@@ -9200,6 +9586,13 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9200
9586
|
chCnt = ProjectUtil.audioChannelCount(project);
|
|
9201
9587
|
console.info("Project requested recording channel count: " + chCnt);
|
|
9202
9588
|
this.sm.autoGainControlConfigs = project.autoGainControlConfigs;
|
|
9589
|
+
if (project.chunkedRecording === true) {
|
|
9590
|
+
console.debug("Enable chunked upload: chunkSize: " + BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS);
|
|
9591
|
+
this.sm.uploadChunkSizeSeconds = BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS;
|
|
9592
|
+
}
|
|
9593
|
+
else {
|
|
9594
|
+
this.sm.uploadChunkSizeSeconds = null;
|
|
9595
|
+
}
|
|
9203
9596
|
}
|
|
9204
9597
|
else {
|
|
9205
9598
|
console.error("Empty project configuration!");
|
|
@@ -9257,11 +9650,11 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9257
9650
|
this.sm.statusMsg = 'ERROR: Recording.';
|
|
9258
9651
|
}
|
|
9259
9652
|
}
|
|
9260
|
-
SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9261
|
-
SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9653
|
+
SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngComponent, deps: [{ token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: ScriptService }, { token: RecordingService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
|
|
9654
|
+
SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SpeechrecorderngComponent, selector: "app-speechrecorder", providers: [SessionService], viewQueries: [{ propertyName: "sm", first: true, predicate: SessionManager, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
9262
9655
|
<app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
|
|
9263
9656
|
`, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"], components: [{ type: SessionManager, selector: "app-sprrecordingsession", inputs: ["projectName", "dataSaved"] }] });
|
|
9264
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9657
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
|
|
9265
9658
|
type: Component,
|
|
9266
9659
|
args: [{
|
|
9267
9660
|
selector: 'app-speechrecorder',
|
|
@@ -9284,9 +9677,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
9284
9677
|
|
|
9285
9678
|
class ScrollPaneHorizontal {
|
|
9286
9679
|
}
|
|
9287
|
-
ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9288
|
-
ScrollPaneHorizontal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9289
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9680
|
+
ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9681
|
+
ScrollPaneHorizontal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ScrollPaneHorizontal, selector: "scroll-pane-horizontal", ngImport: i0, template: '', isInline: true, styles: [":host{width:100%;background:darkgray;box-sizing:border-box;height:100%;position:relative;overflow-x:scroll;overflow-y:auto}\n"] });
|
|
9682
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
|
|
9290
9683
|
type: Component,
|
|
9291
9684
|
args: [{
|
|
9292
9685
|
selector: 'scroll-pane-horizontal',
|
|
@@ -9505,8 +9898,8 @@ class AudioDisplayPlayer {
|
|
|
9505
9898
|
this.status = 'ERROR';
|
|
9506
9899
|
}
|
|
9507
9900
|
}
|
|
9508
|
-
AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9509
|
-
AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9901
|
+
AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayPlayer, deps: [{ token: i1$1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
9902
|
+
AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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: `
|
|
9510
9903
|
|
|
9511
9904
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
9512
9905
|
|
|
@@ -9520,7 +9913,7 @@ AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
|
|
|
9520
9913
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
9521
9914
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
|
|
9522
9915
|
`, isInline: true, styles: [":host{display:flex;flex-direction:column;position:absolute;bottom:0px;height:100%;width:100%;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#000000bf}\n"], components: [{ type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }] });
|
|
9523
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9916
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
|
|
9524
9917
|
type: Component,
|
|
9525
9918
|
args: [{
|
|
9526
9919
|
selector: 'app-audiodisplayplayer',
|
|
@@ -9872,9 +10265,9 @@ class RecordingFileService {
|
|
|
9872
10265
|
}
|
|
9873
10266
|
}
|
|
9874
10267
|
RecordingFileService.RECOFILE_API_CTX = 'recordingfile';
|
|
9875
|
-
RecordingFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9876
|
-
RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
9877
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10268
|
+
RecordingFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileService, deps: [{ token: i1.HttpClient }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
10269
|
+
RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileService });
|
|
10270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileService, decorators: [{
|
|
9878
10271
|
type: Injectable
|
|
9879
10272
|
}], ctorParameters: function () {
|
|
9880
10273
|
return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
@@ -9924,8 +10317,8 @@ class RecordingFileMetaComponent {
|
|
|
9924
10317
|
return t;
|
|
9925
10318
|
}
|
|
9926
10319
|
}
|
|
9927
|
-
RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9928
|
-
RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10320
|
+
RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileMetaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10321
|
+
RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: { sessionId: "sessionId", recordingFile: "recordingFile" }, ngImport: i0, template: `
|
|
9929
10322
|
<mat-card>
|
|
9930
10323
|
<mat-card-title>Recording file ID: {{recordingFile?.recordingFileId}}</mat-card-title>
|
|
9931
10324
|
<mat-card-content>
|
|
@@ -9959,7 +10352,7 @@ RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
9959
10352
|
</mat-card-content>
|
|
9960
10353
|
</mat-card>
|
|
9961
10354
|
`, isInline: true, components: [{ type: i1$4.MatCard, selector: "mat-card", exportAs: ["matCard"] }], directives: [{ type: i1$4.MatCardTitle, selector: "mat-card-title, [mat-card-title], [matCardTitle]" }, { type: i1$4.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
|
|
9962
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10355
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileMetaComponent, decorators: [{
|
|
9963
10356
|
type: Component,
|
|
9964
10357
|
args: [{
|
|
9965
10358
|
selector: 'app-recording-file-meta',
|
|
@@ -10022,8 +10415,8 @@ class RecordingFileNaviComponent {
|
|
|
10022
10415
|
}
|
|
10023
10416
|
}
|
|
10024
10417
|
}
|
|
10025
|
-
RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10026
|
-
RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10418
|
+
RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileNaviComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10419
|
+
RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: { firstAction: "firstAction", prevAction: "prevAction", nextAction: "nextAction", lastAction: "lastAction", items: "items", itemPos: "itemPos", selectVersion: "selectVersion", versions: "versions", version: "version", naviInfoLoading: "naviInfoLoading" }, ngImport: i0, template: `
|
|
10027
10420
|
<div #controlPanel style="display:flex;flex-direction: row;">
|
|
10028
10421
|
<div #navi style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
|
|
10029
10422
|
<fieldset>
|
|
@@ -10056,7 +10449,7 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
10056
10449
|
</div>
|
|
10057
10450
|
</div>
|
|
10058
10451
|
`, isInline: true, styles: [":host{flex:0}\n"], components: [{ type: i1$3.MatProgressSpinner, selector: "mat-progress-spinner, mat-spinner", inputs: ["color", "diameter", "strokeWidth", "mode", "value"], exportAs: ["matProgressSpinner"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i4.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { type: i3.MatTooltip, selector: "[matTooltip]", exportAs: ["matTooltip"] }] });
|
|
10059
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10452
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileNaviComponent, decorators: [{
|
|
10060
10453
|
type: Component,
|
|
10061
10454
|
args: [{
|
|
10062
10455
|
selector: 'app-recording-file-navi',
|
|
@@ -10472,8 +10865,8 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
10472
10865
|
}
|
|
10473
10866
|
}
|
|
10474
10867
|
}
|
|
10475
|
-
RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10476
|
-
RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10868
|
+
RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileViewComponent, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$2.MatDialog }], target: i0.ɵɵFactoryTarget.Component });
|
|
10869
|
+
RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: RecordingFileViewComponent, selector: "app-audiodisplayplayer", viewQueries: [{ propertyName: "ac", first: true, predicate: AudioDisplayScrollPane, descendants: true }], usesInheritance: true, ngImport: i0, template: `
|
|
10477
10870
|
|
|
10478
10871
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
10479
10872
|
<div class="ctrlview">
|
|
@@ -10491,7 +10884,7 @@ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
10491
10884
|
<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>
|
|
10492
10885
|
</div>
|
|
10493
10886
|
`, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"], components: [{ type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: ["sessionId", "recordingFile"] }, { type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }, { type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: ["firstAction", "prevAction", "nextAction", "lastAction", "items", "itemPos", "selectVersion", "versions", "version", "naviInfoLoading"] }] });
|
|
10494
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10887
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
|
|
10495
10888
|
type: Component,
|
|
10496
10889
|
args: [{
|
|
10497
10890
|
selector: 'app-audiodisplayplayer',
|
|
@@ -10624,8 +11017,8 @@ class RecordingFileUI extends RecordingFileViewComponent {
|
|
|
10624
11017
|
}
|
|
10625
11018
|
}
|
|
10626
11019
|
}
|
|
10627
|
-
RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10628
|
-
RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
11020
|
+
RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileUI, deps: [{ token: RecordingFileService }, { token: RecordingService }, { token: SessionService }, { token: i1$1.Router }, { token: i1$1.ActivatedRoute }, { token: i0.ChangeDetectorRef }, { token: i0.ElementRef }, { token: i1$2.MatDialog }, { token: i6.MatSnackBar }], target: i0.ɵɵFactoryTarget.Component });
|
|
11021
|
+
RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
|
|
10629
11022
|
<h1>Recording file editing</h1>
|
|
10630
11023
|
<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>
|
|
10631
11024
|
|
|
@@ -10646,7 +11039,7 @@ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
|
|
|
10646
11039
|
|
|
10647
11040
|
<button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
|
|
10648
11041
|
`, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0;overflow:hidden;padding:20px;z-index:5;box-sizing:border-box;background-color:#fff}\n", ".ctrlview{display:flex;flex-direction:row}\n", "audio-display-control{flex:3}\n"], components: [{ type: AudioDisplayScrollPane, selector: "audio-display-scroll-pane", inputs: ["audioClip"], outputs: ["zoomInAction", "zoomOutAction", "zoomSelectedAction", "zoomFitToPanelAction"] }, { type: RecordingFileMetaComponent, selector: "app-recording-file-meta", inputs: ["sessionId", "recordingFile"] }, { type: AudioDisplayControl, selector: "audio-display-control", inputs: ["audioClip", "playStartAction", "playSelectionAction", "playStopAction", "zoomInAction", "zoomOutAction", "zoomFitToPanelAction", "zoomSelectedAction", "autoPlayOnSelectToggleAction"] }, { type: RecordingFileNaviComponent, selector: "app-recording-file-navi", inputs: ["firstAction", "prevAction", "nextAction", "lastAction", "items", "itemPos", "selectVersion", "versions", "version", "naviInfoLoading"] }, { type: i3$2.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"] }] });
|
|
10649
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
11042
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileUI, decorators: [{
|
|
10650
11043
|
type: Component,
|
|
10651
11044
|
args: [{
|
|
10652
11045
|
selector: 'app-audiodisplayplayer',
|
|
@@ -10769,8 +11162,8 @@ class RecordingList {
|
|
|
10769
11162
|
return str;
|
|
10770
11163
|
}
|
|
10771
11164
|
}
|
|
10772
|
-
RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10773
|
-
RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
11165
|
+
RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingList, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11166
|
+
RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: RecordingList, selector: "app-recordinglist", inputs: { selectDisabled: "selectDisabled", selectedRecordingFile: "selectedRecordingFile" }, outputs: { selectedRecordingFileChanged: "selectedRecordingFileChanged" }, ngImport: i0, template: `
|
|
10774
11167
|
<mat-card>
|
|
10775
11168
|
<mat-card-header>
|
|
10776
11169
|
<h2>Recording list</h2>
|
|
@@ -10800,7 +11193,7 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
10800
11193
|
</mat-card>
|
|
10801
11194
|
|
|
10802
11195
|
`, 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}\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"], components: [{ type: i1$4.MatCard, selector: "mat-card", exportAs: ["matCard"] }, { type: i1$4.MatCardHeader, selector: "mat-card-header" }, { type: i2$2.MatTable, selector: "mat-table, table[mat-table]", exportAs: ["matTable"] }, { type: i2$2.MatHeaderRow, selector: "mat-header-row, tr[mat-header-row]", exportAs: ["matHeaderRow"] }, { type: i2$2.MatRow, selector: "mat-row, tr[mat-row]", exportAs: ["matRow"] }, { type: i3$2.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"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i1$4.MatCardContent, selector: "mat-card-content, [mat-card-content], [matCardContent]" }, { type: i2$2.MatHeaderRowDef, selector: "[matHeaderRowDef]", inputs: ["matHeaderRowDef", "matHeaderRowDefSticky"] }, { type: i2$2.MatRowDef, selector: "[matRowDef]", inputs: ["matRowDefColumns", "matRowDefWhen"] }, { type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: ["scrollIntoViewToBottom"] }, { type: i2$2.MatColumnDef, selector: "[matColumnDef]", inputs: ["sticky", "matColumnDef"] }, { type: i2$2.MatHeaderCellDef, selector: "[matHeaderCellDef]" }, { type: i2$2.MatHeaderCell, selector: "mat-header-cell, th[mat-header-cell]" }, { type: i2$2.MatCellDef, selector: "[matCellDef]" }, { type: i2$2.MatCell, selector: "mat-cell, td[mat-cell]" }], pipes: { "date": i4.DatePipe } });
|
|
10803
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
11196
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingList, decorators: [{
|
|
10804
11197
|
type: Component,
|
|
10805
11198
|
args: [{ selector: 'app-recordinglist', template: `
|
|
10806
11199
|
<mat-card>
|
|
@@ -10860,8 +11253,8 @@ class RecorderCombiPane {
|
|
|
10860
11253
|
this.recordingListComp.selectTop();
|
|
10861
11254
|
}
|
|
10862
11255
|
}
|
|
10863
|
-
RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10864
|
-
RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
11256
|
+
RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecorderCombiPane, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11257
|
+
RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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 }], ngImport: i0, template: `
|
|
10865
11258
|
<div class="scrollList">
|
|
10866
11259
|
<app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
|
|
10867
11260
|
</div>
|
|
@@ -10874,7 +11267,7 @@ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
|
|
|
10874
11267
|
[playStopAction]="playStopAction"></app-audiodisplay>
|
|
10875
11268
|
</div>
|
|
10876
11269
|
`, 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}\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:0px;height:90%;width:100%;overflow:hidden;padding:0;z-index:200;box-sizing:border-box;background-color:#0000}\n"], components: [{ type: RecordingList, selector: "app-recordinglist", inputs: ["selectDisabled", "selectedRecordingFile"], outputs: ["selectedRecordingFileChanged"] }, { type: AudioDisplay, selector: "app-audiodisplay", inputs: ["playStartAction", "playStopAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "audioData", "audioClip"] }], directives: [{ type: i3$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
|
|
10877
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
11270
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecorderCombiPane, decorators: [{
|
|
10878
11271
|
type: Component,
|
|
10879
11272
|
args: [{ selector: 'app-recordercombipane', template: `
|
|
10880
11273
|
<div class="scrollList">
|
|
@@ -10923,13 +11316,12 @@ class Item {
|
|
|
10923
11316
|
}
|
|
10924
11317
|
}
|
|
10925
11318
|
class AudioRecorder extends BasicRecorder {
|
|
10926
|
-
constructor(changeDetectorRef, renderer, route, dialog,
|
|
10927
|
-
super(dialog, sessionService);
|
|
11319
|
+
constructor(changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
|
|
11320
|
+
super(dialog, sessionService, uploader, config);
|
|
10928
11321
|
this.changeDetectorRef = changeDetectorRef;
|
|
10929
11322
|
this.renderer = renderer;
|
|
10930
11323
|
this.route = route;
|
|
10931
11324
|
this.dialog = dialog;
|
|
10932
|
-
this.projectService = projectService;
|
|
10933
11325
|
this.sessionService = sessionService;
|
|
10934
11326
|
this.recFileService = recFileService;
|
|
10935
11327
|
this.uploader = uploader;
|
|
@@ -10940,7 +11332,6 @@ class AudioRecorder extends BasicRecorder {
|
|
|
10940
11332
|
this.enableDownloadRecordings = false;
|
|
10941
11333
|
this.status = 0 /* BLOCKED */;
|
|
10942
11334
|
this.dataSaved = true;
|
|
10943
|
-
this.startedDate = null;
|
|
10944
11335
|
this.maxRecTimerId = null;
|
|
10945
11336
|
this.maxRecTimerRunning = false;
|
|
10946
11337
|
this._promptIndex = null;
|
|
@@ -10987,7 +11378,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
10987
11378
|
context = AudioContextProvider.audioContextInstance();
|
|
10988
11379
|
}
|
|
10989
11380
|
catch (err) {
|
|
10990
|
-
this.status =
|
|
11381
|
+
this.status = 5 /* ERROR */;
|
|
10991
11382
|
let errMsg = 'Unknown error';
|
|
10992
11383
|
if (err instanceof Error) {
|
|
10993
11384
|
errMsg = err.message;
|
|
@@ -11011,7 +11402,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11011
11402
|
console.info("No audio context available!");
|
|
11012
11403
|
}
|
|
11013
11404
|
if (!context || !navigator.mediaDevices) {
|
|
11014
|
-
this.status =
|
|
11405
|
+
this.status = 5 /* ERROR */;
|
|
11015
11406
|
let errMsg = 'Browser does not support Media streams!';
|
|
11016
11407
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
11017
11408
|
this.statusAlertType = 'error';
|
|
@@ -11031,7 +11422,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11031
11422
|
if (this.ac) {
|
|
11032
11423
|
this.transportActions.startAction.onAction = () => this.startItem();
|
|
11033
11424
|
this.ac.listener = this;
|
|
11034
|
-
this.
|
|
11425
|
+
this.configureStreamCaptureStream();
|
|
11035
11426
|
// Don't list the devices here. If we do not have audio permissions we only get anonymized devices without labels.
|
|
11036
11427
|
//this.ac.listDevices();
|
|
11037
11428
|
}
|
|
@@ -11058,23 +11449,6 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11058
11449
|
this.uploader.listener = (ue) => {
|
|
11059
11450
|
this.uploadUpdate(ue);
|
|
11060
11451
|
};
|
|
11061
|
-
let wakeLockSupp = ('wakeLock' in navigator);
|
|
11062
|
-
// if(wakeLockSupp) {
|
|
11063
|
-
// let wakeLock = null;
|
|
11064
|
-
// try {
|
|
11065
|
-
// //@ts-ignore
|
|
11066
|
-
// wakeLock = navigator.wakeLock.request('screen');
|
|
11067
|
-
//
|
|
11068
|
-
// //statusElem.textContent = 'Wake Lock is active!';
|
|
11069
|
-
// } catch (err) {
|
|
11070
|
-
// // The Wake Lock request has failed - usually system related, such as battery.
|
|
11071
|
-
// console.error('Wakelock failed'+err)
|
|
11072
|
-
// }
|
|
11073
|
-
// }else{
|
|
11074
|
-
// let noSleep=new NoSleep();
|
|
11075
|
-
// noSleep.enable();
|
|
11076
|
-
//
|
|
11077
|
-
// }
|
|
11078
11452
|
}
|
|
11079
11453
|
onKeyPress(ke) {
|
|
11080
11454
|
if (ke.key == ' ') {
|
|
@@ -11178,6 +11552,12 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11178
11552
|
chCnt = ProjectUtil.audioChannelCount(project);
|
|
11179
11553
|
console.info("Project requested recording channel count: " + chCnt);
|
|
11180
11554
|
this.autoGainControlConfigs = project.autoGainControlConfigs;
|
|
11555
|
+
if (project.chunkedRecording === true) {
|
|
11556
|
+
this.uploadChunkSizeSeconds = BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS;
|
|
11557
|
+
}
|
|
11558
|
+
else {
|
|
11559
|
+
this.uploadChunkSizeSeconds = null;
|
|
11560
|
+
}
|
|
11181
11561
|
}
|
|
11182
11562
|
else {
|
|
11183
11563
|
console.error("Empty project configuration!");
|
|
@@ -11277,10 +11657,10 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11277
11657
|
}
|
|
11278
11658
|
}
|
|
11279
11659
|
startItem() {
|
|
11280
|
-
this.
|
|
11281
|
-
|
|
11282
|
-
this.transportActions.pauseAction.disabled = true;
|
|
11660
|
+
this.status = 2 /* STARTING */;
|
|
11661
|
+
super.startItem();
|
|
11283
11662
|
if (this.readonly) {
|
|
11663
|
+
this.status = 1 /* IDLE */;
|
|
11284
11664
|
return;
|
|
11285
11665
|
}
|
|
11286
11666
|
this.transportActions.fwdAction.disabled = true;
|
|
@@ -11411,10 +11791,16 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11411
11791
|
this.updateStartActionDisableState();
|
|
11412
11792
|
}
|
|
11413
11793
|
isRecording() {
|
|
11414
|
-
return (this.status ===
|
|
11794
|
+
return (this.status === 3 /* RECORDING */);
|
|
11415
11795
|
}
|
|
11416
11796
|
isActive() {
|
|
11417
|
-
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status ===
|
|
11797
|
+
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status === 5 /* ERROR */) || this.processingRecording || this.sessionService.uploadCount > 0);
|
|
11798
|
+
}
|
|
11799
|
+
updateWakeLock(dataSaved = this.dataSaved) {
|
|
11800
|
+
//console.debug("Update wake lock: dataSaved: "+dataSaved+", not active: "+! this.isActive())
|
|
11801
|
+
if (dataSaved && !this.isActive()) {
|
|
11802
|
+
this.disableWakeLockCond();
|
|
11803
|
+
}
|
|
11418
11804
|
}
|
|
11419
11805
|
updateNavigationActions() {
|
|
11420
11806
|
this.transportActions.fwdAction.disabled = this.navigationDisabled;
|
|
@@ -11434,8 +11820,8 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11434
11820
|
}
|
|
11435
11821
|
}
|
|
11436
11822
|
started() {
|
|
11437
|
-
this.
|
|
11438
|
-
|
|
11823
|
+
this.status = 3 /* RECORDING */;
|
|
11824
|
+
super.started();
|
|
11439
11825
|
this.statusAlertType = 'info';
|
|
11440
11826
|
this.statusMsg = 'Recording...';
|
|
11441
11827
|
let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;
|
|
@@ -11443,13 +11829,12 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11443
11829
|
this.stopRecordingMaxRec();
|
|
11444
11830
|
}, maxRecordingTimeMs);
|
|
11445
11831
|
this.maxRecTimerRunning = true;
|
|
11446
|
-
this.status = 2 /* RECORDING */;
|
|
11447
11832
|
this.transportActions.stopAction.disabled = false;
|
|
11448
11833
|
}
|
|
11449
11834
|
stopItem() {
|
|
11450
11835
|
this.transportActions.stopAction.disabled = true;
|
|
11451
11836
|
this.transportActions.nextAction.disabled = true;
|
|
11452
|
-
this.status =
|
|
11837
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
11453
11838
|
this.stopRecording();
|
|
11454
11839
|
}
|
|
11455
11840
|
stopRecording() {
|
|
@@ -11463,7 +11848,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11463
11848
|
}
|
|
11464
11849
|
stopRecordingMaxRec() {
|
|
11465
11850
|
this.maxRecTimerRunning = false;
|
|
11466
|
-
this.status =
|
|
11851
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
11467
11852
|
if (this.ac) {
|
|
11468
11853
|
this.ac.stop();
|
|
11469
11854
|
}
|
|
@@ -11482,53 +11867,47 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11482
11867
|
if (this._session) {
|
|
11483
11868
|
sessId = this._session.sessionId;
|
|
11484
11869
|
}
|
|
11485
|
-
|
|
11870
|
+
if (!this.rfUuid) {
|
|
11871
|
+
this.rfUuid = UUID.generate();
|
|
11872
|
+
}
|
|
11873
|
+
let rf = new RecordingFile(this.rfUuid, sessId, ad);
|
|
11486
11874
|
rf._startedAsDateObj = this.startedDate;
|
|
11487
11875
|
if (rf._startedAsDateObj) {
|
|
11488
11876
|
rf.startedDate = rf._startedAsDateObj.toString();
|
|
11489
11877
|
}
|
|
11490
|
-
|
|
11491
|
-
|
|
11492
|
-
|
|
11493
|
-
|
|
11494
|
-
if (
|
|
11495
|
-
apiEndPoint =
|
|
11878
|
+
rf.frames = ad.length;
|
|
11879
|
+
this.displayRecFile = rf;
|
|
11880
|
+
this.recorderCombiPane.push(rf);
|
|
11881
|
+
// Upload if upload enabled and not in chunked upload mode
|
|
11882
|
+
if (this.enableUploadRecordings && !this.uploadChunkSizeSeconds) {
|
|
11883
|
+
let apiEndPoint = '';
|
|
11884
|
+
if (this.config && this.config.apiEndPoint) {
|
|
11885
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
11886
|
+
}
|
|
11887
|
+
if (apiEndPoint !== '') {
|
|
11888
|
+
apiEndPoint = apiEndPoint + '/';
|
|
11889
|
+
}
|
|
11890
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
11891
|
+
let recUrl = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.uuid;
|
|
11892
|
+
// convert asynchronously to 16-bit integer PCM
|
|
11893
|
+
// TODO could we avoid conversion to save CPU resources and transfer float PCM directly?
|
|
11894
|
+
// TODO duplicate conversion for manual download
|
|
11895
|
+
this.processingRecording = true;
|
|
11896
|
+
let ww = new WavWriter();
|
|
11897
|
+
ww.writeAsync(ad, (wavFile) => {
|
|
11898
|
+
this.postRecordingMultipart(wavFile, rf.uuid, rf.session, rf._startedAsDateObj, recUrl);
|
|
11899
|
+
this.processingRecording = false;
|
|
11900
|
+
this.updateWakeLock();
|
|
11901
|
+
this.changeDetectorRef.detectChanges();
|
|
11902
|
+
});
|
|
11496
11903
|
}
|
|
11497
|
-
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
11498
|
-
let recUrl = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.uuid;
|
|
11499
|
-
//
|
|
11500
|
-
//
|
|
11501
|
-
//
|
|
11502
|
-
// // convert asynchronously to 16-bit integer PCM
|
|
11503
|
-
// // TODO could we avoid conversion to save CPU resources and transfer float PCM directly?
|
|
11504
|
-
// // TODO duplicate conversion for manual download
|
|
11505
|
-
// //console.log("Build wav writer...");
|
|
11506
|
-
this.processingRecording = true;
|
|
11507
|
-
let ww = new WavWriter();
|
|
11508
|
-
ww.writeAsync(ad, (wavFile) => {
|
|
11509
|
-
rf.frames = ad.length;
|
|
11510
|
-
this.displayRecFile = rf;
|
|
11511
|
-
this.recorderCombiPane.push(rf);
|
|
11512
|
-
this.postRecordingMultipart(wavFile, rf.uuid, rf.session, rf._startedAsDateObj, recUrl);
|
|
11513
|
-
this.processingRecording = false;
|
|
11514
|
-
this.changeDetectorRef.detectChanges();
|
|
11515
|
-
});
|
|
11516
|
-
// }
|
|
11517
11904
|
}
|
|
11518
|
-
// check complete session
|
|
11519
|
-
let complete = true;
|
|
11520
|
-
let autoStart = (this.status === 3 /* STOPPING_STOP */);
|
|
11521
11905
|
this.status = 1 /* IDLE */;
|
|
11522
|
-
let startNext = false;
|
|
11523
11906
|
this.navigationDisabled = false;
|
|
11524
11907
|
this.updateNavigationActions();
|
|
11908
|
+
this.updateWakeLock();
|
|
11525
11909
|
this.changeDetectorRef.detectChanges();
|
|
11526
11910
|
}
|
|
11527
|
-
postRecording(wavFile, recUrl) {
|
|
11528
|
-
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
11529
|
-
let ul = new Upload(wavBlob, recUrl);
|
|
11530
|
-
this.uploader.queueUpload(ul);
|
|
11531
|
-
}
|
|
11532
11911
|
postRecordingMultipart(wavFile, uuid, sessionId, startedDate, recUrl) {
|
|
11533
11912
|
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
11534
11913
|
let fd = new FormData();
|
|
@@ -11545,6 +11924,25 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11545
11924
|
let ul = new Upload(fd, recUrl);
|
|
11546
11925
|
this.uploader.queueUpload(ul);
|
|
11547
11926
|
}
|
|
11927
|
+
postChunkAudioBuffer(audioBuffer, chunkIdx) {
|
|
11928
|
+
var _a;
|
|
11929
|
+
this.processingRecording = true;
|
|
11930
|
+
let ww = new WavWriter();
|
|
11931
|
+
//new REST API URL
|
|
11932
|
+
let apiEndPoint = '';
|
|
11933
|
+
if (this.config && this.config.apiEndPoint) {
|
|
11934
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
11935
|
+
}
|
|
11936
|
+
if (apiEndPoint !== '') {
|
|
11937
|
+
apiEndPoint = apiEndPoint + '/';
|
|
11938
|
+
}
|
|
11939
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
11940
|
+
let recUrl = sessionsUrl + '/' + ((_a = this.session) === null || _a === void 0 ? void 0 : _a.sessionId) + '/' + RECFILE_API_CTX + '/' + this.rfUuid + '/' + chunkIdx;
|
|
11941
|
+
ww.writeAsync(audioBuffer, (wavFile) => {
|
|
11942
|
+
this.postRecording(wavFile, recUrl);
|
|
11943
|
+
this.processingRecording = false;
|
|
11944
|
+
});
|
|
11945
|
+
}
|
|
11548
11946
|
stop() {
|
|
11549
11947
|
if (this.ac) {
|
|
11550
11948
|
this.ac.close();
|
|
@@ -11572,8 +11970,8 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11572
11970
|
}
|
|
11573
11971
|
}
|
|
11574
11972
|
}
|
|
11575
|
-
AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
11576
|
-
AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
11973
|
+
AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorder, deps: [{ token: i0.ChangeDetectorRef }, { token: i0.Renderer2 }, { token: i1$1.ActivatedRoute }, { token: i1$2.MatDialog }, { token: SessionService }, { token: RecordingService }, { token: SpeechRecorderUploader }, { token: SPEECHRECORDER_CONFIG }], target: i0.ɵɵFactoryTarget.Component });
|
|
11974
|
+
AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", 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: `
|
|
11577
11975
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
11578
11976
|
<app-warningbar [show]="isDefaultAudioTestSession()"
|
|
11579
11977
|
warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
@@ -11601,9 +11999,11 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
11601
11999
|
[agc]="this.ac?.agcStatus"
|
|
11602
12000
|
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
11603
12001
|
</spr-recordingitemcontrols>
|
|
12002
|
+
|
|
11604
12003
|
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11605
12004
|
[value]="uploadProgress"
|
|
11606
12005
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
12006
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11607
12007
|
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
|
|
11608
12008
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11609
12009
|
</div>
|
|
@@ -11614,23 +12014,25 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
11614
12014
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
11615
12015
|
<div fxFlex="100% 0 100%" class="startstop">
|
|
11616
12016
|
<div style="align-content: center">
|
|
11617
|
-
|
|
11618
|
-
|
|
11619
|
-
|
|
11620
|
-
|
|
12017
|
+
<button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
|
|
12018
|
+
<mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
|
|
12019
|
+
<span style="font-weight: bolder;font-size: 14px">{{startStopNextName()}}</span>
|
|
12020
|
+
</button>
|
|
11621
12021
|
</div>
|
|
11622
12022
|
</div>
|
|
11623
12023
|
<div fxFlex="30% 1 30%" >
|
|
11624
12024
|
<div fxFlex="1 1 auto"></div>
|
|
12025
|
+
|
|
11625
12026
|
<app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11626
12027
|
[value]="uploadProgress"
|
|
11627
12028
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
12029
|
+
<app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11628
12030
|
<app-readystateindicator class="ricontrols" fxHide.xs
|
|
11629
12031
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11630
12032
|
</div>
|
|
11631
12033
|
</div>
|
|
11632
|
-
`, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height
|
|
11633
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
12034
|
+
`, isInline: true, styles: [":host{flex:2;background:lightgrey;display:flex;flex-direction:column;margin:0;padding:0;height:100%;min-height:0px;overflow:hidden}\n", ".ricontrols{padding:4px;box-sizing:border-box;height:100%}\n", ".dark{background:darkgray}\n", ".controlpanel{align-content:center;align-items:center;margin:0;padding:20px;min-height:min-content}\n", ".startstop{width:100%;text-align:center;align-content:center;align-items:center}\n", ".bigbutton{min-width:70px;min-height:50px;font-size:50px;border-radius:20px}\n"], components: [{ type: WarningBar, selector: "app-warningbar", inputs: ["warningText", "show"] }, { type: RecorderCombiPane, selector: "app-recordercombipane", inputs: ["selectDisabled", "selectedRecordingFile", "audioSignalCollapsed", "displayAudioClip", "playStartAction", "playSelectionAction", "autoPlayOnSelectToggleAction", "playStopAction"], outputs: ["selectedRecordingFileChanged"] }, { type: LevelBar, selector: "audio-levelbar", inputs: ["streamingMode", "displayLevelInfos"] }, { type: RecordingItemControls, selector: "spr-recordingitemcontrols", inputs: ["audioSignalCollapsed", "enableDownload", "peakDbLvl", "agc", "audioLoaded", "playStartAction", "playStopAction", "displayLevelInfos"], outputs: ["onShowRecordingDetails", "onDownloadRecording"] }, { type: UploadStatus, selector: "app-uploadstatus", inputs: ["value", "awaitNewUpload", "status"] }, { type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: ["screenLocked"] }, { type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: ["ready"] }, { type: StatusDisplay, selector: "app-sprstatusdisplay", inputs: ["statusAlertType", "statusMsg", "statusWaiting"] }, { type: i3$2.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"] }, { type: i2.MatIcon, selector: "mat-icon", inputs: ["color", "inline", "svgIcon", "fontSet", "fontIcon"], exportAs: ["matIcon"] }], directives: [{ type: i8.DefaultLayoutDirective, selector: " [fxLayout], [fxLayout.xs], [fxLayout.sm], [fxLayout.md], [fxLayout.lg], [fxLayout.xl], [fxLayout.lt-sm], [fxLayout.lt-md], [fxLayout.lt-lg], [fxLayout.lt-xl], [fxLayout.gt-xs], [fxLayout.gt-sm], [fxLayout.gt-md], [fxLayout.gt-lg]", inputs: ["fxLayout", "fxLayout.xs", "fxLayout.sm", "fxLayout.md", "fxLayout.lg", "fxLayout.xl", "fxLayout.lt-sm", "fxLayout.lt-md", "fxLayout.lt-lg", "fxLayout.lt-xl", "fxLayout.gt-xs", "fxLayout.gt-sm", "fxLayout.gt-md", "fxLayout.gt-lg"] }, { type: i3$1.DefaultStyleDirective, selector: " [ngStyle], [ngStyle.xs], [ngStyle.sm], [ngStyle.md], [ngStyle.lg], [ngStyle.xl], [ngStyle.lt-sm], [ngStyle.lt-md], [ngStyle.lt-lg], [ngStyle.lt-xl], [ngStyle.gt-xs], [ngStyle.gt-sm], [ngStyle.gt-md], [ngStyle.gt-lg]", inputs: ["ngStyle", "ngStyle.xs", "ngStyle.sm", "ngStyle.md", "ngStyle.lg", "ngStyle.xl", "ngStyle.lt-sm", "ngStyle.lt-md", "ngStyle.lt-lg", "ngStyle.lt-xl", "ngStyle.gt-xs", "ngStyle.gt-sm", "ngStyle.gt-md", "ngStyle.gt-lg"] }, { type: i4.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { type: i8.DefaultFlexDirective, selector: " [fxFlex], [fxFlex.xs], [fxFlex.sm], [fxFlex.md], [fxFlex.lg], [fxFlex.xl], [fxFlex.lt-sm], [fxFlex.lt-md], [fxFlex.lt-lg], [fxFlex.lt-xl], [fxFlex.gt-xs], [fxFlex.gt-sm], [fxFlex.gt-md], [fxFlex.gt-lg]", inputs: ["fxFlex", "fxFlex.xs", "fxFlex.sm", "fxFlex.md", "fxFlex.lg", "fxFlex.xl", "fxFlex.lt-sm", "fxFlex.lt-md", "fxFlex.lt-lg", "fxFlex.lt-xl", "fxFlex.gt-xs", "fxFlex.gt-sm", "fxFlex.gt-md", "fxFlex.gt-lg"] }, { type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i3$1.DefaultShowHideDirective, selector: " [fxShow], [fxShow.print], [fxShow.xs], [fxShow.sm], [fxShow.md], [fxShow.lg], [fxShow.xl], [fxShow.lt-sm], [fxShow.lt-md], [fxShow.lt-lg], [fxShow.lt-xl], [fxShow.gt-xs], [fxShow.gt-sm], [fxShow.gt-md], [fxShow.gt-lg], [fxHide], [fxHide.print], [fxHide.xs], [fxHide.sm], [fxHide.md], [fxHide.lg], [fxHide.xl], [fxHide.lt-sm], [fxHide.lt-md], [fxHide.lt-lg], [fxHide.lt-xl], [fxHide.gt-xs], [fxHide.gt-sm], [fxHide.gt-md], [fxHide.gt-lg]", inputs: ["fxShow", "fxShow.print", "fxShow.xs", "fxShow.sm", "fxShow.md", "fxShow.lg", "fxShow.xl", "fxShow.lt-sm", "fxShow.lt-md", "fxShow.lt-lg", "fxShow.lt-xl", "fxShow.gt-xs", "fxShow.gt-sm", "fxShow.gt-md", "fxShow.gt-lg", "fxHide", "fxHide.print", "fxHide.xs", "fxHide.sm", "fxHide.md", "fxHide.lg", "fxHide.xl", "fxHide.lt-sm", "fxHide.lt-md", "fxHide.lt-lg", "fxHide.lt-xl", "fxHide.gt-xs", "fxHide.gt-sm", "fxHide.gt-md", "fxHide.gt-lg"] }] });
|
|
12035
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorder, decorators: [{
|
|
11634
12036
|
type: Component,
|
|
11635
12037
|
args: [{
|
|
11636
12038
|
selector: 'app-audiorecorder',
|
|
@@ -11663,9 +12065,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11663
12065
|
[agc]="this.ac?.agcStatus"
|
|
11664
12066
|
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
11665
12067
|
</spr-recordingitemcontrols>
|
|
12068
|
+
|
|
11666
12069
|
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11667
12070
|
[value]="uploadProgress"
|
|
11668
12071
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
12072
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11669
12073
|
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
|
|
11670
12074
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11671
12075
|
</div>
|
|
@@ -11676,17 +12080,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11676
12080
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
11677
12081
|
<div fxFlex="100% 0 100%" class="startstop">
|
|
11678
12082
|
<div style="align-content: center">
|
|
11679
|
-
|
|
11680
|
-
|
|
11681
|
-
|
|
11682
|
-
|
|
12083
|
+
<button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
|
|
12084
|
+
<mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
|
|
12085
|
+
<span style="font-weight: bolder;font-size: 14px">{{startStopNextName()}}</span>
|
|
12086
|
+
</button>
|
|
11683
12087
|
</div>
|
|
11684
12088
|
</div>
|
|
11685
12089
|
<div fxFlex="30% 1 30%" >
|
|
11686
12090
|
<div fxFlex="1 1 auto"></div>
|
|
12091
|
+
|
|
11687
12092
|
<app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11688
12093
|
[value]="uploadProgress"
|
|
11689
12094
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
12095
|
+
<app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11690
12096
|
<app-readystateindicator class="ricontrols" fxHide.xs
|
|
11691
12097
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11692
12098
|
</div>
|
|
@@ -11729,13 +12135,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11729
12135
|
]
|
|
11730
12136
|
}]
|
|
11731
12137
|
}], ctorParameters: function () {
|
|
11732
|
-
return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$1.ActivatedRoute }, { type: i1$2.MatDialog }, { type:
|
|
12138
|
+
return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$1.ActivatedRoute }, { type: i1$2.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
|
|
11733
12139
|
type: Inject,
|
|
11734
12140
|
args: [SPEECHRECORDER_CONFIG]
|
|
11735
12141
|
}] }];
|
|
11736
|
-
}, propDecorators: {
|
|
11737
|
-
type: Input
|
|
11738
|
-
}], projectName: [{
|
|
12142
|
+
}, propDecorators: { projectName: [{
|
|
11739
12143
|
type: Input
|
|
11740
12144
|
}], recorderCombiPane: [{
|
|
11741
12145
|
type: ViewChild,
|
|
@@ -11753,7 +12157,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11753
12157
|
args: ['window:keydown', ['$event']]
|
|
11754
12158
|
}] } });
|
|
11755
12159
|
class AudioRecorderComponent extends RecorderComponent {
|
|
11756
|
-
constructor(injector, route, router, changeDetectorRef, sessionService, projectService,
|
|
12160
|
+
constructor(injector, route, router, changeDetectorRef, sessionService, projectService, uploader) {
|
|
11757
12161
|
super(uploader);
|
|
11758
12162
|
this.injector = injector;
|
|
11759
12163
|
this.route = route;
|
|
@@ -11761,7 +12165,6 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
11761
12165
|
this.changeDetectorRef = changeDetectorRef;
|
|
11762
12166
|
this.sessionService = sessionService;
|
|
11763
12167
|
this.projectService = projectService;
|
|
11764
|
-
this.recFilesService = recFilesService;
|
|
11765
12168
|
this.uploader = uploader;
|
|
11766
12169
|
}
|
|
11767
12170
|
ngOnInit() {
|
|
@@ -11815,6 +12218,9 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
11815
12218
|
ngOnDestroy() {
|
|
11816
12219
|
//super.ngOnDestroy();
|
|
11817
12220
|
}
|
|
12221
|
+
get screenLocked() {
|
|
12222
|
+
return this.ar.screenLocked;
|
|
12223
|
+
}
|
|
11818
12224
|
fetchSession(sessionId) {
|
|
11819
12225
|
let sessObs = this.sessionService.sessionObserver(sessionId);
|
|
11820
12226
|
if (sessObs) {
|
|
@@ -11868,17 +12274,18 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
11868
12274
|
}
|
|
11869
12275
|
this.ar.uploadProgress = percentUpl;
|
|
11870
12276
|
}
|
|
12277
|
+
this.ar.updateWakeLock(this.dataSaved);
|
|
11871
12278
|
this.changeDetectorRef.detectChanges();
|
|
11872
12279
|
}
|
|
11873
12280
|
ready() {
|
|
11874
12281
|
return this.dataSaved && !this.ar.isActive();
|
|
11875
12282
|
}
|
|
11876
12283
|
}
|
|
11877
|
-
AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
11878
|
-
AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
12284
|
+
AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorderComponent, deps: [{ token: i0.Injector }, { token: i1$1.ActivatedRoute }, { token: i1$1.Router }, { token: i0.ChangeDetectorRef }, { token: SessionService }, { token: ProjectService }, { token: SpeechRecorderUploader }], target: i0.ɵɵFactoryTarget.Component });
|
|
12285
|
+
AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: AudioRecorderComponent, selector: "app-audiorecorder-comp", providers: [SessionService], viewQueries: [{ propertyName: "ar", first: true, predicate: AudioRecorder, descendants: true, static: true }], usesInheritance: true, ngImport: i0, template: `
|
|
11879
12286
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
11880
|
-
`, isInline: true, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"], components: [{ type: AudioRecorder, selector: "app-audiorecorder", inputs: ["
|
|
11881
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
12287
|
+
`, isInline: true, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"], components: [{ type: AudioRecorder, selector: "app-audiorecorder", inputs: ["projectName", "dataSaved"] }] });
|
|
12288
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorderComponent, decorators: [{
|
|
11882
12289
|
type: Component,
|
|
11883
12290
|
args: [{
|
|
11884
12291
|
selector: 'app-audiorecorder-comp',
|
|
@@ -11895,7 +12302,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11895
12302
|
|
|
11896
12303
|
}`]
|
|
11897
12304
|
}]
|
|
11898
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type:
|
|
12305
|
+
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type: SpeechRecorderUploader }]; }, propDecorators: { ar: [{
|
|
11899
12306
|
type: ViewChild,
|
|
11900
12307
|
args: [AudioRecorder, { static: true }]
|
|
11901
12308
|
}] } });
|
|
@@ -11929,22 +12336,22 @@ class SpeechrecorderngModule {
|
|
|
11929
12336
|
};
|
|
11930
12337
|
}
|
|
11931
12338
|
}
|
|
11932
|
-
SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
11933
|
-
SpeechrecorderngModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.
|
|
11934
|
-
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [i1$1.RouterModule, FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule], exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder] });
|
|
11935
|
-
SpeechrecorderngModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.
|
|
11936
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
12339
|
+
SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12340
|
+
SpeechrecorderngModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngModule, declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
|
|
12341
|
+
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder], imports: [i1$1.RouterModule, FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule], exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder] });
|
|
12342
|
+
SpeechrecorderngModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngModule, providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader], imports: [[RouterModule.forChild(SPR_ROUTES), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule]] });
|
|
12343
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
|
|
11937
12344
|
type: NgModule,
|
|
11938
12345
|
args: [{
|
|
11939
12346
|
declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
|
|
11940
|
-
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder],
|
|
12347
|
+
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder],
|
|
11941
12348
|
exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder],
|
|
11942
12349
|
imports: [RouterModule.forChild(SPR_ROUTES), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule],
|
|
11943
12350
|
providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader]
|
|
11944
12351
|
}]
|
|
11945
12352
|
}] });
|
|
11946
12353
|
|
|
11947
|
-
const VERSION = '2.
|
|
12354
|
+
const VERSION = '2.25.2';
|
|
11948
12355
|
|
|
11949
12356
|
/*
|
|
11950
12357
|
* Public API Surface of speechrecorderng
|