dev@382
|
1 /**
|
dev@382
|
2 * Created by lucast on 31/05/2017.
|
dev@382
|
3 */
|
cannam@471
|
4 import {
|
cannam@471
|
5 InspectableVerticallyBoundedComponent,
|
cannam@471
|
6 VerticallyBounded,
|
cannam@471
|
7 VerticallyBoundedWavesComponent,
|
cannam@471
|
8 VerticalScaleRenderer,
|
cannam@471
|
9 VerticalValueInspectorRenderer,
|
cannam@471
|
10 WavesComponent
|
cannam@471
|
11 } from '../waves-base.component';
|
dev@382
|
12 import {
|
dev@382
|
13 ChangeDetectionStrategy,
|
dev@382
|
14 Component,
|
dev@382
|
15 Input,
|
dev@382
|
16 } from '@angular/core';
|
dev@382
|
17 import Waves from 'waves-ui-piper';
|
dev@382
|
18 import {MatrixFeature} from 'piper/HigherLevelUtilities';
|
dev@382
|
19 import {iceMapper} from '../../spectrogram/ColourMap';
|
dev@382
|
20 import {estimatePercentile} from '../../spectrogram/MatrixUtils';
|
dev@382
|
21
|
dev@382
|
22 @Component({
|
dev@382
|
23 selector: 'ugly-grid',
|
dev@382
|
24 templateUrl: '../waves-template.html',
|
dev@382
|
25 styleUrls: ['../waves-template.css'],
|
dev@405
|
26 changeDetection: ChangeDetectionStrategy.OnPush,
|
dev@405
|
27 providers: [
|
cannam@471
|
28 {provide: VerticallyBounded, useExisting: GridComponent },
|
cannam@471
|
29 {provide: VerticalScaleRenderer, useExisting: GridComponent },
|
cannam@471
|
30 {provide: VerticalValueInspectorRenderer, useExisting: GridComponent },
|
dev@405
|
31 {provide: WavesComponent, useExisting: GridComponent}
|
dev@405
|
32 ]
|
dev@382
|
33 })
|
cannam@471
|
34 export class GridComponent extends VerticallyBoundedWavesComponent<MatrixFeature> {
|
dev@383
|
35
|
dev@382
|
36 @Input() set grid(grid: MatrixFeature) {
|
dev@383
|
37 this.feature = grid;
|
dev@382
|
38 }
|
dev@382
|
39
|
dev@383
|
40 protected get featureLayers(): Layer[] {
|
cannam@471
|
41 const startTime = this.feature.startTime;
|
dev@383
|
42 const stepDuration = this.feature.stepDuration;
|
dev@383
|
43 const matrixData = this.feature.data;
|
dev@382
|
44
|
dev@382
|
45 if (matrixData.length === 0) {
|
dev@383
|
46 return [];
|
dev@382
|
47 }
|
dev@382
|
48
|
dev@382
|
49 const targetValue = estimatePercentile(matrixData, 95);
|
dev@382
|
50 const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0);
|
dev@382
|
51 const matrixEntity = new Waves.utils.PrefilledMatrixEntity(
|
dev@382
|
52 matrixData,
|
cannam@471
|
53 startTime,
|
dev@382
|
54 stepDuration
|
dev@382
|
55 );
|
dev@382
|
56
|
dev@383
|
57 return [
|
dev@382
|
58 new Waves.helpers.MatrixLayer(
|
dev@382
|
59 matrixEntity,
|
dev@382
|
60 {
|
dev@382
|
61 gain: gain,
|
dev@382
|
62 height: this.height,
|
dev@382
|
63 normalise: 'none',
|
dev@382
|
64 mapper: iceMapper()
|
dev@382
|
65 }
|
dev@383
|
66 )
|
dev@383
|
67 ];
|
dev@382
|
68 }
|
cannam@471
|
69
|
cannam@471
|
70 get range(): [number, number] {
|
cannam@471
|
71 return [0, this.feature.data.length > 0 ? this.feature.data[0].length : 0];
|
cannam@471
|
72 }
|
dev@382
|
73 }
|