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 () { return [{ type: i1.HttpClient }, { type: i4.PlatformLocation }, { type: SpeechRecorderConfig, decorators: [{
|
|
1846
1846
|
type: Inject,
|
|
@@ -1896,9 +1896,9 @@ class SessionService {
|
|
|
1896
1896
|
}
|
|
1897
1897
|
}
|
|
1898
1898
|
SessionService.SESSION_API_CTX = 'session';
|
|
1899
|
-
SessionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
1900
|
-
SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
1901
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
1899
|
+
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 });
|
|
1900
|
+
SessionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionService });
|
|
1901
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionService, decorators: [{
|
|
1902
1902
|
type: Injectable
|
|
1903
1903
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
1904
1904
|
type: Inject,
|
|
@@ -1937,8 +1937,8 @@ class SimpleTrafficLight {
|
|
|
1937
1937
|
}
|
|
1938
1938
|
}
|
|
1939
1939
|
}
|
|
1940
|
-
SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
1941
|
-
SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
1940
|
+
SimpleTrafficLight.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SimpleTrafficLight, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
1941
|
+
SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: SimpleTrafficLight, selector: "app-simpletrafficlight", inputs: { status: "status" }, ngImport: i0, template: `
|
|
1942
1942
|
|
|
1943
1943
|
<div>
|
|
1944
1944
|
<div class="circle {{lighttop}}"></div>
|
|
@@ -1946,7 +1946,7 @@ SimpleTrafficLight.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
|
|
|
1946
1946
|
<div class="circle {{lightbottom}}"></div>
|
|
1947
1947
|
</div>
|
|
1948
1948
|
`, 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"] });
|
|
1949
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
1949
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SimpleTrafficLight, decorators: [{
|
|
1950
1950
|
type: Component,
|
|
1951
1951
|
args: [{
|
|
1952
1952
|
selector: 'app-simpletrafficlight',
|
|
@@ -2052,9 +2052,9 @@ class CanvasLayerComponent {
|
|
|
2052
2052
|
}
|
|
2053
2053
|
}
|
|
2054
2054
|
}
|
|
2055
|
-
CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2056
|
-
CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
2057
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2055
|
+
CanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CanvasLayerComponent, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
2056
|
+
CanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: CanvasLayerComponent, ngImport: i0 });
|
|
2057
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: CanvasLayerComponent, decorators: [{
|
|
2058
2058
|
type: Directive
|
|
2059
2059
|
}], ctorParameters: function () { return []; } });
|
|
2060
2060
|
|
|
@@ -2287,9 +2287,9 @@ class BasicAudioCanvasLayerComponent extends CanvasLayerComponent {
|
|
|
2287
2287
|
//});
|
|
2288
2288
|
}
|
|
2289
2289
|
}
|
|
2290
|
-
BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2291
|
-
BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
2292
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2290
|
+
BasicAudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BasicAudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2291
|
+
BasicAudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: BasicAudioCanvasLayerComponent, usesInheritance: true, ngImport: i0 });
|
|
2292
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: BasicAudioCanvasLayerComponent, decorators: [{
|
|
2293
2293
|
type: Directive
|
|
2294
2294
|
}] });
|
|
2295
2295
|
class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
|
|
@@ -2490,9 +2490,9 @@ class AudioCanvasLayerComponent extends BasicAudioCanvasLayerComponent {
|
|
|
2490
2490
|
}
|
|
2491
2491
|
}
|
|
2492
2492
|
}
|
|
2493
|
-
AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2494
|
-
AudioCanvasLayerComponent.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
2495
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2493
|
+
AudioCanvasLayerComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioCanvasLayerComponent, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
2494
|
+
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 });
|
|
2495
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioCanvasLayerComponent, decorators: [{
|
|
2496
2496
|
type: Directive
|
|
2497
2497
|
}], propDecorators: { bgCanvasRef: [{
|
|
2498
2498
|
type: ViewChild,
|
|
@@ -2815,14 +2815,14 @@ class AudioSignal extends AudioCanvasLayerComponent {
|
|
|
2815
2815
|
this.playFramePosition = 0;
|
|
2816
2816
|
}
|
|
2817
2817
|
}
|
|
2818
|
-
AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
2819
|
-
AudioSignal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
2818
|
+
AudioSignal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioSignal, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
2819
|
+
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: `
|
|
2820
2820
|
<canvas #bg height="10"></canvas>
|
|
2821
2821
|
<canvas #audioSignal height="10"></canvas>
|
|
2822
2822
|
<canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
|
|
2823
2823
|
(mouseleave)="updateCursorCanvas($event, false)"></canvas>
|
|
2824
2824
|
<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"] });
|
|
2825
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
2825
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioSignal, decorators: [{
|
|
2826
2826
|
type: Component,
|
|
2827
2827
|
args: [{
|
|
2828
2828
|
selector: 'audio-signal',
|
|
@@ -3798,14 +3798,14 @@ class Sonagram extends AudioCanvasLayerComponent {
|
|
|
3798
3798
|
//this.startRender();
|
|
3799
3799
|
}
|
|
3800
3800
|
}
|
|
3801
|
-
Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
3802
|
-
Sonagram.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
3801
|
+
Sonagram.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Sonagram, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3802
|
+
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: `
|
|
3803
3803
|
<canvas #sonagram height="10"></canvas>
|
|
3804
3804
|
<canvas #bg height="10"></canvas>
|
|
3805
3805
|
<canvas #cursor height="10" (mousedown)="selectionStart($event)" (mouseover)="updateCursorCanvas($event)" (mousemove)="updateCursorCanvas($event)"
|
|
3806
3806
|
(mouseleave)="updateCursorCanvas($event, false)"></canvas>
|
|
3807
3807
|
<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"] });
|
|
3808
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
3808
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Sonagram, decorators: [{
|
|
3809
3809
|
type: Component,
|
|
3810
3810
|
args: [{
|
|
3811
3811
|
selector: 'audio-sonagram',
|
|
@@ -4170,8 +4170,8 @@ class AudioClipUIContainer extends BasicAudioCanvasLayerComponent {
|
|
|
4170
4170
|
}
|
|
4171
4171
|
}
|
|
4172
4172
|
AudioClipUIContainer.DIVIDER_PIXEL_SIZE = 10;
|
|
4173
|
-
AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4174
|
-
AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4173
|
+
AudioClipUIContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioClipUIContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4174
|
+
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: `
|
|
4175
4175
|
<div #virtualCanvas>
|
|
4176
4176
|
<canvas #divider (mousedown)="mousedown($event)" (mouseover)="mouseover($event)"
|
|
4177
4177
|
(mouseleave)="mouseleave($event)" height="10"></canvas>
|
|
@@ -4179,7 +4179,7 @@ AudioClipUIContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", v
|
|
|
4179
4179
|
<audio-sonagram [pointerPosition]="pointer" [selecting]="selecting" [selection]="selection" (pointerPositionEventEmitter)="pointerPositionChanged($event)" (selectingEventEmitter)="selectingChanged($event)" (selectedEventEmitter)="selectionChanged($event)"></audio-sonagram>
|
|
4180
4180
|
</div>
|
|
4181
4181
|
`, 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" }] });
|
|
4182
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4182
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioClipUIContainer, decorators: [{
|
|
4183
4183
|
type: Component,
|
|
4184
4184
|
args: [{
|
|
4185
4185
|
selector: 'app-audio',
|
|
@@ -4365,13 +4365,13 @@ class AudioDisplayScrollPane {
|
|
|
4365
4365
|
this.ac.playFramePosition = framePos;
|
|
4366
4366
|
}
|
|
4367
4367
|
}
|
|
4368
|
-
AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4369
|
-
AudioDisplayScrollPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4368
|
+
AudioDisplayScrollPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayScrollPane, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4369
|
+
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: `
|
|
4370
4370
|
|
|
4371
4371
|
<app-audio #audioSignalContainer (selectionEventEmitter)="selectionChanged($event)"></app-audio>
|
|
4372
4372
|
|
|
4373
4373
|
`, 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"] }] });
|
|
4374
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4374
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayScrollPane, decorators: [{
|
|
4375
4375
|
type: Component,
|
|
4376
4376
|
args: [{
|
|
4377
4377
|
selector: 'audio-display-scroll-pane',
|
|
@@ -4458,8 +4458,8 @@ class AudioDisplayControl {
|
|
|
4458
4458
|
this.status = 'ERROR';
|
|
4459
4459
|
}
|
|
4460
4460
|
}
|
|
4461
|
-
AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4462
|
-
AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4461
|
+
AudioDisplayControl.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayControl, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
4462
|
+
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: `
|
|
4463
4463
|
<div #controlPanel style="display:flex;flex-direction: row;">
|
|
4464
4464
|
<fieldset>
|
|
4465
4465
|
|
|
@@ -4503,7 +4503,7 @@ AudioDisplayControl.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ve
|
|
|
4503
4503
|
|
|
4504
4504
|
</fieldset>
|
|
4505
4505
|
</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"] }] });
|
|
4506
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4506
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayControl, decorators: [{
|
|
4507
4507
|
type: Component,
|
|
4508
4508
|
args: [{
|
|
4509
4509
|
selector: 'audio-display-control',
|
|
@@ -4645,8 +4645,8 @@ class AudioDisplay {
|
|
|
4645
4645
|
this.status = 'ERROR';
|
|
4646
4646
|
}
|
|
4647
4647
|
}
|
|
4648
|
-
AudioDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4649
|
-
AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4648
|
+
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 });
|
|
4649
|
+
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: `
|
|
4650
4650
|
|
|
4651
4651
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
4652
4652
|
|
|
@@ -4660,7 +4660,7 @@ AudioDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
4660
4660
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
4661
4661
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control>
|
|
4662
4662
|
`, 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"] }] });
|
|
4663
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4663
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplay, decorators: [{
|
|
4664
4664
|
type: Component,
|
|
4665
4665
|
args: [{
|
|
4666
4666
|
selector: 'app-audiodisplay',
|
|
@@ -4728,9 +4728,9 @@ class ScrollIntoViewDirective {
|
|
|
4728
4728
|
}
|
|
4729
4729
|
}
|
|
4730
4730
|
}
|
|
4731
|
-
ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4732
|
-
ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.
|
|
4733
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4731
|
+
ScrollIntoViewDirective.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollIntoViewDirective, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Directive });
|
|
4732
|
+
ScrollIntoViewDirective.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.3.11", type: ScrollIntoViewDirective, selector: "[scrollIntoViewToBottom]", inputs: { scrollIntoViewToBottom: "scrollIntoViewToBottom" }, ngImport: i0 });
|
|
4733
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollIntoViewDirective, decorators: [{
|
|
4734
4734
|
type: Directive,
|
|
4735
4735
|
args: [{
|
|
4736
4736
|
selector: "[scrollIntoViewToBottom]"
|
|
@@ -4764,8 +4764,8 @@ class Progress {
|
|
|
4764
4764
|
}
|
|
4765
4765
|
}
|
|
4766
4766
|
}
|
|
4767
|
-
Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4768
|
-
Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4767
|
+
Progress.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Progress, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4768
|
+
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: `
|
|
4769
4769
|
|
|
4770
4770
|
<table class="mat-typography">
|
|
4771
4771
|
<thead>
|
|
@@ -4793,7 +4793,7 @@ Progress.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.
|
|
|
4793
4793
|
</tbody>
|
|
4794
4794
|
</table>
|
|
4795
4795
|
`, 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"] }] });
|
|
4796
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4796
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Progress, decorators: [{
|
|
4797
4797
|
type: Component,
|
|
4798
4798
|
args: [{
|
|
4799
4799
|
selector: 'app-sprprogress',
|
|
@@ -4899,12 +4899,12 @@ class Recinstructions {
|
|
|
4899
4899
|
return riTxt;
|
|
4900
4900
|
}
|
|
4901
4901
|
}
|
|
4902
|
-
Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
4903
|
-
Recinstructions.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
4902
|
+
Recinstructions.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Recinstructions, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
4903
|
+
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: `
|
|
4904
4904
|
|
|
4905
4905
|
{{displayText()}}
|
|
4906
4906
|
`, isInline: true, styles: [":host{justify-content:left;align-items:flex-start;background:white;text-align:left;font-size:1em;flex:0;width:100%}\n"] });
|
|
4907
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
4907
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Recinstructions, decorators: [{
|
|
4908
4908
|
type: Component,
|
|
4909
4909
|
args: [{
|
|
4910
4910
|
selector: 'spr-recinstructions',
|
|
@@ -5092,13 +5092,13 @@ class Prompter {
|
|
|
5092
5092
|
}
|
|
5093
5093
|
}
|
|
5094
5094
|
}
|
|
5095
|
-
Prompter.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5096
|
-
Prompter.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5095
|
+
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 });
|
|
5096
|
+
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: `
|
|
5097
5097
|
|
|
5098
5098
|
<!--<ng-template [ngIf]="text">{{text}}</ng-template>-->
|
|
5099
5099
|
<!-- <img *ngIf="src" #promptImage [src]="srcUrl()" [height]="prompterHeight-20" /> -->
|
|
5100
5100
|
`, 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"] });
|
|
5101
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5101
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Prompter, decorators: [{
|
|
5102
5102
|
type: Component,
|
|
5103
5103
|
args: [{
|
|
5104
5104
|
selector: 'app-sprprompter',
|
|
@@ -5272,11 +5272,11 @@ class PromptContainer {
|
|
|
5272
5272
|
}
|
|
5273
5273
|
}
|
|
5274
5274
|
}
|
|
5275
|
-
PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5276
|
-
PromptContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5275
|
+
PromptContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5276
|
+
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: `
|
|
5277
5277
|
<app-sprprompter #prompter [projectName]="projectName" [promptMediaItems]="mediaitems" [style.font-size]="fontSize+'px'" [style.visibility]="prDisplay" [prompterHeight]="prompterHeight"></app-sprprompter>
|
|
5278
5278
|
`, 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"] }] });
|
|
5279
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5279
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptContainer, decorators: [{
|
|
5280
5280
|
type: Component,
|
|
5281
5281
|
args: [{
|
|
5282
5282
|
selector: 'app-sprpromptcontainer',
|
|
@@ -5419,15 +5419,15 @@ class PromptingContainer {
|
|
|
5419
5419
|
//ev.preventDefault();
|
|
5420
5420
|
}
|
|
5421
5421
|
}
|
|
5422
|
-
PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5423
|
-
PromptingContainer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5422
|
+
PromptingContainer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptingContainer, deps: [{ token: i0.ElementRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
5423
|
+
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: `
|
|
5424
5424
|
<spr-recinstructions [selectedItemIdx]="selectedItemIdx" [itemCount]="itemCount"
|
|
5425
5425
|
[recinstructions]="promptItem?.recinstructions?.recinstructions"></spr-recinstructions>
|
|
5426
5426
|
<app-sprpromptcontainer [projectName]="projectName"
|
|
5427
5427
|
[mediaitems]="showPrompt?(promptItem?promptItem.mediaitems:null):null"></app-sprpromptcontainer>
|
|
5428
5428
|
|
|
5429
5429
|
`, 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"] }] });
|
|
5430
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5430
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: PromptingContainer, decorators: [{
|
|
5431
5431
|
type: Component,
|
|
5432
5432
|
args: [{
|
|
5433
5433
|
selector: 'app-sprpromptingcontainer',
|
|
@@ -5499,8 +5499,8 @@ class Prompting {
|
|
|
5499
5499
|
this.onPrevItem.emit();
|
|
5500
5500
|
}
|
|
5501
5501
|
}
|
|
5502
|
-
Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5503
|
-
Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5502
|
+
Prompting.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Prompting, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
5503
|
+
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: `
|
|
5504
5504
|
|
|
5505
5505
|
<app-simpletrafficlight [status]="startStopSignalState"></app-simpletrafficlight>
|
|
5506
5506
|
<app-sprpromptingcontainer [projectName]="projectName" [promptItem]="promptItem" [showPrompt]="showPrompt"
|
|
@@ -5523,7 +5523,7 @@ Prompting.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13
|
|
|
5523
5523
|
|
|
5524
5524
|
|
|
5525
5525
|
`, 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"] }] });
|
|
5526
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5526
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: Prompting, decorators: [{
|
|
5527
5527
|
type: Component,
|
|
5528
5528
|
args: [{
|
|
5529
5529
|
selector: 'app-sprprompting',
|
|
@@ -5657,98 +5657,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
5657
5657
|
type: Output
|
|
5658
5658
|
}] } });
|
|
5659
5659
|
|
|
5660
|
-
class Float32ArrayChunkerOutStream {
|
|
5661
|
-
constructor(outStream) {
|
|
5662
|
-
this.outStream = outStream;
|
|
5663
|
-
this.bufs = new Array();
|
|
5664
|
-
this._channels = 0;
|
|
5665
|
-
this._chunkSize = 0;
|
|
5666
|
-
this.filled = 0;
|
|
5667
|
-
this.receivedFrames = 0;
|
|
5668
|
-
this.sentFrames = 0;
|
|
5669
|
-
}
|
|
5670
|
-
createBuffers() {
|
|
5671
|
-
this.bufs = new Array(this._channels);
|
|
5672
|
-
for (let ch = 0; ch < this._channels; ch++) {
|
|
5673
|
-
this.bufs[ch] = new Float32Array(this._chunkSize);
|
|
5674
|
-
}
|
|
5675
|
-
}
|
|
5676
|
-
set chunkSize(chunkSize) {
|
|
5677
|
-
this._chunkSize = chunkSize;
|
|
5678
|
-
this.createBuffers();
|
|
5679
|
-
}
|
|
5680
|
-
set channels(channels) {
|
|
5681
|
-
this._channels = channels;
|
|
5682
|
-
this.createBuffers();
|
|
5683
|
-
}
|
|
5684
|
-
write(buffers) {
|
|
5685
|
-
let copied = 0;
|
|
5686
|
-
if (buffers.length > 0) {
|
|
5687
|
-
let buffersLen = buffers[0].length;
|
|
5688
|
-
this.receivedFrames += buffersLen;
|
|
5689
|
-
let avail = buffersLen;
|
|
5690
|
-
// Fill out buffers until all values copied
|
|
5691
|
-
while (avail > 0) {
|
|
5692
|
-
let toFill = this._chunkSize - this.filled;
|
|
5693
|
-
if (toFill > avail) {
|
|
5694
|
-
toFill = avail;
|
|
5695
|
-
}
|
|
5696
|
-
let sliceEnd = copied + toFill;
|
|
5697
|
-
// Firefox on Android sends only the first channel
|
|
5698
|
-
for (let ch = 0; ch < buffersLen; ch++) {
|
|
5699
|
-
if (buffers[ch]) {
|
|
5700
|
-
let cpPrt = buffers[ch].slice(copied, sliceEnd);
|
|
5701
|
-
let buf = this.bufs[ch];
|
|
5702
|
-
buf.set(cpPrt, this.filled);
|
|
5703
|
-
}
|
|
5704
|
-
}
|
|
5705
|
-
copied += toFill;
|
|
5706
|
-
avail -= toFill;
|
|
5707
|
-
this.filled += toFill;
|
|
5708
|
-
if (this.filled == this._chunkSize) {
|
|
5709
|
-
this.outStream.write(this.bufs);
|
|
5710
|
-
this.sentFrames += this.filled;
|
|
5711
|
-
this.filled = 0;
|
|
5712
|
-
}
|
|
5713
|
-
}
|
|
5714
|
-
}
|
|
5715
|
-
return copied;
|
|
5716
|
-
}
|
|
5717
|
-
flush() {
|
|
5718
|
-
if (this.filled > 0) {
|
|
5719
|
-
let restBufs = new Array(this._channels);
|
|
5720
|
-
for (let ch = 0; ch < this._channels; ch++) {
|
|
5721
|
-
restBufs[ch] = this.bufs[ch].slice(0, this.filled);
|
|
5722
|
-
}
|
|
5723
|
-
this.outStream.write(restBufs);
|
|
5724
|
-
this.outStream.flush();
|
|
5725
|
-
this.sentFrames += this.filled;
|
|
5726
|
-
this.filled = 0;
|
|
5727
|
-
}
|
|
5728
|
-
}
|
|
5729
|
-
close() {
|
|
5730
|
-
this.outStream.close();
|
|
5731
|
-
}
|
|
5732
|
-
}
|
|
5733
|
-
|
|
5734
|
-
class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream {
|
|
5735
|
-
constructor(outStream, chunkDurationSeconds) {
|
|
5736
|
-
super(outStream);
|
|
5737
|
-
this.chunkDurationSeconds = chunkDurationSeconds;
|
|
5738
|
-
this.sampleRate = null;
|
|
5739
|
-
this.sequenceAudioFloat32OutStream = outStream;
|
|
5740
|
-
}
|
|
5741
|
-
setFormat(channels, sampleRate) {
|
|
5742
|
-
this.channels = channels;
|
|
5743
|
-
this.sampleRate = sampleRate;
|
|
5744
|
-
this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
|
|
5745
|
-
this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
|
|
5746
|
-
}
|
|
5747
|
-
nextStream() {
|
|
5748
|
-
this.sequenceAudioFloat32OutStream.nextStream();
|
|
5749
|
-
}
|
|
5750
|
-
}
|
|
5751
|
-
|
|
5752
5660
|
class SessionFinishedDialog {
|
|
5753
5661
|
constructor(dialogRef, data) {
|
|
5754
5662
|
this.dialogRef = dialogRef;
|
|
@@ -5758,8 +5666,8 @@ class SessionFinishedDialog {
|
|
|
5758
5666
|
this.dialogRef.close();
|
|
5759
5667
|
}
|
|
5760
5668
|
}
|
|
5761
|
-
SessionFinishedDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5762
|
-
SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5669
|
+
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 });
|
|
5670
|
+
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>
|
|
5763
5671
|
<div mat-dialog-content>
|
|
5764
5672
|
|
|
5765
5673
|
<p>Thank you! The recording session is complete.</p>
|
|
@@ -5769,7 +5677,7 @@ SessionFinishedDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
5769
5677
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
5770
5678
|
</div>
|
|
5771
5679
|
`, 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]" }] });
|
|
5772
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5680
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionFinishedDialog, decorators: [{
|
|
5773
5681
|
type: Component,
|
|
5774
5682
|
args: [{
|
|
5775
5683
|
selector: 'spr-session-finished-dialog',
|
|
@@ -5798,8 +5706,8 @@ class MessageDialog {
|
|
|
5798
5706
|
this.dialogRef.close();
|
|
5799
5707
|
}
|
|
5800
5708
|
}
|
|
5801
|
-
MessageDialog.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
5802
|
-
MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
5709
|
+
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 });
|
|
5710
|
+
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>
|
|
5803
5711
|
<mat-icon *ngIf="data.type==='warning'" [style.color]="'yellow'">warning</mat-icon>{{data.title}}</h1>
|
|
5804
5712
|
<div mat-dialog-content>
|
|
5805
5713
|
|
|
@@ -5811,7 +5719,7 @@ MessageDialog.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
5811
5719
|
<button mat-button (click)="closeDialog()">OK</button>
|
|
5812
5720
|
</div>
|
|
5813
5721
|
`, 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]" }] });
|
|
5814
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
5722
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: MessageDialog, decorators: [{
|
|
5815
5723
|
type: Component,
|
|
5816
5724
|
args: [{
|
|
5817
5725
|
selector: 'msg-dialog',
|
|
@@ -6149,14 +6057,14 @@ class LevelBar {
|
|
|
6149
6057
|
}
|
|
6150
6058
|
}
|
|
6151
6059
|
}
|
|
6152
|
-
LevelBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6153
|
-
LevelBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6060
|
+
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 });
|
|
6061
|
+
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: `
|
|
6154
6062
|
<div #virtualCanvas>
|
|
6155
6063
|
<canvas #levelbar></canvas>
|
|
6156
6064
|
<canvas #markerCanvas></canvas>
|
|
6157
6065
|
</div>
|
|
6158
6066
|
`, 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"] });
|
|
6159
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6067
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: LevelBar, decorators: [{
|
|
6160
6068
|
type: Component,
|
|
6161
6069
|
args: [{
|
|
6162
6070
|
selector: 'audio-levelbar',
|
|
@@ -6219,14 +6127,14 @@ class StatusDisplay {
|
|
|
6219
6127
|
this.statusWaiting = false;
|
|
6220
6128
|
}
|
|
6221
6129
|
}
|
|
6222
|
-
StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6223
|
-
StatusDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6130
|
+
StatusDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: StatusDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6131
|
+
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: `
|
|
6224
6132
|
<p matTooltip="Status">
|
|
6225
6133
|
<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>
|
|
6226
6134
|
{{statusMsg}}
|
|
6227
6135
|
</p>
|
|
6228
6136
|
`, 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"] }] });
|
|
6229
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6137
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: StatusDisplay, decorators: [{
|
|
6230
6138
|
type: Component,
|
|
6231
6139
|
args: [{
|
|
6232
6140
|
selector: 'app-sprstatusdisplay',
|
|
@@ -6311,11 +6219,11 @@ class UploadStatus {
|
|
|
6311
6219
|
return this._status;
|
|
6312
6220
|
}
|
|
6313
6221
|
}
|
|
6314
|
-
UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6315
|
-
UploadStatus.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6222
|
+
UploadStatus.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UploadStatus, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6223
|
+
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: `
|
|
6316
6224
|
<mat-progress-spinner [mode]="spinnerMode" [color]="status" [diameter]="30" [strokeWidth]="5" [value]="_value" [matTooltip]="toolTipText"></mat-progress-spinner>
|
|
6317
6225
|
`, 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"] }] });
|
|
6318
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6226
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: UploadStatus, decorators: [{
|
|
6319
6227
|
type: Component,
|
|
6320
6228
|
args: [{
|
|
6321
6229
|
selector: 'app-uploadstatus',
|
|
@@ -6343,11 +6251,11 @@ class ProgressDisplay {
|
|
|
6343
6251
|
this.progressMsg = '[itemcode]';
|
|
6344
6252
|
}
|
|
6345
6253
|
}
|
|
6346
|
-
ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6347
|
-
ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6254
|
+
ProgressDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProgressDisplay, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6255
|
+
ProgressDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ProgressDisplay, selector: "app-sprprogressdisplay", ngImport: i0, template: `
|
|
6348
6256
|
<p>{{progressMsg}}</p>
|
|
6349
6257
|
`, isInline: true, styles: [":host{flex:1;width:100%;text-align:left}\n"] });
|
|
6350
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6258
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ProgressDisplay, decorators: [{
|
|
6351
6259
|
type: Component,
|
|
6352
6260
|
args: [{
|
|
6353
6261
|
selector: 'app-sprprogressdisplay',
|
|
@@ -6447,8 +6355,8 @@ class TransportPanel {
|
|
|
6447
6355
|
}
|
|
6448
6356
|
}
|
|
6449
6357
|
}
|
|
6450
|
-
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6451
|
-
TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6358
|
+
TransportPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TransportPanel, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6359
|
+
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: `
|
|
6452
6360
|
<button id="bwdBtn" *ngIf="navigationEnabled" (click)="actions.bwdAction.perform()" [disabled]="bwdDisabled()"
|
|
6453
6361
|
mat-raised-button>
|
|
6454
6362
|
<mat-icon>chevron_left</mat-icon>
|
|
@@ -6469,7 +6377,7 @@ TransportPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
|
6469
6377
|
</button>
|
|
6470
6378
|
|
|
6471
6379
|
`, 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"] }] });
|
|
6472
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6380
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: TransportPanel, decorators: [{
|
|
6473
6381
|
type: Component,
|
|
6474
6382
|
args: [{
|
|
6475
6383
|
selector: 'app-sprtransport',
|
|
@@ -6521,6 +6429,30 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
6521
6429
|
}], pausingEnabled: [{
|
|
6522
6430
|
type: Input
|
|
6523
6431
|
}] } });
|
|
6432
|
+
class WakeLockIndicator {
|
|
6433
|
+
constructor() {
|
|
6434
|
+
this._screenLocked = false;
|
|
6435
|
+
}
|
|
6436
|
+
set screenLocked(screenLock) {
|
|
6437
|
+
this._screenLocked = screenLock;
|
|
6438
|
+
}
|
|
6439
|
+
}
|
|
6440
|
+
WakeLockIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WakeLockIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6441
|
+
WakeLockIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: WakeLockIndicator, selector: "app-wakelockindicator", inputs: { screenLocked: "screenLocked" }, ngImport: i0, template: `
|
|
6442
|
+
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
6443
|
+
`, 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"] }] });
|
|
6444
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WakeLockIndicator, decorators: [{
|
|
6445
|
+
type: Component,
|
|
6446
|
+
args: [{
|
|
6447
|
+
selector: 'app-wakelockindicator',
|
|
6448
|
+
template: `
|
|
6449
|
+
<mat-icon *ngIf="_screenLocked">screen_lock_portrait</mat-icon>
|
|
6450
|
+
`,
|
|
6451
|
+
styles: []
|
|
6452
|
+
}]
|
|
6453
|
+
}], ctorParameters: function () { return []; }, propDecorators: { screenLocked: [{
|
|
6454
|
+
type: Input
|
|
6455
|
+
}] } });
|
|
6524
6456
|
class ReadyStateIndicator {
|
|
6525
6457
|
constructor() {
|
|
6526
6458
|
this._ready = true;
|
|
@@ -6536,16 +6468,16 @@ class ReadyStateIndicator {
|
|
|
6536
6468
|
return this._ready;
|
|
6537
6469
|
}
|
|
6538
6470
|
}
|
|
6539
|
-
ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6540
|
-
ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6541
|
-
|
|
6471
|
+
ReadyStateIndicator.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ReadyStateIndicator, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
6472
|
+
ReadyStateIndicator.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: ReadyStateIndicator, selector: "app-readystateindicator", inputs: { ready: "ready" }, ngImport: i0, template: `
|
|
6473
|
+
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
6542
6474
|
`, 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"] }] });
|
|
6543
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6475
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ReadyStateIndicator, decorators: [{
|
|
6544
6476
|
type: Component,
|
|
6545
6477
|
args: [{
|
|
6546
6478
|
selector: 'app-readystateindicator',
|
|
6547
6479
|
template: `
|
|
6548
|
-
|
|
6480
|
+
<mat-icon [matTooltip]="readyStateToolTip">{{hourGlassIconName}}</mat-icon>
|
|
6549
6481
|
`,
|
|
6550
6482
|
styles: []
|
|
6551
6483
|
}]
|
|
@@ -6566,8 +6498,8 @@ class ControlPanel {
|
|
|
6566
6498
|
return this._ready;
|
|
6567
6499
|
}
|
|
6568
6500
|
}
|
|
6569
|
-
ControlPanel.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
6570
|
-
ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6501
|
+
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 });
|
|
6502
|
+
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: `
|
|
6571
6503
|
<div fxHide.xs fxLayout="row" >
|
|
6572
6504
|
<app-sprstatusdisplay fxFlex="0 0 0" [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"
|
|
6573
6505
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
@@ -6587,8 +6519,8 @@ ControlPanel.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
6587
6519
|
<app-sprtransport [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="navigationEnabled"></app-sprtransport>
|
|
6588
6520
|
|
|
6589
6521
|
</div>
|
|
6590
|
-
`, isInline: true, styles: ["div{align-content:center;align-items:center;margin:0;padding:20px;min-height
|
|
6591
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
6522
|
+
`, 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"] }] });
|
|
6523
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ControlPanel, decorators: [{
|
|
6592
6524
|
type: Component,
|
|
6593
6525
|
args: [{
|
|
6594
6526
|
selector: 'app-sprcontrolpanel',
|
|
@@ -7057,8 +6989,8 @@ class RecordingItemControls {
|
|
|
7057
6989
|
// this.status = 'ERROR';
|
|
7058
6990
|
}
|
|
7059
6991
|
}
|
|
7060
|
-
RecordingItemControls.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7061
|
-
RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
6992
|
+
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 });
|
|
6993
|
+
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: `
|
|
7062
6994
|
<button matTooltip="Start playback" (click)="playStartAction?.perform()"
|
|
7063
6995
|
[disabled]="playStartAction?.disabled"
|
|
7064
6996
|
[style.color]="playStartAction?.disabled ? 'grey' : 'green'">
|
|
@@ -7081,7 +7013,7 @@ RecordingItemControls.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0",
|
|
|
7081
7013
|
[style.color]="(peakDbLvl > warnDbLevel)?'red':'black'">{{peakDbLvl | number:'1.1-1'}} dB </span></td></tr>
|
|
7082
7014
|
<tr *ngIf="_agc"><td>AGC:</td><td><span matTooltip="Auto gain control">{{agcString}}</span></td></tr></table></div>
|
|
7083
7015
|
`, 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 } });
|
|
7084
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
7016
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingItemControls, decorators: [{
|
|
7085
7017
|
type: Component,
|
|
7086
7018
|
args: [{
|
|
7087
7019
|
selector: 'spr-recordingitemcontrols',
|
|
@@ -7223,14 +7155,14 @@ class RecordingItemDisplay {
|
|
|
7223
7155
|
this.changeDetectorRef.detectChanges();
|
|
7224
7156
|
}
|
|
7225
7157
|
}
|
|
7226
|
-
RecordingItemDisplay.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7227
|
-
RecordingItemDisplay.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
7158
|
+
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 });
|
|
7159
|
+
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: `
|
|
7228
7160
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
7229
7161
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="streamingMode" [displayLevelInfos]="_displayLevelInfos"></audio-levelbar>
|
|
7230
7162
|
<spr-recordingitemcontrols fxFlex="0 0 0" [audioLoaded]="displayAudioBuffer!==null" [playStartAction]="playStartAction" [playStopAction]="playStopAction" [peakDbLvl]="peakDbLvl" [agc]="_agc" (onShowRecordingDetails)="onShowRecordingDetails.emit()"></spr-recordingitemcontrols>
|
|
7231
7163
|
</div>
|
|
7232
7164
|
`, 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"] }] });
|
|
7233
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
7165
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingItemDisplay, decorators: [{
|
|
7234
7166
|
type: Component,
|
|
7235
7167
|
args: [{
|
|
7236
7168
|
selector: 'spr-recordingitemdisplay',
|
|
@@ -7275,23 +7207,323 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
7275
7207
|
type: Input
|
|
7276
7208
|
}] } });
|
|
7277
7209
|
|
|
7210
|
+
class Float32ArrayChunkerOutStream {
|
|
7211
|
+
constructor(outStream) {
|
|
7212
|
+
this.outStream = outStream;
|
|
7213
|
+
this.bufs = new Array();
|
|
7214
|
+
this._channels = 0;
|
|
7215
|
+
this._chunkSize = 0;
|
|
7216
|
+
this.filled = 0;
|
|
7217
|
+
this.receivedFrames = 0;
|
|
7218
|
+
this.sentFrames = 0;
|
|
7219
|
+
}
|
|
7220
|
+
createBuffers() {
|
|
7221
|
+
this.bufs = new Array(this._channels);
|
|
7222
|
+
for (let ch = 0; ch < this._channels; ch++) {
|
|
7223
|
+
this.bufs[ch] = new Float32Array(this._chunkSize);
|
|
7224
|
+
}
|
|
7225
|
+
}
|
|
7226
|
+
set chunkSize(chunkSize) {
|
|
7227
|
+
this._chunkSize = chunkSize;
|
|
7228
|
+
this.createBuffers();
|
|
7229
|
+
}
|
|
7230
|
+
get chunkSize() {
|
|
7231
|
+
return this._chunkSize;
|
|
7232
|
+
}
|
|
7233
|
+
set channels(channels) {
|
|
7234
|
+
this._channels = channels;
|
|
7235
|
+
this.createBuffers();
|
|
7236
|
+
}
|
|
7237
|
+
get channels() {
|
|
7238
|
+
return this._channels;
|
|
7239
|
+
}
|
|
7240
|
+
available() {
|
|
7241
|
+
return this._chunkSize - this.filled;
|
|
7242
|
+
}
|
|
7243
|
+
write(buffers) {
|
|
7244
|
+
let copied = 0;
|
|
7245
|
+
if (buffers.length > 0) {
|
|
7246
|
+
let buffersLen = buffers[0].length;
|
|
7247
|
+
this.receivedFrames += buffersLen;
|
|
7248
|
+
let avail = buffersLen;
|
|
7249
|
+
// Fill out buffers until all values copied
|
|
7250
|
+
while (avail > 0) {
|
|
7251
|
+
let toFill = this._chunkSize - this.filled;
|
|
7252
|
+
if (toFill > avail) {
|
|
7253
|
+
toFill = avail;
|
|
7254
|
+
}
|
|
7255
|
+
let sliceEnd = copied + toFill;
|
|
7256
|
+
// Firefox on Android sends only the first channel
|
|
7257
|
+
for (let ch = 0; ch < buffersLen; ch++) {
|
|
7258
|
+
if (buffers[ch]) {
|
|
7259
|
+
let cpPrt = buffers[ch].slice(copied, sliceEnd);
|
|
7260
|
+
let buf = this.bufs[ch];
|
|
7261
|
+
buf.set(cpPrt, this.filled);
|
|
7262
|
+
}
|
|
7263
|
+
}
|
|
7264
|
+
copied += toFill;
|
|
7265
|
+
avail -= toFill;
|
|
7266
|
+
this.filled += toFill;
|
|
7267
|
+
if (this.filled == this._chunkSize) {
|
|
7268
|
+
this.outStream.write(this.bufs);
|
|
7269
|
+
this.sentFrames += this.filled;
|
|
7270
|
+
this.filled = 0;
|
|
7271
|
+
}
|
|
7272
|
+
}
|
|
7273
|
+
}
|
|
7274
|
+
return copied;
|
|
7275
|
+
}
|
|
7276
|
+
flush() {
|
|
7277
|
+
if (this.filled > 0) {
|
|
7278
|
+
let restBufs = new Array(this._channels);
|
|
7279
|
+
for (let ch = 0; ch < this._channels; ch++) {
|
|
7280
|
+
restBufs[ch] = this.bufs[ch].slice(0, this.filled);
|
|
7281
|
+
}
|
|
7282
|
+
this.outStream.write(restBufs);
|
|
7283
|
+
this.outStream.flush();
|
|
7284
|
+
this.sentFrames += this.filled;
|
|
7285
|
+
this.filled = 0;
|
|
7286
|
+
}
|
|
7287
|
+
}
|
|
7288
|
+
close() {
|
|
7289
|
+
this.outStream.close();
|
|
7290
|
+
}
|
|
7291
|
+
}
|
|
7292
|
+
|
|
7293
|
+
class SequenceAudioFloat32ChunkerOutStream extends Float32ArrayChunkerOutStream {
|
|
7294
|
+
constructor(outStream, chunkDurationSeconds) {
|
|
7295
|
+
super(outStream);
|
|
7296
|
+
this.chunkDurationSeconds = chunkDurationSeconds;
|
|
7297
|
+
this.sampleRate = null;
|
|
7298
|
+
this.sequenceAudioFloat32OutStream = outStream;
|
|
7299
|
+
}
|
|
7300
|
+
setFormat(channels, sampleRate) {
|
|
7301
|
+
console.debug("SequenceAudioFloat32ChunkerOutStream:setFormat(channels: " + channels + ",sampleRate: " + sampleRate + ")");
|
|
7302
|
+
this.channels = channels;
|
|
7303
|
+
this.sampleRate = sampleRate;
|
|
7304
|
+
this.chunkSize = Math.round(sampleRate * this.chunkDurationSeconds);
|
|
7305
|
+
console.debug("SequenceAudioFloat32ChunkerOutStream: chunkSize: " + this.chunkSize);
|
|
7306
|
+
this.sequenceAudioFloat32OutStream.setFormat(channels, sampleRate);
|
|
7307
|
+
}
|
|
7308
|
+
nextStream() {
|
|
7309
|
+
this.sequenceAudioFloat32OutStream.nextStream();
|
|
7310
|
+
}
|
|
7311
|
+
}
|
|
7312
|
+
/**
|
|
7313
|
+
* Streams a SequenceAudioFloat32OutStream to multiple streams
|
|
7314
|
+
*/
|
|
7315
|
+
class SequenceAudioFloat32OutStreamMultiplier {
|
|
7316
|
+
constructor() {
|
|
7317
|
+
this._sequenceAudioFloat32OutStreams = new Array();
|
|
7318
|
+
}
|
|
7319
|
+
get sequenceAudioFloat32OutStreams() {
|
|
7320
|
+
return this._sequenceAudioFloat32OutStreams;
|
|
7321
|
+
}
|
|
7322
|
+
setFormat(channels, sampleRate) {
|
|
7323
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7324
|
+
os.setFormat(channels, sampleRate);
|
|
7325
|
+
}
|
|
7326
|
+
}
|
|
7327
|
+
nextStream() {
|
|
7328
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7329
|
+
os.nextStream();
|
|
7330
|
+
}
|
|
7331
|
+
}
|
|
7332
|
+
close() {
|
|
7333
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7334
|
+
os.close();
|
|
7335
|
+
}
|
|
7336
|
+
}
|
|
7337
|
+
flush() {
|
|
7338
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7339
|
+
os.flush();
|
|
7340
|
+
}
|
|
7341
|
+
}
|
|
7342
|
+
write(buffers) {
|
|
7343
|
+
let toWrite = buffers.length;
|
|
7344
|
+
for (let os of this._sequenceAudioFloat32OutStreams) {
|
|
7345
|
+
os.write(buffers);
|
|
7346
|
+
}
|
|
7347
|
+
return toWrite;
|
|
7348
|
+
}
|
|
7349
|
+
}
|
|
7350
|
+
|
|
7351
|
+
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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';
|
|
7352
|
+
|
|
7353
|
+
/**
|
|
7354
|
+
* Utility to prevent devices from screen lock.
|
|
7355
|
+
* If supported uses the HTML5 wake lock API, if not, plays an invisible video.
|
|
7356
|
+
*
|
|
7357
|
+
* Note: I've used the GitHub project richtr/nosleep.js for that. The worked in most cases, but failed sometimes on an
|
|
7358
|
+
* Android smartphone.
|
|
7359
|
+
*/
|
|
7360
|
+
class WakeLockManager {
|
|
7361
|
+
constructor() {
|
|
7362
|
+
this.wakeLockApiSupported = false;
|
|
7363
|
+
this.wakeLockRetryCount = 0;
|
|
7364
|
+
this.randomSeekRequired = false;
|
|
7365
|
+
this._behaviorSubject = new BehaviorSubject(false);
|
|
7366
|
+
this.VIDEO_LENGTH = 10;
|
|
7367
|
+
this.wakeLockApiSupported = ('wakeLock' in navigator);
|
|
7368
|
+
console.debug("Wake lock API supported: " + this.wakeLockApiSupported);
|
|
7369
|
+
this.userAgent = UserAgentBuilder.userAgent();
|
|
7370
|
+
this.randomSeekRequired = (this.userAgent?.detectedBrowser === Browser$1.Safari);
|
|
7371
|
+
}
|
|
7372
|
+
get behaviorSubject() {
|
|
7373
|
+
return this._behaviorSubject;
|
|
7374
|
+
}
|
|
7375
|
+
enableWakeLock() {
|
|
7376
|
+
if (this.wakeLockApiSupported) {
|
|
7377
|
+
//@ts-ignore
|
|
7378
|
+
navigator.wakeLock.request('screen').then((wls) => {
|
|
7379
|
+
this.wakeLockSentinel = wls;
|
|
7380
|
+
this.wakeLockRetryCount = 0;
|
|
7381
|
+
console.debug('Wake lock screen request successful.');
|
|
7382
|
+
this._behaviorSubject.next(true);
|
|
7383
|
+
}).catch((reason) => {
|
|
7384
|
+
console.error('Wakelock failed: ' + reason);
|
|
7385
|
+
this._behaviorSubject.error(reason);
|
|
7386
|
+
});
|
|
7387
|
+
}
|
|
7388
|
+
else {
|
|
7389
|
+
if (!this.mp4VideoElement) {
|
|
7390
|
+
this.mp4VideoElement = document.createElement('video');
|
|
7391
|
+
this.mp4VideoElement.loop = !this.randomSeekRequired;
|
|
7392
|
+
this.mp4VideoElement.playsInline = true;
|
|
7393
|
+
this.mp4VideoElement.src = WAKE_LOCK_VIDEO_MP4_URI;
|
|
7394
|
+
this.mp4VideoElement.addEventListener('play', (ev) => {
|
|
7395
|
+
console.debug('Wake lock video playing...');
|
|
7396
|
+
this._behaviorSubject.next(true);
|
|
7397
|
+
});
|
|
7398
|
+
this.mp4VideoElement.addEventListener('ended', (ev) => {
|
|
7399
|
+
console.debug('Wake lock video ended.');
|
|
7400
|
+
this._behaviorSubject.next(false);
|
|
7401
|
+
});
|
|
7402
|
+
this.mp4VideoElement.addEventListener('pause', (ev) => {
|
|
7403
|
+
console.debug('Wake lock video pause.');
|
|
7404
|
+
this._behaviorSubject.next(false);
|
|
7405
|
+
});
|
|
7406
|
+
if (this.randomSeekRequired) {
|
|
7407
|
+
this.mp4VideoElement.addEventListener('timeupdate', (ev) => {
|
|
7408
|
+
if (this.randomSeekRequired && this.mp4VideoElement) {
|
|
7409
|
+
let thirdVideoLen = this.VIDEO_LENGTH / 3;
|
|
7410
|
+
if (this.mp4VideoElement.currentTime > thirdVideoLen * 2) {
|
|
7411
|
+
let newPos = (thirdVideoLen * Math.random());
|
|
7412
|
+
//console.debug('Wake lock random seek to '+newPos+'s');
|
|
7413
|
+
this.mp4VideoElement.currentTime = newPos;
|
|
7414
|
+
}
|
|
7415
|
+
}
|
|
7416
|
+
});
|
|
7417
|
+
}
|
|
7418
|
+
this.mp4VideoElement.addEventListener('error', (ev) => {
|
|
7419
|
+
console.debug('Wake lock video error: ' + ev.message);
|
|
7420
|
+
this._behaviorSubject.error(ev.error);
|
|
7421
|
+
});
|
|
7422
|
+
console.debug('Added listeners to wake lock video.');
|
|
7423
|
+
}
|
|
7424
|
+
this.startWakeLockVideo();
|
|
7425
|
+
}
|
|
7426
|
+
}
|
|
7427
|
+
startWakeLockVideo() {
|
|
7428
|
+
if (this.mp4VideoElement) {
|
|
7429
|
+
this.mp4VideoElement.play().then(() => {
|
|
7430
|
+
this.wakeLockRetryCount = 0;
|
|
7431
|
+
}).catch((err) => {
|
|
7432
|
+
console.debug('Failed starting wake lock video!');
|
|
7433
|
+
if (this.wakeLockRetryCount < 1) {
|
|
7434
|
+
window.setTimeout(() => {
|
|
7435
|
+
this.wakeLockRetryCount++;
|
|
7436
|
+
console.debug('Retry wake lock video #' + this.wakeLockRetryCount);
|
|
7437
|
+
this.startWakeLockVideo();
|
|
7438
|
+
}, 4000);
|
|
7439
|
+
}
|
|
7440
|
+
else {
|
|
7441
|
+
console.debug('Giving up to try to start wake lock video.');
|
|
7442
|
+
}
|
|
7443
|
+
});
|
|
7444
|
+
}
|
|
7445
|
+
}
|
|
7446
|
+
disableWakeLock() {
|
|
7447
|
+
if (this.wakeLockApiSupported) {
|
|
7448
|
+
this.wakeLockSentinel.release().then(() => {
|
|
7449
|
+
console.debug('Wake lock release successful.');
|
|
7450
|
+
this._behaviorSubject.next(false);
|
|
7451
|
+
}).catch((reason) => {
|
|
7452
|
+
console.error('Wakelock release failed: ' + reason);
|
|
7453
|
+
this._behaviorSubject.error(reason);
|
|
7454
|
+
});
|
|
7455
|
+
}
|
|
7456
|
+
else {
|
|
7457
|
+
if (this.mp4VideoElement) {
|
|
7458
|
+
this.mp4VideoElement.pause();
|
|
7459
|
+
}
|
|
7460
|
+
}
|
|
7461
|
+
}
|
|
7462
|
+
}
|
|
7463
|
+
|
|
7278
7464
|
const FORCE_REQUEST_AUDIO_PERMISSIONS = false;
|
|
7279
7465
|
const RECFILE_API_CTX = 'recfile';
|
|
7280
7466
|
const MAX_RECORDING_TIME_MS = 1000 * 60 * 60 * 60; // 1 hour
|
|
7281
7467
|
const LEVEL_BAR_INTERVALL_SECONDS = 0.1; // 100ms
|
|
7282
|
-
|
|
7283
|
-
|
|
7468
|
+
const NOSLEEP_VIDEO_TITLE = 'No Sleep';
|
|
7469
|
+
class ChunkManager {
|
|
7470
|
+
constructor(chunkAudioBufferReceiver) {
|
|
7471
|
+
this.chunkAudioBufferReceiver = chunkAudioBufferReceiver;
|
|
7472
|
+
this.channels = 0;
|
|
7473
|
+
this.sampleRate = -1;
|
|
7474
|
+
this.chunkIdx = 0;
|
|
7475
|
+
}
|
|
7476
|
+
set recordingFile(value) {
|
|
7477
|
+
this._rf = value;
|
|
7478
|
+
}
|
|
7479
|
+
close() {
|
|
7480
|
+
// Nothing to do
|
|
7481
|
+
}
|
|
7482
|
+
flush() {
|
|
7483
|
+
this.chunkAudioBufferReceiver.postAudioStreamEnd(this.chunkIdx);
|
|
7484
|
+
}
|
|
7485
|
+
nextStream() {
|
|
7486
|
+
// reset chunk counter
|
|
7487
|
+
this.chunkIdx = 0;
|
|
7488
|
+
this.chunkAudioBufferReceiver.postAudioStreamStart();
|
|
7489
|
+
}
|
|
7490
|
+
setFormat(channels, sampleRate) {
|
|
7491
|
+
this.channels = channels;
|
|
7492
|
+
this.sampleRate = sampleRate;
|
|
7493
|
+
}
|
|
7494
|
+
write(buffers) {
|
|
7495
|
+
let aCtx = AudioContextProvider.audioContextInstance();
|
|
7496
|
+
let bChs = buffers.length;
|
|
7497
|
+
let frameLen = 0;
|
|
7498
|
+
if (aCtx && bChs > 0) {
|
|
7499
|
+
frameLen = buffers[0].length;
|
|
7500
|
+
let ad = aCtx.createBuffer(this.channels, frameLen, this.sampleRate);
|
|
7501
|
+
for (let ch = 0; ch < this.channels; ch++) {
|
|
7502
|
+
ad.copyToChannel(buffers[ch], ch);
|
|
7503
|
+
}
|
|
7504
|
+
this.chunkAudioBufferReceiver.postChunkAudioBuffer(ad, this.chunkIdx);
|
|
7505
|
+
this.chunkIdx++;
|
|
7506
|
+
}
|
|
7507
|
+
return frameLen;
|
|
7508
|
+
}
|
|
7509
|
+
}
|
|
7510
|
+
let BasicRecorder = class BasicRecorder {
|
|
7511
|
+
constructor(dialog, sessionService, uploader, config) {
|
|
7284
7512
|
this.dialog = dialog;
|
|
7285
7513
|
this.sessionService = sessionService;
|
|
7514
|
+
this.uploader = uploader;
|
|
7515
|
+
this.config = config;
|
|
7286
7516
|
this.statusMsg = '';
|
|
7287
7517
|
this.statusWaiting = false;
|
|
7288
7518
|
this.readonly = false;
|
|
7519
|
+
this.rfUuid = null;
|
|
7289
7520
|
this.processingRecording = false;
|
|
7290
7521
|
this.ac = null;
|
|
7291
7522
|
this._wakeLock = false;
|
|
7292
7523
|
this._selectedDeviceId = undefined;
|
|
7293
7524
|
this._channelCount = 2;
|
|
7294
7525
|
this._session = null;
|
|
7526
|
+
this.startedDate = null;
|
|
7295
7527
|
this.uploadProgress = 100;
|
|
7296
7528
|
this.uploadStatus = 'ok';
|
|
7297
7529
|
this.audioSignalCollapsed = true;
|
|
@@ -7301,7 +7533,9 @@ class BasicRecorder {
|
|
|
7301
7533
|
this.audioFetchSubscription = null;
|
|
7302
7534
|
this.destroyed = false;
|
|
7303
7535
|
this.navigationDisabled = true;
|
|
7304
|
-
|
|
7536
|
+
// Default: Disabled chunked upload
|
|
7537
|
+
this._uploadChunkSizeSeconds = null;
|
|
7538
|
+
this._screenLocked = false;
|
|
7305
7539
|
this.userAgent = UserAgentBuilder.userAgent();
|
|
7306
7540
|
console.debug("Detected platform: " + this.userAgent.detectedPlatform);
|
|
7307
7541
|
console.debug("Detected browser: " + this.userAgent.detectedBrowser);
|
|
@@ -7311,6 +7545,16 @@ class BasicRecorder {
|
|
|
7311
7545
|
this.streamLevelMeasure = new StreamLevelMeasure();
|
|
7312
7546
|
this.selCaptureDeviceId = null;
|
|
7313
7547
|
}
|
|
7548
|
+
get uploadChunkSizeSeconds() {
|
|
7549
|
+
return this._uploadChunkSizeSeconds;
|
|
7550
|
+
}
|
|
7551
|
+
set uploadChunkSizeSeconds(value) {
|
|
7552
|
+
let oldValue = this.uploadChunkSizeSeconds;
|
|
7553
|
+
this._uploadChunkSizeSeconds = value;
|
|
7554
|
+
if (value !== oldValue) {
|
|
7555
|
+
this.configureStreamCaptureStream();
|
|
7556
|
+
}
|
|
7557
|
+
}
|
|
7314
7558
|
get wakeLock() {
|
|
7315
7559
|
return this._wakeLock;
|
|
7316
7560
|
}
|
|
@@ -7319,18 +7563,26 @@ class BasicRecorder {
|
|
|
7319
7563
|
}
|
|
7320
7564
|
enableWakeLockCond() {
|
|
7321
7565
|
if (this.wakeLock === true) {
|
|
7322
|
-
if (!this.
|
|
7323
|
-
this.
|
|
7324
|
-
|
|
7325
|
-
|
|
7326
|
-
|
|
7566
|
+
if (!this.wakeLockManager) {
|
|
7567
|
+
this.wakeLockManager = new WakeLockManager();
|
|
7568
|
+
this.wakeLockManager.behaviorSubject.subscribe({
|
|
7569
|
+
next: (v) => {
|
|
7570
|
+
this._screenLocked = v;
|
|
7571
|
+
},
|
|
7572
|
+
error: (err) => {
|
|
7573
|
+
console.error("Wake lock error!");
|
|
7574
|
+
this._screenLocked = false;
|
|
7575
|
+
}
|
|
7576
|
+
});
|
|
7327
7577
|
}
|
|
7578
|
+
this.wakeLockManager.enableWakeLock();
|
|
7328
7579
|
}
|
|
7329
7580
|
}
|
|
7330
7581
|
disableWakeLockCond() {
|
|
7331
|
-
|
|
7332
|
-
|
|
7333
|
-
|
|
7582
|
+
this.wakeLockManager?.disableWakeLock();
|
|
7583
|
+
}
|
|
7584
|
+
get screenLocked() {
|
|
7585
|
+
return this._screenLocked;
|
|
7334
7586
|
}
|
|
7335
7587
|
set audioDevices(audioDevices) {
|
|
7336
7588
|
this._audioDevices = audioDevices;
|
|
@@ -7351,6 +7603,27 @@ class BasicRecorder {
|
|
|
7351
7603
|
this.statusAlertType = 'info';
|
|
7352
7604
|
this.statusMsg = 'Ready.';
|
|
7353
7605
|
}
|
|
7606
|
+
configureStreamCaptureStream() {
|
|
7607
|
+
let outStream;
|
|
7608
|
+
if (this.uploadChunkSizeSeconds) {
|
|
7609
|
+
// Multiply the capture stream to...
|
|
7610
|
+
let sasm = new SequenceAudioFloat32OutStreamMultiplier();
|
|
7611
|
+
// ...upload audio data in chunks...
|
|
7612
|
+
let chMng = new ChunkManager(this); // The chunk manager connects the chunked audio stream to this class to upload the chunks
|
|
7613
|
+
let chOsUpload = new SequenceAudioFloat32ChunkerOutStream(chMng, this.uploadChunkSizeSeconds); // The audio stream chunker itself
|
|
7614
|
+
sasm.sequenceAudioFloat32OutStreams.push(chOsUpload);
|
|
7615
|
+
// ...and to measure the level
|
|
7616
|
+
let chOsLvlMeas = new SequenceAudioFloat32ChunkerOutStream(this.streamLevelMeasure, LEVEL_BAR_INTERVALL_SECONDS);
|
|
7617
|
+
sasm.sequenceAudioFloat32OutStreams.push(chOsLvlMeas);
|
|
7618
|
+
outStream = sasm;
|
|
7619
|
+
}
|
|
7620
|
+
else {
|
|
7621
|
+
outStream = new SequenceAudioFloat32ChunkerOutStream(this.streamLevelMeasure, LEVEL_BAR_INTERVALL_SECONDS);
|
|
7622
|
+
}
|
|
7623
|
+
if (this.ac) {
|
|
7624
|
+
this.ac.audioOutStream = outStream;
|
|
7625
|
+
}
|
|
7626
|
+
}
|
|
7354
7627
|
start() {
|
|
7355
7628
|
this.statusAlertType = 'info';
|
|
7356
7629
|
this.statusMsg = 'Starting session...';
|
|
@@ -7557,6 +7830,71 @@ class BasicRecorder {
|
|
|
7557
7830
|
});
|
|
7558
7831
|
}
|
|
7559
7832
|
}
|
|
7833
|
+
startItem() {
|
|
7834
|
+
this.startedDate = null;
|
|
7835
|
+
this.enableWakeLockCond();
|
|
7836
|
+
this.rfUuid = UUID.generate();
|
|
7837
|
+
this.transportActions.startAction.disabled = true;
|
|
7838
|
+
this.transportActions.pauseAction.disabled = true;
|
|
7839
|
+
}
|
|
7840
|
+
started() {
|
|
7841
|
+
//this.enableWakeLockCond();
|
|
7842
|
+
if (!this.startedDate) {
|
|
7843
|
+
this.startedDate = new Date();
|
|
7844
|
+
}
|
|
7845
|
+
this.transportActions.startAction.disabled = true;
|
|
7846
|
+
}
|
|
7847
|
+
postRecording(wavFile, recUrl) {
|
|
7848
|
+
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
7849
|
+
let ul = new Upload(wavBlob, recUrl);
|
|
7850
|
+
this.uploader.queueUpload(ul);
|
|
7851
|
+
}
|
|
7852
|
+
postAudioStreamStart() {
|
|
7853
|
+
if (this.rfUuid) {
|
|
7854
|
+
let apiEndPoint = '';
|
|
7855
|
+
if (this.config && this.config.apiEndPoint) {
|
|
7856
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
7857
|
+
}
|
|
7858
|
+
if (apiEndPoint !== '') {
|
|
7859
|
+
apiEndPoint = apiEndPoint + '/';
|
|
7860
|
+
}
|
|
7861
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
7862
|
+
let recUrl = sessionsUrl + '/' + this.session?.sessionId + '/' + RECFILE_API_CTX + '/' + this.rfUuid + '/prepareChunksRequest';
|
|
7863
|
+
let fd = new FormData();
|
|
7864
|
+
// Note: At least one parameter must be set
|
|
7865
|
+
fd.set('uuid', this.rfUuid);
|
|
7866
|
+
if (!this.startedDate) {
|
|
7867
|
+
this.startedDate = new Date();
|
|
7868
|
+
}
|
|
7869
|
+
fd.set('startedDate', this.startedDate.toJSON());
|
|
7870
|
+
let ul = new Upload(fd, recUrl);
|
|
7871
|
+
this.uploader.queueUpload(ul);
|
|
7872
|
+
}
|
|
7873
|
+
else {
|
|
7874
|
+
console.error("Recording file UUID not set!");
|
|
7875
|
+
}
|
|
7876
|
+
}
|
|
7877
|
+
postAudioStreamEnd(chunkCount) {
|
|
7878
|
+
if (this.rfUuid) {
|
|
7879
|
+
let apiEndPoint = '';
|
|
7880
|
+
if (this.config && this.config.apiEndPoint) {
|
|
7881
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
7882
|
+
}
|
|
7883
|
+
if (apiEndPoint !== '') {
|
|
7884
|
+
apiEndPoint = apiEndPoint + '/';
|
|
7885
|
+
}
|
|
7886
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
7887
|
+
let recUrl = sessionsUrl + '/' + this.session?.sessionId + '/' + RECFILE_API_CTX + '/' + this.rfUuid + '/concatChunksRequest';
|
|
7888
|
+
let fd = new FormData();
|
|
7889
|
+
fd.set('uuid', this.rfUuid);
|
|
7890
|
+
fd.set('chunkCount', chunkCount.toString());
|
|
7891
|
+
let ul = new Upload(fd, recUrl);
|
|
7892
|
+
this.uploader.queueUpload(ul);
|
|
7893
|
+
}
|
|
7894
|
+
else {
|
|
7895
|
+
console.error("Recording file UUID not set!");
|
|
7896
|
+
}
|
|
7897
|
+
}
|
|
7560
7898
|
closed() {
|
|
7561
7899
|
this.statusAlertType = 'info';
|
|
7562
7900
|
this.statusMsg = 'Session closed.';
|
|
@@ -7573,7 +7911,11 @@ class BasicRecorder {
|
|
|
7573
7911
|
}
|
|
7574
7912
|
});
|
|
7575
7913
|
}
|
|
7576
|
-
}
|
|
7914
|
+
};
|
|
7915
|
+
BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS = 30;
|
|
7916
|
+
BasicRecorder = __decorate([
|
|
7917
|
+
__param(3, Inject(SPEECHRECORDER_CONFIG))
|
|
7918
|
+
], BasicRecorder);
|
|
7577
7919
|
|
|
7578
7920
|
/**
|
|
7579
7921
|
* Created by klausj on 17.06.2017.
|
|
@@ -7801,9 +8143,9 @@ class RecordingService {
|
|
|
7801
8143
|
}
|
|
7802
8144
|
RecordingService.REC_API_CTX = 'recfile';
|
|
7803
8145
|
RecordingService.RECORDING_API_CTX = 'recordingfile';
|
|
7804
|
-
RecordingService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7805
|
-
RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
7806
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
8146
|
+
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 });
|
|
8147
|
+
RecordingService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingService });
|
|
8148
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingService, decorators: [{
|
|
7807
8149
|
type: Injectable
|
|
7808
8150
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
7809
8151
|
type: Inject,
|
|
@@ -7817,9 +8159,9 @@ class SpeechRecorderUploader extends Uploader {
|
|
|
7817
8159
|
this.config = config;
|
|
7818
8160
|
}
|
|
7819
8161
|
}
|
|
7820
|
-
SpeechRecorderUploader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7821
|
-
SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
7822
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
8162
|
+
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 });
|
|
8163
|
+
SpeechRecorderUploader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderUploader });
|
|
8164
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechRecorderUploader, decorators: [{
|
|
7823
8165
|
type: Injectable
|
|
7824
8166
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
7825
8167
|
type: Inject,
|
|
@@ -7839,12 +8181,12 @@ class WarningBar {
|
|
|
7839
8181
|
}
|
|
7840
8182
|
}
|
|
7841
8183
|
}
|
|
7842
|
-
WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
7843
|
-
WarningBar.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
8184
|
+
WarningBar.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WarningBar, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
8185
|
+
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: `
|
|
7844
8186
|
<div [class]="displayClass">{{warningText}}</div>
|
|
7845
8187
|
|
|
7846
8188
|
`, 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"] });
|
|
7847
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
8189
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: WarningBar, decorators: [{
|
|
7848
8190
|
type: Component,
|
|
7849
8191
|
args: [{
|
|
7850
8192
|
selector: 'app-warningbar',
|
|
@@ -7883,7 +8225,7 @@ const DEFAULT_PRE_REC_DELAY = 1000;
|
|
|
7883
8225
|
const DEFAULT_POST_REC_DELAY = 500;
|
|
7884
8226
|
class SessionManager extends BasicRecorder {
|
|
7885
8227
|
constructor(changeDetectorRef, renderer, dialog, sessionService, recFileService, uploader, config) {
|
|
7886
|
-
super(dialog, sessionService);
|
|
8228
|
+
super(dialog, sessionService, uploader, config);
|
|
7887
8229
|
this.changeDetectorRef = changeDetectorRef;
|
|
7888
8230
|
this.renderer = renderer;
|
|
7889
8231
|
this.dialog = dialog;
|
|
@@ -7924,6 +8266,7 @@ class SessionManager extends BasicRecorder {
|
|
|
7924
8266
|
};
|
|
7925
8267
|
}
|
|
7926
8268
|
ngOnDestroy() {
|
|
8269
|
+
console.debug("Com destroy, disable wake lock.");
|
|
7927
8270
|
this.disableWakeLockCond();
|
|
7928
8271
|
this.destroyed = true;
|
|
7929
8272
|
// TODO stop capture /playback
|
|
@@ -7943,7 +8286,7 @@ class SessionManager extends BasicRecorder {
|
|
|
7943
8286
|
context = AudioContextProvider.audioContextInstance();
|
|
7944
8287
|
}
|
|
7945
8288
|
catch (err) {
|
|
7946
|
-
this.status =
|
|
8289
|
+
this.status = 9 /* ERROR */;
|
|
7947
8290
|
let errMsg = 'Unknown error';
|
|
7948
8291
|
if (err instanceof Error) {
|
|
7949
8292
|
errMsg = err.message;
|
|
@@ -7967,7 +8310,7 @@ class SessionManager extends BasicRecorder {
|
|
|
7967
8310
|
console.info("No audio context available!");
|
|
7968
8311
|
}
|
|
7969
8312
|
if (!context || !navigator.mediaDevices) {
|
|
7970
|
-
this.status =
|
|
8313
|
+
this.status = 9 /* ERROR */;
|
|
7971
8314
|
let errMsg = 'Browser does not support Media streams!';
|
|
7972
8315
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
7973
8316
|
this.statusAlertType = 'error';
|
|
@@ -7986,7 +8329,7 @@ class SessionManager extends BasicRecorder {
|
|
|
7986
8329
|
if (this.ac) {
|
|
7987
8330
|
this.transportActions.startAction.onAction = () => this.startItem();
|
|
7988
8331
|
this.ac.listener = this;
|
|
7989
|
-
this.
|
|
8332
|
+
this.configureStreamCaptureStream();
|
|
7990
8333
|
// Don't list the devices here. If we do not have audio permissions we only get anonymized devices without labels.
|
|
7991
8334
|
//this.ac.listDevices();
|
|
7992
8335
|
}
|
|
@@ -8045,6 +8388,12 @@ class SessionManager extends BasicRecorder {
|
|
|
8045
8388
|
this.transportActions.bwdAction.perform();
|
|
8046
8389
|
}
|
|
8047
8390
|
}
|
|
8391
|
+
updateWakeLock(dataSaved = this.dataSaved) {
|
|
8392
|
+
//console.debug("Update wake lock: dataSaved: "+dataSaved+", not active: "+! this.isActive())
|
|
8393
|
+
if (dataSaved && !this.isActive()) {
|
|
8394
|
+
this.disableWakeLockCond();
|
|
8395
|
+
}
|
|
8396
|
+
}
|
|
8048
8397
|
progressPercentValue() {
|
|
8049
8398
|
let v = 100;
|
|
8050
8399
|
if (this.items) {
|
|
@@ -8132,10 +8481,10 @@ class SessionManager extends BasicRecorder {
|
|
|
8132
8481
|
}
|
|
8133
8482
|
}
|
|
8134
8483
|
startItem() {
|
|
8135
|
-
this.
|
|
8136
|
-
|
|
8137
|
-
this.transportActions.pauseAction.disabled = true;
|
|
8484
|
+
this.status = 2 /* STARTING */;
|
|
8485
|
+
super.startItem();
|
|
8138
8486
|
if (this.readonly) {
|
|
8487
|
+
this.status = 1 /* IDLE */;
|
|
8139
8488
|
return;
|
|
8140
8489
|
}
|
|
8141
8490
|
this.transportActions.fwdAction.disabled = true;
|
|
@@ -8372,10 +8721,10 @@ class SessionManager extends BasicRecorder {
|
|
|
8372
8721
|
this.enableNavigation();
|
|
8373
8722
|
}
|
|
8374
8723
|
isRecording() {
|
|
8375
|
-
return (this.status ===
|
|
8724
|
+
return (this.status === 3 /* PRE_RECORDING */ || this.status === 4 /* RECORDING */);
|
|
8376
8725
|
}
|
|
8377
8726
|
isActive() {
|
|
8378
|
-
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status ===
|
|
8727
|
+
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status === 9 /* ERROR */) || this.processingRecording || this.sessionService.uploadCount > 0);
|
|
8379
8728
|
}
|
|
8380
8729
|
prevItem() {
|
|
8381
8730
|
let newPrIdx = this._promptIndex;
|
|
@@ -8436,8 +8785,8 @@ class SessionManager extends BasicRecorder {
|
|
|
8436
8785
|
}
|
|
8437
8786
|
}
|
|
8438
8787
|
started() {
|
|
8439
|
-
this.status =
|
|
8440
|
-
|
|
8788
|
+
this.status = 3 /* PRE_RECORDING */;
|
|
8789
|
+
super.started();
|
|
8441
8790
|
this.startStopSignalState = 1 /* PRERECORDING */;
|
|
8442
8791
|
if (this._session) {
|
|
8443
8792
|
if (this._session.status === "LOADED") {
|
|
@@ -8490,7 +8839,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8490
8839
|
this.maxRecTimerRunning = true;
|
|
8491
8840
|
this.preRecTimerId = window.setTimeout(() => {
|
|
8492
8841
|
this.preRecTimerRunning = false;
|
|
8493
|
-
this.status =
|
|
8842
|
+
this.status = 4 /* RECORDING */;
|
|
8494
8843
|
this.startStopSignalState = 3 /* RECORDING */;
|
|
8495
8844
|
if (this.section.mode === 'AUTORECORDING') {
|
|
8496
8845
|
this.transportActions.nextAction.disabled = false;
|
|
@@ -8509,19 +8858,19 @@ class SessionManager extends BasicRecorder {
|
|
|
8509
8858
|
this.preRecTimerRunning = true;
|
|
8510
8859
|
}
|
|
8511
8860
|
stopItem() {
|
|
8512
|
-
this.status =
|
|
8861
|
+
this.status = 5 /* POST_REC_STOP */;
|
|
8513
8862
|
this.startStopSignalState = 2 /* POSTRECORDING */;
|
|
8514
8863
|
this.transportActions.stopAction.disabled = true;
|
|
8515
8864
|
this.transportActions.nextAction.disabled = true;
|
|
8516
8865
|
this.postRecTimerId = window.setTimeout(() => {
|
|
8517
8866
|
this.postRecTimerRunning = false;
|
|
8518
|
-
this.status =
|
|
8867
|
+
this.status = 7 /* STOPPING_STOP */;
|
|
8519
8868
|
this.stopRecording();
|
|
8520
8869
|
}, this.postDelay);
|
|
8521
8870
|
this.postRecTimerRunning = true;
|
|
8522
8871
|
}
|
|
8523
8872
|
pauseItem() {
|
|
8524
|
-
this.status =
|
|
8873
|
+
this.status = 6 /* POST_REC_PAUSE */;
|
|
8525
8874
|
this.transportActions.pauseAction.disabled = true;
|
|
8526
8875
|
this.startStopSignalState = 2 /* POSTRECORDING */;
|
|
8527
8876
|
this.transportActions.stopAction.disabled = true;
|
|
@@ -8529,7 +8878,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8529
8878
|
this.transportActions.pauseAction.disabled = true;
|
|
8530
8879
|
this.postRecTimerId = window.setTimeout(() => {
|
|
8531
8880
|
this.postRecTimerRunning = false;
|
|
8532
|
-
this.status =
|
|
8881
|
+
this.status = 8 /* STOPPING_PAUSE */;
|
|
8533
8882
|
this.stopRecording();
|
|
8534
8883
|
}, this.postDelay);
|
|
8535
8884
|
this.postRecTimerRunning = true;
|
|
@@ -8553,7 +8902,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8553
8902
|
this.postRecTimerRunning = false;
|
|
8554
8903
|
}
|
|
8555
8904
|
this.maxRecTimerRunning = false;
|
|
8556
|
-
this.status =
|
|
8905
|
+
this.status = 7 /* STOPPING_STOP */;
|
|
8557
8906
|
if (this.ac) {
|
|
8558
8907
|
this.ac.stop();
|
|
8559
8908
|
}
|
|
@@ -8606,7 +8955,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8606
8955
|
rf = new SprRecordingFile(sessId, ic, it.recs.length, ad);
|
|
8607
8956
|
it.recs.push(rf);
|
|
8608
8957
|
}
|
|
8609
|
-
if (this.enableUploadRecordings) {
|
|
8958
|
+
if (this.enableUploadRecordings && !this.uploadChunkSizeSeconds) {
|
|
8610
8959
|
// TODO use SpeechRecorderconfig resp. RecfileService
|
|
8611
8960
|
// convert asynchronously to 16-bit integer PCM
|
|
8612
8961
|
// TODO could we avoid conversion to save CPU resources and transfer float PCM directly?
|
|
@@ -8628,6 +8977,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8628
8977
|
ww.writeAsync(ad, (wavFile) => {
|
|
8629
8978
|
this.postRecording(wavFile, recUrl);
|
|
8630
8979
|
this.processingRecording = false;
|
|
8980
|
+
this.updateWakeLock();
|
|
8631
8981
|
});
|
|
8632
8982
|
}
|
|
8633
8983
|
}
|
|
@@ -8644,7 +8994,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8644
8994
|
}
|
|
8645
8995
|
}
|
|
8646
8996
|
}
|
|
8647
|
-
let autoStart = (this.status ===
|
|
8997
|
+
let autoStart = (this.status === 7 /* STOPPING_STOP */);
|
|
8648
8998
|
this.status = 1 /* IDLE */;
|
|
8649
8999
|
let startNext = false;
|
|
8650
9000
|
if (complete) {
|
|
@@ -8661,6 +9011,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8661
9011
|
}
|
|
8662
9012
|
}
|
|
8663
9013
|
this.statusMsg = 'Session complete!';
|
|
9014
|
+
this.updateWakeLock();
|
|
8664
9015
|
let dialogRef = this.dialog.open(SessionFinishedDialog, {});
|
|
8665
9016
|
// enable navigation
|
|
8666
9017
|
this.transportActions.fwdAction.disabled = false;
|
|
@@ -8676,6 +9027,7 @@ class SessionManager extends BasicRecorder {
|
|
|
8676
9027
|
else {
|
|
8677
9028
|
this.navigationDisabled = false;
|
|
8678
9029
|
this.updateNavigationActions();
|
|
9030
|
+
this.updateWakeLock();
|
|
8679
9031
|
}
|
|
8680
9032
|
}
|
|
8681
9033
|
// apply recorded item
|
|
@@ -8685,6 +9037,24 @@ class SessionManager extends BasicRecorder {
|
|
|
8685
9037
|
}
|
|
8686
9038
|
this.changeDetectorRef.detectChanges();
|
|
8687
9039
|
}
|
|
9040
|
+
postChunkAudioBuffer(audioBuffer, chunkIdx) {
|
|
9041
|
+
this.processingRecording = true;
|
|
9042
|
+
let ww = new WavWriter();
|
|
9043
|
+
//new REST API URL
|
|
9044
|
+
let apiEndPoint = '';
|
|
9045
|
+
if (this.config && this.config.apiEndPoint) {
|
|
9046
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
9047
|
+
}
|
|
9048
|
+
if (apiEndPoint !== '') {
|
|
9049
|
+
apiEndPoint = apiEndPoint + '/';
|
|
9050
|
+
}
|
|
9051
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
9052
|
+
let recUrl = sessionsUrl + '/' + this.session?.sessionId + '/' + RECFILE_API_CTX + '/' + this.promptItem.itemcode + '/' + this.rfUuid + '/' + chunkIdx;
|
|
9053
|
+
ww.writeAsync(audioBuffer, (wavFile) => {
|
|
9054
|
+
this.postRecording(wavFile, recUrl);
|
|
9055
|
+
this.processingRecording = false;
|
|
9056
|
+
});
|
|
9057
|
+
}
|
|
8688
9058
|
postRecording(wavFile, recUrl) {
|
|
8689
9059
|
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
8690
9060
|
let ul = new Upload(wavBlob, recUrl);
|
|
@@ -8717,8 +9087,8 @@ class SessionManager extends BasicRecorder {
|
|
|
8717
9087
|
}
|
|
8718
9088
|
}
|
|
8719
9089
|
}
|
|
8720
|
-
SessionManager.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
8721
|
-
SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9090
|
+
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 });
|
|
9091
|
+
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: `
|
|
8722
9092
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
8723
9093
|
<app-warningbar [show]="isDefaultAudioTestSession()" warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
8724
9094
|
<app-sprprompting [projectName]="projectName"
|
|
@@ -8739,32 +9109,35 @@ SessionManager.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version
|
|
|
8739
9109
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
8740
9110
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording()" [displayLevelInfos]="displayLevelInfos"></audio-levelbar>
|
|
8741
9111
|
<div fxLayout="row">
|
|
8742
|
-
|
|
8743
|
-
|
|
8744
|
-
|
|
8745
|
-
|
|
8746
|
-
|
|
8747
|
-
|
|
8748
|
-
|
|
8749
|
-
|
|
8750
|
-
|
|
8751
|
-
|
|
8752
|
-
|
|
8753
|
-
|
|
9112
|
+
<spr-recordingitemcontrols fxFlex="10 0 1"
|
|
9113
|
+
[audioLoaded]="displayAudioClip?.buffer!==null"
|
|
9114
|
+
[playStartAction]="controlAudioPlayer?.startAction"
|
|
9115
|
+
[playStopAction]="controlAudioPlayer?.stopAction"
|
|
9116
|
+
[peakDbLvl]="peakLevelInDb"
|
|
9117
|
+
[agc]="this.ac?.agcStatus"
|
|
9118
|
+
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
9119
|
+
</spr-recordingitemcontrols>
|
|
9120
|
+
|
|
9121
|
+
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9122
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9123
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9124
|
+
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
8754
9125
|
</div>
|
|
9126
|
+
</div>
|
|
8755
9127
|
<div #controlpanel class="controlpanel" fxLayout="row">
|
|
8756
9128
|
<div fxFlex="1 1 30%" fxLayoutAlign="start center">
|
|
8757
9129
|
<app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
|
|
8758
9130
|
</div>
|
|
8759
|
-
|
|
8760
|
-
|
|
8761
|
-
|
|
8762
|
-
|
|
8763
|
-
|
|
8764
|
-
|
|
9131
|
+
<app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="items==null || items.length>1"></app-sprtransport>
|
|
9132
|
+
<div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
|
|
9133
|
+
<app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9134
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9135
|
+
<app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9136
|
+
<app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
9137
|
+
</div>
|
|
8765
9138
|
</div>
|
|
8766
|
-
`, 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
|
|
8767
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9139
|
+
`, 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"] }] });
|
|
9140
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SessionManager, decorators: [{
|
|
8768
9141
|
type: Component,
|
|
8769
9142
|
args: [{
|
|
8770
9143
|
selector: 'app-sprrecordingsession',
|
|
@@ -8790,29 +9163,32 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
8790
9163
|
<div fxLayout="row" fxLayout.xs="column" [ngStyle]="{'height.px':100,'min-height.px': 100}" [ngStyle.xs]="{'height.px':125,'min-height.px': 125}">
|
|
8791
9164
|
<audio-levelbar fxFlex="1 0 1" [streamingMode]="isRecording()" [displayLevelInfos]="displayLevelInfos"></audio-levelbar>
|
|
8792
9165
|
<div fxLayout="row">
|
|
8793
|
-
|
|
8794
|
-
|
|
8795
|
-
|
|
8796
|
-
|
|
8797
|
-
|
|
8798
|
-
|
|
8799
|
-
|
|
8800
|
-
|
|
8801
|
-
|
|
8802
|
-
|
|
8803
|
-
|
|
8804
|
-
|
|
9166
|
+
<spr-recordingitemcontrols fxFlex="10 0 1"
|
|
9167
|
+
[audioLoaded]="displayAudioClip?.buffer!==null"
|
|
9168
|
+
[playStartAction]="controlAudioPlayer?.startAction"
|
|
9169
|
+
[playStopAction]="controlAudioPlayer?.stopAction"
|
|
9170
|
+
[peakDbLvl]="peakLevelInDb"
|
|
9171
|
+
[agc]="this.ac?.agcStatus"
|
|
9172
|
+
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
9173
|
+
</spr-recordingitemcontrols>
|
|
9174
|
+
|
|
9175
|
+
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9176
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9177
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9178
|
+
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
8805
9179
|
</div>
|
|
9180
|
+
</div>
|
|
8806
9181
|
<div #controlpanel class="controlpanel" fxLayout="row">
|
|
8807
9182
|
<div fxFlex="1 1 30%" fxLayoutAlign="start center">
|
|
8808
9183
|
<app-sprstatusdisplay fxHide.xs [statusMsg]="statusMsg" [statusAlertType]="statusAlertType" [statusWaiting]="statusWaiting"></app-sprstatusdisplay>
|
|
8809
9184
|
</div>
|
|
8810
|
-
|
|
8811
|
-
|
|
8812
|
-
|
|
8813
|
-
|
|
8814
|
-
|
|
8815
|
-
|
|
9185
|
+
<app-sprtransport fxFlex="10 0 30%" fxLayoutAlign="center center" [readonly]="readonly" [actions]="transportActions" [navigationEnabled]="items==null || items.length>1"></app-sprtransport>
|
|
9186
|
+
<div fxFlex="1 1 30%" fxLayoutAlign="end center" fxLayout="row">
|
|
9187
|
+
<app-uploadstatus class="ricontrols" fxHide.xs fxLayoutAlign="end center" *ngIf="enableUploadRecordings" [value]="uploadProgress"
|
|
9188
|
+
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
9189
|
+
<app-wakelockindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
9190
|
+
<app-readystateindicator class="ricontrols" fxLayoutAlign="end center" fxHide.xs [ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
9191
|
+
</div>
|
|
8816
9192
|
</div>
|
|
8817
9193
|
`,
|
|
8818
9194
|
styles: [`:host {
|
|
@@ -8900,9 +9276,9 @@ class ScriptService {
|
|
|
8900
9276
|
return this.http.get(scriptUrl, { withCredentials: this.withCredentials });
|
|
8901
9277
|
}
|
|
8902
9278
|
}
|
|
8903
|
-
ScriptService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
8904
|
-
ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
8905
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9279
|
+
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 });
|
|
9280
|
+
ScriptService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScriptService });
|
|
9281
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScriptService, decorators: [{
|
|
8906
9282
|
type: Injectable
|
|
8907
9283
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
8908
9284
|
type: Inject,
|
|
@@ -8950,7 +9326,7 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
8950
9326
|
ngAfterViewInit() {
|
|
8951
9327
|
// let wakeLockSupp=('wakeLock' in navigator);
|
|
8952
9328
|
// alert('Wake lock API supported: '+wakeLockSupp);
|
|
8953
|
-
if (this.sm.status !==
|
|
9329
|
+
if (this.sm.status !== 9 /* ERROR */) {
|
|
8954
9330
|
let initSuccess = this.init();
|
|
8955
9331
|
if (initSuccess) {
|
|
8956
9332
|
this.route.queryParams.subscribe((params) => {
|
|
@@ -9071,6 +9447,9 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9071
9447
|
// TODO
|
|
9072
9448
|
}
|
|
9073
9449
|
}
|
|
9450
|
+
get screenLocked() {
|
|
9451
|
+
return this.sm.screenLocked;
|
|
9452
|
+
}
|
|
9074
9453
|
startSession() {
|
|
9075
9454
|
this.sm.statusWaiting = false;
|
|
9076
9455
|
this.sm.start();
|
|
@@ -9132,6 +9511,8 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9132
9511
|
}
|
|
9133
9512
|
this.sm.uploadProgress = percentUpl;
|
|
9134
9513
|
}
|
|
9514
|
+
//console.debug("Upload update, update wake lock.")
|
|
9515
|
+
this.sm.updateWakeLock(this.dataSaved);
|
|
9135
9516
|
this.changeDetectorRef.detectChanges();
|
|
9136
9517
|
}
|
|
9137
9518
|
configure() {
|
|
@@ -9179,6 +9560,13 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9179
9560
|
chCnt = ProjectUtil.audioChannelCount(project);
|
|
9180
9561
|
console.info("Project requested recording channel count: " + chCnt);
|
|
9181
9562
|
this.sm.autoGainControlConfigs = project.autoGainControlConfigs;
|
|
9563
|
+
if (project.chunkedRecording === true) {
|
|
9564
|
+
console.debug("Enable chunked upload: chunkSize: " + BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS);
|
|
9565
|
+
this.sm.uploadChunkSizeSeconds = BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS;
|
|
9566
|
+
}
|
|
9567
|
+
else {
|
|
9568
|
+
this.sm.uploadChunkSizeSeconds = null;
|
|
9569
|
+
}
|
|
9182
9570
|
}
|
|
9183
9571
|
else {
|
|
9184
9572
|
console.error("Empty project configuration!");
|
|
@@ -9236,11 +9624,11 @@ class SpeechrecorderngComponent extends RecorderComponent {
|
|
|
9236
9624
|
this.sm.statusMsg = 'ERROR: Recording.';
|
|
9237
9625
|
}
|
|
9238
9626
|
}
|
|
9239
|
-
SpeechrecorderngComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9240
|
-
SpeechrecorderngComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9627
|
+
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 });
|
|
9628
|
+
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: `
|
|
9241
9629
|
<app-sprrecordingsession [projectName]="project?.name" [dataSaved]="dataSaved"></app-sprrecordingsession>
|
|
9242
9630
|
`, isInline: true, styles: [":host{flex:2;display:flex;flex-direction:column;min-height:0}\n"], components: [{ type: SessionManager, selector: "app-sprrecordingsession", inputs: ["projectName", "dataSaved"] }] });
|
|
9243
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9631
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngComponent, decorators: [{
|
|
9244
9632
|
type: Component,
|
|
9245
9633
|
args: [{
|
|
9246
9634
|
selector: 'app-speechrecorder',
|
|
@@ -9263,9 +9651,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
9263
9651
|
|
|
9264
9652
|
class ScrollPaneHorizontal {
|
|
9265
9653
|
}
|
|
9266
|
-
ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9267
|
-
ScrollPaneHorizontal.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9268
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9654
|
+
ScrollPaneHorizontal.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollPaneHorizontal, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
9655
|
+
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"] });
|
|
9656
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: ScrollPaneHorizontal, decorators: [{
|
|
9269
9657
|
type: Component,
|
|
9270
9658
|
args: [{
|
|
9271
9659
|
selector: 'scroll-pane-horizontal',
|
|
@@ -9484,8 +9872,8 @@ class AudioDisplayPlayer {
|
|
|
9484
9872
|
this.status = 'ERROR';
|
|
9485
9873
|
}
|
|
9486
9874
|
}
|
|
9487
|
-
AudioDisplayPlayer.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9488
|
-
AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
9875
|
+
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 });
|
|
9876
|
+
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: `
|
|
9489
9877
|
|
|
9490
9878
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
9491
9879
|
|
|
@@ -9499,7 +9887,7 @@ AudioDisplayPlayer.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", ver
|
|
|
9499
9887
|
[zoomSelectedAction]="zoomSelectedAction"
|
|
9500
9888
|
[zoomFitToPanelAction]="zoomFitToPanelAction"></audio-display-control><p>{{status}}
|
|
9501
9889
|
`, 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"] }] });
|
|
9502
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
9890
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioDisplayPlayer, decorators: [{
|
|
9503
9891
|
type: Component,
|
|
9504
9892
|
args: [{
|
|
9505
9893
|
selector: 'app-audiodisplayplayer',
|
|
@@ -9851,9 +10239,9 @@ class RecordingFileService {
|
|
|
9851
10239
|
}
|
|
9852
10240
|
}
|
|
9853
10241
|
RecordingFileService.RECOFILE_API_CTX = 'recordingfile';
|
|
9854
|
-
RecordingFileService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9855
|
-
RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.
|
|
9856
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10242
|
+
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 });
|
|
10243
|
+
RecordingFileService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileService });
|
|
10244
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileService, decorators: [{
|
|
9857
10245
|
type: Injectable
|
|
9858
10246
|
}], ctorParameters: function () { return [{ type: i1.HttpClient }, { type: SpeechRecorderConfig, decorators: [{
|
|
9859
10247
|
type: Inject,
|
|
@@ -9900,8 +10288,8 @@ class RecordingFileMetaComponent {
|
|
|
9900
10288
|
return t;
|
|
9901
10289
|
}
|
|
9902
10290
|
}
|
|
9903
|
-
RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
9904
|
-
RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10291
|
+
RecordingFileMetaComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileMetaComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10292
|
+
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: `
|
|
9905
10293
|
<mat-card>
|
|
9906
10294
|
<mat-card-title>Recording file ID: {{recordingFile?.recordingFileId}}</mat-card-title>
|
|
9907
10295
|
<mat-card-content>
|
|
@@ -9935,7 +10323,7 @@ RecordingFileMetaComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
9935
10323
|
</mat-card-content>
|
|
9936
10324
|
</mat-card>
|
|
9937
10325
|
`, 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"] }] });
|
|
9938
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10326
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileMetaComponent, decorators: [{
|
|
9939
10327
|
type: Component,
|
|
9940
10328
|
args: [{
|
|
9941
10329
|
selector: 'app-recording-file-meta',
|
|
@@ -9998,8 +10386,8 @@ class RecordingFileNaviComponent {
|
|
|
9998
10386
|
}
|
|
9999
10387
|
}
|
|
10000
10388
|
}
|
|
10001
|
-
RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10002
|
-
RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10389
|
+
RecordingFileNaviComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileNaviComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
10390
|
+
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: `
|
|
10003
10391
|
<div #controlPanel style="display:flex;flex-direction: row;">
|
|
10004
10392
|
<div #navi style="flex: 0;display:flex;flex-direction: row;flex-wrap: nowrap">
|
|
10005
10393
|
<fieldset>
|
|
@@ -10032,7 +10420,7 @@ RecordingFileNaviComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
10032
10420
|
</div>
|
|
10033
10421
|
</div>
|
|
10034
10422
|
`, 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"] }] });
|
|
10035
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10423
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileNaviComponent, decorators: [{
|
|
10036
10424
|
type: Component,
|
|
10037
10425
|
args: [{
|
|
10038
10426
|
selector: 'app-recording-file-navi',
|
|
@@ -10446,8 +10834,8 @@ class RecordingFileViewComponent extends AudioDisplayPlayer {
|
|
|
10446
10834
|
}
|
|
10447
10835
|
}
|
|
10448
10836
|
}
|
|
10449
|
-
RecordingFileViewComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10450
|
-
RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10837
|
+
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 });
|
|
10838
|
+
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: `
|
|
10451
10839
|
|
|
10452
10840
|
<audio-display-scroll-pane #audioDisplayScrollPane></audio-display-scroll-pane>
|
|
10453
10841
|
<div class="ctrlview">
|
|
@@ -10465,7 +10853,7 @@ RecordingFileViewComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0
|
|
|
10465
10853
|
<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>
|
|
10466
10854
|
</div>
|
|
10467
10855
|
`, 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"] }] });
|
|
10468
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
10856
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileViewComponent, decorators: [{
|
|
10469
10857
|
type: Component,
|
|
10470
10858
|
args: [{
|
|
10471
10859
|
selector: 'app-audiodisplayplayer',
|
|
@@ -10597,8 +10985,8 @@ class RecordingFileUI extends RecordingFileViewComponent {
|
|
|
10597
10985
|
}
|
|
10598
10986
|
}
|
|
10599
10987
|
}
|
|
10600
|
-
RecordingFileUI.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10601
|
-
RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
10988
|
+
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 });
|
|
10989
|
+
RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.11", type: RecordingFileUI, selector: "app-audiodisplayplayer", usesInheritance: true, ngImport: i0, template: `
|
|
10602
10990
|
<h1>Recording file editing</h1>
|
|
10603
10991
|
<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>
|
|
10604
10992
|
|
|
@@ -10619,7 +11007,7 @@ RecordingFileUI.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", versio
|
|
|
10619
11007
|
|
|
10620
11008
|
<button mat-raised-button color="accent" (click)="applySelection()" [disabled]="editSaved">{{this.applyButtonText()}}</button>
|
|
10621
11009
|
`, 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"] }] });
|
|
10622
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
11010
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingFileUI, decorators: [{
|
|
10623
11011
|
type: Component,
|
|
10624
11012
|
args: [{
|
|
10625
11013
|
selector: 'app-audiodisplayplayer',
|
|
@@ -10741,8 +11129,8 @@ class RecordingList {
|
|
|
10741
11129
|
return str;
|
|
10742
11130
|
}
|
|
10743
11131
|
}
|
|
10744
|
-
RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10745
|
-
RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
11132
|
+
RecordingList.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingList, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11133
|
+
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: `
|
|
10746
11134
|
<mat-card>
|
|
10747
11135
|
<mat-card-header>
|
|
10748
11136
|
<h2>Recording list</h2>
|
|
@@ -10772,7 +11160,7 @@ RecordingList.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
10772
11160
|
</mat-card>
|
|
10773
11161
|
|
|
10774
11162
|
`, 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 } });
|
|
10775
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
11163
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecordingList, decorators: [{
|
|
10776
11164
|
type: Component,
|
|
10777
11165
|
args: [{ selector: 'app-recordinglist', template: `
|
|
10778
11166
|
<mat-card>
|
|
@@ -10832,8 +11220,8 @@ class RecorderCombiPane {
|
|
|
10832
11220
|
this.recordingListComp.selectTop();
|
|
10833
11221
|
}
|
|
10834
11222
|
}
|
|
10835
|
-
RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
10836
|
-
RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
11223
|
+
RecorderCombiPane.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecorderCombiPane, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
11224
|
+
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: `
|
|
10837
11225
|
<div class="scrollList">
|
|
10838
11226
|
<app-recordinglist [selectedRecordingFile]="selectedRecordingFile" [selectDisabled]="selectDisabled" (selectedRecordingFileChanged)="selectRecordingFile($event)"></app-recordinglist>
|
|
10839
11227
|
</div>
|
|
@@ -10846,7 +11234,7 @@ RecorderCombiPane.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", vers
|
|
|
10846
11234
|
[playStopAction]="playStopAction"></app-audiodisplay>
|
|
10847
11235
|
</div>
|
|
10848
11236
|
`, 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"] }] });
|
|
10849
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
11237
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: RecorderCombiPane, decorators: [{
|
|
10850
11238
|
type: Component,
|
|
10851
11239
|
args: [{ selector: 'app-recordercombipane', template: `
|
|
10852
11240
|
<div class="scrollList">
|
|
@@ -10895,13 +11283,12 @@ class Item {
|
|
|
10895
11283
|
}
|
|
10896
11284
|
}
|
|
10897
11285
|
class AudioRecorder extends BasicRecorder {
|
|
10898
|
-
constructor(changeDetectorRef, renderer, route, dialog,
|
|
10899
|
-
super(dialog, sessionService);
|
|
11286
|
+
constructor(changeDetectorRef, renderer, route, dialog, sessionService, recFileService, uploader, config) {
|
|
11287
|
+
super(dialog, sessionService, uploader, config);
|
|
10900
11288
|
this.changeDetectorRef = changeDetectorRef;
|
|
10901
11289
|
this.renderer = renderer;
|
|
10902
11290
|
this.route = route;
|
|
10903
11291
|
this.dialog = dialog;
|
|
10904
|
-
this.projectService = projectService;
|
|
10905
11292
|
this.sessionService = sessionService;
|
|
10906
11293
|
this.recFileService = recFileService;
|
|
10907
11294
|
this.uploader = uploader;
|
|
@@ -10912,7 +11299,6 @@ class AudioRecorder extends BasicRecorder {
|
|
|
10912
11299
|
this.enableDownloadRecordings = false;
|
|
10913
11300
|
this.status = 0 /* BLOCKED */;
|
|
10914
11301
|
this.dataSaved = true;
|
|
10915
|
-
this.startedDate = null;
|
|
10916
11302
|
this.maxRecTimerId = null;
|
|
10917
11303
|
this.maxRecTimerRunning = false;
|
|
10918
11304
|
this._promptIndex = null;
|
|
@@ -10959,7 +11345,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
10959
11345
|
context = AudioContextProvider.audioContextInstance();
|
|
10960
11346
|
}
|
|
10961
11347
|
catch (err) {
|
|
10962
|
-
this.status =
|
|
11348
|
+
this.status = 5 /* ERROR */;
|
|
10963
11349
|
let errMsg = 'Unknown error';
|
|
10964
11350
|
if (err instanceof Error) {
|
|
10965
11351
|
errMsg = err.message;
|
|
@@ -10983,7 +11369,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
10983
11369
|
console.info("No audio context available!");
|
|
10984
11370
|
}
|
|
10985
11371
|
if (!context || !navigator.mediaDevices) {
|
|
10986
|
-
this.status =
|
|
11372
|
+
this.status = 5 /* ERROR */;
|
|
10987
11373
|
let errMsg = 'Browser does not support Media streams!';
|
|
10988
11374
|
this.statusMsg = 'ERROR: ' + errMsg;
|
|
10989
11375
|
this.statusAlertType = 'error';
|
|
@@ -11003,7 +11389,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11003
11389
|
if (this.ac) {
|
|
11004
11390
|
this.transportActions.startAction.onAction = () => this.startItem();
|
|
11005
11391
|
this.ac.listener = this;
|
|
11006
|
-
this.
|
|
11392
|
+
this.configureStreamCaptureStream();
|
|
11007
11393
|
// Don't list the devices here. If we do not have audio permissions we only get anonymized devices without labels.
|
|
11008
11394
|
//this.ac.listDevices();
|
|
11009
11395
|
}
|
|
@@ -11030,23 +11416,6 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11030
11416
|
this.uploader.listener = (ue) => {
|
|
11031
11417
|
this.uploadUpdate(ue);
|
|
11032
11418
|
};
|
|
11033
|
-
let wakeLockSupp = ('wakeLock' in navigator);
|
|
11034
|
-
// if(wakeLockSupp) {
|
|
11035
|
-
// let wakeLock = null;
|
|
11036
|
-
// try {
|
|
11037
|
-
// //@ts-ignore
|
|
11038
|
-
// wakeLock = navigator.wakeLock.request('screen');
|
|
11039
|
-
//
|
|
11040
|
-
// //statusElem.textContent = 'Wake Lock is active!';
|
|
11041
|
-
// } catch (err) {
|
|
11042
|
-
// // The Wake Lock request has failed - usually system related, such as battery.
|
|
11043
|
-
// console.error('Wakelock failed'+err)
|
|
11044
|
-
// }
|
|
11045
|
-
// }else{
|
|
11046
|
-
// let noSleep=new NoSleep();
|
|
11047
|
-
// noSleep.enable();
|
|
11048
|
-
//
|
|
11049
|
-
// }
|
|
11050
11419
|
}
|
|
11051
11420
|
onKeyPress(ke) {
|
|
11052
11421
|
if (ke.key == ' ') {
|
|
@@ -11150,6 +11519,12 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11150
11519
|
chCnt = ProjectUtil.audioChannelCount(project);
|
|
11151
11520
|
console.info("Project requested recording channel count: " + chCnt);
|
|
11152
11521
|
this.autoGainControlConfigs = project.autoGainControlConfigs;
|
|
11522
|
+
if (project.chunkedRecording === true) {
|
|
11523
|
+
this.uploadChunkSizeSeconds = BasicRecorder.DEFAULT_CHUNK_SIZE_SECONDS;
|
|
11524
|
+
}
|
|
11525
|
+
else {
|
|
11526
|
+
this.uploadChunkSizeSeconds = null;
|
|
11527
|
+
}
|
|
11153
11528
|
}
|
|
11154
11529
|
else {
|
|
11155
11530
|
console.error("Empty project configuration!");
|
|
@@ -11249,10 +11624,10 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11249
11624
|
}
|
|
11250
11625
|
}
|
|
11251
11626
|
startItem() {
|
|
11252
|
-
this.
|
|
11253
|
-
|
|
11254
|
-
this.transportActions.pauseAction.disabled = true;
|
|
11627
|
+
this.status = 2 /* STARTING */;
|
|
11628
|
+
super.startItem();
|
|
11255
11629
|
if (this.readonly) {
|
|
11630
|
+
this.status = 1 /* IDLE */;
|
|
11256
11631
|
return;
|
|
11257
11632
|
}
|
|
11258
11633
|
this.transportActions.fwdAction.disabled = true;
|
|
@@ -11383,10 +11758,16 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11383
11758
|
this.updateStartActionDisableState();
|
|
11384
11759
|
}
|
|
11385
11760
|
isRecording() {
|
|
11386
|
-
return (this.status ===
|
|
11761
|
+
return (this.status === 3 /* RECORDING */);
|
|
11387
11762
|
}
|
|
11388
11763
|
isActive() {
|
|
11389
|
-
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status ===
|
|
11764
|
+
return (!(this.status === 0 /* BLOCKED */ || this.status === 1 /* IDLE */ || this.status === 5 /* ERROR */) || this.processingRecording || this.sessionService.uploadCount > 0);
|
|
11765
|
+
}
|
|
11766
|
+
updateWakeLock(dataSaved = this.dataSaved) {
|
|
11767
|
+
//console.debug("Update wake lock: dataSaved: "+dataSaved+", not active: "+! this.isActive())
|
|
11768
|
+
if (dataSaved && !this.isActive()) {
|
|
11769
|
+
this.disableWakeLockCond();
|
|
11770
|
+
}
|
|
11390
11771
|
}
|
|
11391
11772
|
updateNavigationActions() {
|
|
11392
11773
|
this.transportActions.fwdAction.disabled = this.navigationDisabled;
|
|
@@ -11406,8 +11787,8 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11406
11787
|
}
|
|
11407
11788
|
}
|
|
11408
11789
|
started() {
|
|
11409
|
-
this.
|
|
11410
|
-
|
|
11790
|
+
this.status = 3 /* RECORDING */;
|
|
11791
|
+
super.started();
|
|
11411
11792
|
this.statusAlertType = 'info';
|
|
11412
11793
|
this.statusMsg = 'Recording...';
|
|
11413
11794
|
let maxRecordingTimeMs = MAX_RECORDING_TIME_MS;
|
|
@@ -11415,13 +11796,12 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11415
11796
|
this.stopRecordingMaxRec();
|
|
11416
11797
|
}, maxRecordingTimeMs);
|
|
11417
11798
|
this.maxRecTimerRunning = true;
|
|
11418
|
-
this.status = 2 /* RECORDING */;
|
|
11419
11799
|
this.transportActions.stopAction.disabled = false;
|
|
11420
11800
|
}
|
|
11421
11801
|
stopItem() {
|
|
11422
11802
|
this.transportActions.stopAction.disabled = true;
|
|
11423
11803
|
this.transportActions.nextAction.disabled = true;
|
|
11424
|
-
this.status =
|
|
11804
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
11425
11805
|
this.stopRecording();
|
|
11426
11806
|
}
|
|
11427
11807
|
stopRecording() {
|
|
@@ -11435,7 +11815,7 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11435
11815
|
}
|
|
11436
11816
|
stopRecordingMaxRec() {
|
|
11437
11817
|
this.maxRecTimerRunning = false;
|
|
11438
|
-
this.status =
|
|
11818
|
+
this.status = 4 /* STOPPING_STOP */;
|
|
11439
11819
|
if (this.ac) {
|
|
11440
11820
|
this.ac.stop();
|
|
11441
11821
|
}
|
|
@@ -11454,53 +11834,47 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11454
11834
|
if (this._session) {
|
|
11455
11835
|
sessId = this._session.sessionId;
|
|
11456
11836
|
}
|
|
11457
|
-
|
|
11837
|
+
if (!this.rfUuid) {
|
|
11838
|
+
this.rfUuid = UUID.generate();
|
|
11839
|
+
}
|
|
11840
|
+
let rf = new RecordingFile(this.rfUuid, sessId, ad);
|
|
11458
11841
|
rf._startedAsDateObj = this.startedDate;
|
|
11459
11842
|
if (rf._startedAsDateObj) {
|
|
11460
11843
|
rf.startedDate = rf._startedAsDateObj.toString();
|
|
11461
11844
|
}
|
|
11462
|
-
|
|
11463
|
-
|
|
11464
|
-
|
|
11465
|
-
|
|
11466
|
-
if (
|
|
11467
|
-
apiEndPoint =
|
|
11845
|
+
rf.frames = ad.length;
|
|
11846
|
+
this.displayRecFile = rf;
|
|
11847
|
+
this.recorderCombiPane.push(rf);
|
|
11848
|
+
// Upload if upload enabled and not in chunked upload mode
|
|
11849
|
+
if (this.enableUploadRecordings && !this.uploadChunkSizeSeconds) {
|
|
11850
|
+
let apiEndPoint = '';
|
|
11851
|
+
if (this.config && this.config.apiEndPoint) {
|
|
11852
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
11853
|
+
}
|
|
11854
|
+
if (apiEndPoint !== '') {
|
|
11855
|
+
apiEndPoint = apiEndPoint + '/';
|
|
11856
|
+
}
|
|
11857
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
11858
|
+
let recUrl = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.uuid;
|
|
11859
|
+
// convert asynchronously to 16-bit integer PCM
|
|
11860
|
+
// TODO could we avoid conversion to save CPU resources and transfer float PCM directly?
|
|
11861
|
+
// TODO duplicate conversion for manual download
|
|
11862
|
+
this.processingRecording = true;
|
|
11863
|
+
let ww = new WavWriter();
|
|
11864
|
+
ww.writeAsync(ad, (wavFile) => {
|
|
11865
|
+
this.postRecordingMultipart(wavFile, rf.uuid, rf.session, rf._startedAsDateObj, recUrl);
|
|
11866
|
+
this.processingRecording = false;
|
|
11867
|
+
this.updateWakeLock();
|
|
11868
|
+
this.changeDetectorRef.detectChanges();
|
|
11869
|
+
});
|
|
11468
11870
|
}
|
|
11469
|
-
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
11470
|
-
let recUrl = sessionsUrl + '/' + rf.session + '/' + RECFILE_API_CTX + '/' + rf.uuid;
|
|
11471
|
-
//
|
|
11472
|
-
//
|
|
11473
|
-
//
|
|
11474
|
-
// // convert asynchronously to 16-bit integer PCM
|
|
11475
|
-
// // TODO could we avoid conversion to save CPU resources and transfer float PCM directly?
|
|
11476
|
-
// // TODO duplicate conversion for manual download
|
|
11477
|
-
// //console.log("Build wav writer...");
|
|
11478
|
-
this.processingRecording = true;
|
|
11479
|
-
let ww = new WavWriter();
|
|
11480
|
-
ww.writeAsync(ad, (wavFile) => {
|
|
11481
|
-
rf.frames = ad.length;
|
|
11482
|
-
this.displayRecFile = rf;
|
|
11483
|
-
this.recorderCombiPane.push(rf);
|
|
11484
|
-
this.postRecordingMultipart(wavFile, rf.uuid, rf.session, rf._startedAsDateObj, recUrl);
|
|
11485
|
-
this.processingRecording = false;
|
|
11486
|
-
this.changeDetectorRef.detectChanges();
|
|
11487
|
-
});
|
|
11488
|
-
// }
|
|
11489
11871
|
}
|
|
11490
|
-
// check complete session
|
|
11491
|
-
let complete = true;
|
|
11492
|
-
let autoStart = (this.status === 3 /* STOPPING_STOP */);
|
|
11493
11872
|
this.status = 1 /* IDLE */;
|
|
11494
|
-
let startNext = false;
|
|
11495
11873
|
this.navigationDisabled = false;
|
|
11496
11874
|
this.updateNavigationActions();
|
|
11875
|
+
this.updateWakeLock();
|
|
11497
11876
|
this.changeDetectorRef.detectChanges();
|
|
11498
11877
|
}
|
|
11499
|
-
postRecording(wavFile, recUrl) {
|
|
11500
|
-
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
11501
|
-
let ul = new Upload(wavBlob, recUrl);
|
|
11502
|
-
this.uploader.queueUpload(ul);
|
|
11503
|
-
}
|
|
11504
11878
|
postRecordingMultipart(wavFile, uuid, sessionId, startedDate, recUrl) {
|
|
11505
11879
|
let wavBlob = new Blob([wavFile], { type: 'audio/wav' });
|
|
11506
11880
|
let fd = new FormData();
|
|
@@ -11517,6 +11891,24 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11517
11891
|
let ul = new Upload(fd, recUrl);
|
|
11518
11892
|
this.uploader.queueUpload(ul);
|
|
11519
11893
|
}
|
|
11894
|
+
postChunkAudioBuffer(audioBuffer, chunkIdx) {
|
|
11895
|
+
this.processingRecording = true;
|
|
11896
|
+
let ww = new WavWriter();
|
|
11897
|
+
//new REST API URL
|
|
11898
|
+
let apiEndPoint = '';
|
|
11899
|
+
if (this.config && this.config.apiEndPoint) {
|
|
11900
|
+
apiEndPoint = this.config.apiEndPoint;
|
|
11901
|
+
}
|
|
11902
|
+
if (apiEndPoint !== '') {
|
|
11903
|
+
apiEndPoint = apiEndPoint + '/';
|
|
11904
|
+
}
|
|
11905
|
+
let sessionsUrl = apiEndPoint + SessionService.SESSION_API_CTX;
|
|
11906
|
+
let recUrl = sessionsUrl + '/' + this.session?.sessionId + '/' + RECFILE_API_CTX + '/' + this.rfUuid + '/' + chunkIdx;
|
|
11907
|
+
ww.writeAsync(audioBuffer, (wavFile) => {
|
|
11908
|
+
this.postRecording(wavFile, recUrl);
|
|
11909
|
+
this.processingRecording = false;
|
|
11910
|
+
});
|
|
11911
|
+
}
|
|
11520
11912
|
stop() {
|
|
11521
11913
|
if (this.ac) {
|
|
11522
11914
|
this.ac.close();
|
|
@@ -11544,8 +11936,8 @@ class AudioRecorder extends BasicRecorder {
|
|
|
11544
11936
|
}
|
|
11545
11937
|
}
|
|
11546
11938
|
}
|
|
11547
|
-
AudioRecorder.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
11548
|
-
AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
11939
|
+
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 });
|
|
11940
|
+
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: `
|
|
11549
11941
|
<app-warningbar [show]="isTestSession()" warningText="Test recording only!"></app-warningbar>
|
|
11550
11942
|
<app-warningbar [show]="isDefaultAudioTestSession()"
|
|
11551
11943
|
warningText="This test uses default audio device! Regular sessions may require a particular audio device (microphone)!"></app-warningbar>
|
|
@@ -11573,9 +11965,11 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
11573
11965
|
[agc]="this.ac?.agcStatus"
|
|
11574
11966
|
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
11575
11967
|
</spr-recordingitemcontrols>
|
|
11968
|
+
|
|
11576
11969
|
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11577
11970
|
[value]="uploadProgress"
|
|
11578
11971
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
11972
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11579
11973
|
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
|
|
11580
11974
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11581
11975
|
</div>
|
|
@@ -11586,23 +11980,25 @@ AudioRecorder.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version:
|
|
|
11586
11980
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
11587
11981
|
<div fxFlex="100% 0 100%" class="startstop">
|
|
11588
11982
|
<div style="align-content: center">
|
|
11589
|
-
|
|
11590
|
-
|
|
11591
|
-
|
|
11592
|
-
|
|
11983
|
+
<button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
|
|
11984
|
+
<mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
|
|
11985
|
+
<span style="font-weight: bolder;font-size: 14px">{{startStopNextName()}}</span>
|
|
11986
|
+
</button>
|
|
11593
11987
|
</div>
|
|
11594
11988
|
</div>
|
|
11595
11989
|
<div fxFlex="30% 1 30%" >
|
|
11596
11990
|
<div fxFlex="1 1 auto"></div>
|
|
11991
|
+
|
|
11597
11992
|
<app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11598
11993
|
[value]="uploadProgress"
|
|
11599
11994
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
11995
|
+
<app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11600
11996
|
<app-readystateindicator class="ricontrols" fxHide.xs
|
|
11601
11997
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11602
11998
|
</div>
|
|
11603
11999
|
</div>
|
|
11604
|
-
`, 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
|
|
11605
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
12000
|
+
`, 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"] }] });
|
|
12001
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorder, decorators: [{
|
|
11606
12002
|
type: Component,
|
|
11607
12003
|
args: [{
|
|
11608
12004
|
selector: 'app-audiorecorder',
|
|
@@ -11635,9 +12031,11 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11635
12031
|
[agc]="this.ac?.agcStatus"
|
|
11636
12032
|
(onShowRecordingDetails)="audioSignalCollapsed=!audioSignalCollapsed">
|
|
11637
12033
|
</spr-recordingitemcontrols>
|
|
12034
|
+
|
|
11638
12035
|
<app-uploadstatus class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11639
12036
|
[value]="uploadProgress"
|
|
11640
12037
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
12038
|
+
<app-wakelockindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0" [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11641
12039
|
<app-readystateindicator class="ricontrols dark" fxHide fxShow.xs fxFlex="0 0 0"
|
|
11642
12040
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11643
12041
|
</div>
|
|
@@ -11648,17 +12046,19 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11648
12046
|
class="hidden-xs"></app-sprstatusdisplay>
|
|
11649
12047
|
<div fxFlex="100% 0 100%" class="startstop">
|
|
11650
12048
|
<div style="align-content: center">
|
|
11651
|
-
|
|
11652
|
-
|
|
11653
|
-
|
|
11654
|
-
|
|
12049
|
+
<button (click)="startStopPerform()" [disabled]="startDisabled() && stopDisabled()" mat-raised-button class="bigbutton">
|
|
12050
|
+
<mat-icon [style.color]="startStopNextIconColor()" inline="true">{{startStopNextIconName()}}</mat-icon>
|
|
12051
|
+
<span style="font-weight: bolder;font-size: 14px">{{startStopNextName()}}</span>
|
|
12052
|
+
</button>
|
|
11655
12053
|
</div>
|
|
11656
12054
|
</div>
|
|
11657
12055
|
<div fxFlex="30% 1 30%" >
|
|
11658
12056
|
<div fxFlex="1 1 auto"></div>
|
|
12057
|
+
|
|
11659
12058
|
<app-uploadstatus class="ricontrols" fxHide.xs fxFlex="0 0 0" *ngIf="enableUploadRecordings"
|
|
11660
12059
|
[value]="uploadProgress"
|
|
11661
12060
|
[status]="uploadStatus" [awaitNewUpload]="processingRecording"></app-uploadstatus>
|
|
12061
|
+
<app-wakelockindicator class="ricontrols" fxHide.xs [screenLocked]="screenLocked"></app-wakelockindicator>
|
|
11662
12062
|
<app-readystateindicator class="ricontrols" fxHide.xs
|
|
11663
12063
|
[ready]="dataSaved && !isActive()"></app-readystateindicator>
|
|
11664
12064
|
</div>
|
|
@@ -11700,12 +12100,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11700
12100
|
}`
|
|
11701
12101
|
]
|
|
11702
12102
|
}]
|
|
11703
|
-
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$1.ActivatedRoute }, { type: i1$2.MatDialog }, { type:
|
|
12103
|
+
}], ctorParameters: function () { return [{ type: i0.ChangeDetectorRef }, { type: i0.Renderer2 }, { type: i1$1.ActivatedRoute }, { type: i1$2.MatDialog }, { type: SessionService }, { type: RecordingService }, { type: SpeechRecorderUploader }, { type: SpeechRecorderConfig, decorators: [{
|
|
11704
12104
|
type: Inject,
|
|
11705
12105
|
args: [SPEECHRECORDER_CONFIG]
|
|
11706
|
-
}] }]; }, propDecorators: {
|
|
11707
|
-
type: Input
|
|
11708
|
-
}], projectName: [{
|
|
12106
|
+
}] }]; }, propDecorators: { projectName: [{
|
|
11709
12107
|
type: Input
|
|
11710
12108
|
}], recorderCombiPane: [{
|
|
11711
12109
|
type: ViewChild,
|
|
@@ -11723,7 +12121,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11723
12121
|
args: ['window:keydown', ['$event']]
|
|
11724
12122
|
}] } });
|
|
11725
12123
|
class AudioRecorderComponent extends RecorderComponent {
|
|
11726
|
-
constructor(injector, route, router, changeDetectorRef, sessionService, projectService,
|
|
12124
|
+
constructor(injector, route, router, changeDetectorRef, sessionService, projectService, uploader) {
|
|
11727
12125
|
super(uploader);
|
|
11728
12126
|
this.injector = injector;
|
|
11729
12127
|
this.route = route;
|
|
@@ -11731,7 +12129,6 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
11731
12129
|
this.changeDetectorRef = changeDetectorRef;
|
|
11732
12130
|
this.sessionService = sessionService;
|
|
11733
12131
|
this.projectService = projectService;
|
|
11734
|
-
this.recFilesService = recFilesService;
|
|
11735
12132
|
this.uploader = uploader;
|
|
11736
12133
|
}
|
|
11737
12134
|
ngOnInit() {
|
|
@@ -11785,6 +12182,9 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
11785
12182
|
ngOnDestroy() {
|
|
11786
12183
|
//super.ngOnDestroy();
|
|
11787
12184
|
}
|
|
12185
|
+
get screenLocked() {
|
|
12186
|
+
return this.ar.screenLocked;
|
|
12187
|
+
}
|
|
11788
12188
|
fetchSession(sessionId) {
|
|
11789
12189
|
let sessObs = this.sessionService.sessionObserver(sessionId);
|
|
11790
12190
|
if (sessObs) {
|
|
@@ -11838,17 +12238,18 @@ class AudioRecorderComponent extends RecorderComponent {
|
|
|
11838
12238
|
}
|
|
11839
12239
|
this.ar.uploadProgress = percentUpl;
|
|
11840
12240
|
}
|
|
12241
|
+
this.ar.updateWakeLock(this.dataSaved);
|
|
11841
12242
|
this.changeDetectorRef.detectChanges();
|
|
11842
12243
|
}
|
|
11843
12244
|
ready() {
|
|
11844
12245
|
return this.dataSaved && !this.ar.isActive();
|
|
11845
12246
|
}
|
|
11846
12247
|
}
|
|
11847
|
-
AudioRecorderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
11848
|
-
AudioRecorderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.3.
|
|
12248
|
+
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 });
|
|
12249
|
+
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: `
|
|
11849
12250
|
<app-audiorecorder [projectName]="_project?.name" [dataSaved]="dataSaved"></app-audiorecorder>
|
|
11850
|
-
`, isInline: true, styles: [":host{flex:2;display:flex;height:100%;flex-direction:column;min-height:0}\n"], components: [{ type: AudioRecorder, selector: "app-audiorecorder", inputs: ["
|
|
11851
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
12251
|
+
`, 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"] }] });
|
|
12252
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: AudioRecorderComponent, decorators: [{
|
|
11852
12253
|
type: Component,
|
|
11853
12254
|
args: [{
|
|
11854
12255
|
selector: 'app-audiorecorder-comp',
|
|
@@ -11865,7 +12266,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.2", ngImpor
|
|
|
11865
12266
|
|
|
11866
12267
|
}`]
|
|
11867
12268
|
}]
|
|
11868
|
-
}], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1$1.ActivatedRoute }, { type: i1$1.Router }, { type: i0.ChangeDetectorRef }, { type: SessionService }, { type: ProjectService }, { type:
|
|
12269
|
+
}], 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: [{
|
|
11869
12270
|
type: ViewChild,
|
|
11870
12271
|
args: [AudioRecorder, { static: true }]
|
|
11871
12272
|
}] } });
|
|
@@ -11899,22 +12300,22 @@ class SpeechrecorderngModule {
|
|
|
11899
12300
|
};
|
|
11900
12301
|
}
|
|
11901
12302
|
}
|
|
11902
|
-
SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.
|
|
11903
|
-
SpeechrecorderngModule.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "12.0.0", version: "13.3.
|
|
11904
|
-
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] });
|
|
11905
|
-
SpeechrecorderngModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "13.3.
|
|
11906
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.
|
|
12303
|
+
SpeechrecorderngModule.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
12304
|
+
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,
|
|
12305
|
+
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] });
|
|
12306
|
+
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]] });
|
|
12307
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.3.11", ngImport: i0, type: SpeechrecorderngModule, decorators: [{
|
|
11907
12308
|
type: NgModule,
|
|
11908
12309
|
args: [{
|
|
11909
12310
|
declarations: [AudioSignal, Sonagram, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, Progress, SimpleTrafficLight, Recinstructions, Prompter, PromptContainer, PromptingContainer, Prompting, StatusDisplay,
|
|
11910
|
-
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder],
|
|
12311
|
+
ProgressDisplay, RecordingItemDisplay, RecordingItemControls, UploadStatus, TransportPanel, WakeLockIndicator, ReadyStateIndicator, ControlPanel, WarningBar, AudioRecorder, SessionManager, MessageDialog, SessionFinishedDialog, SpeechrecorderngComponent, AudioRecorderComponent, RecordingFileViewComponent, RecordingFileUI, ScrollIntoViewDirective, RecordingFileNaviComponent, RecordingFileMetaComponent, RecordingList, RecorderCombiPane, AudioRecorder],
|
|
11911
12312
|
exports: [MessageDialog, SpeechrecorderngComponent, ScrollPaneHorizontal, AudioClipUIContainer, AudioDisplayScrollPane, AudioDisplay, AudioDisplayPlayer, AudioDisplayControl, LevelBar, AudioRecorder],
|
|
11912
12313
|
imports: [RouterModule.forChild(SPR_ROUTES), FlexLayoutModule, CommonModule, MatIconModule, MatButtonModule, MatDialogModule, MatProgressBarModule, MatProgressSpinnerModule, MatTooltipModule, HttpClientModule, MatCheckboxModule, MatCardModule, MatDividerModule, MatGridListModule, MatTableModule, MatInputModule, MatSelectModule, MatSnackBarModule],
|
|
11913
12314
|
providers: [SessionService, ProjectService, ScriptService, RecordingService, RecordingFileService, SpeechRecorderUploader]
|
|
11914
12315
|
}]
|
|
11915
12316
|
}] });
|
|
11916
12317
|
|
|
11917
|
-
const VERSION = '2.
|
|
12318
|
+
const VERSION = '2.25.2';
|
|
11918
12319
|
|
|
11919
12320
|
/*
|
|
11920
12321
|
* Public API Surface of speechrecorderng
|