dev@382
|
1 /**
|
dev@382
|
2 * Created by lucast on 31/05/2017.
|
dev@382
|
3 */
|
cannam@471
|
4 import {
|
cannam@473
|
5 VerticallyBinnedWavesComponent,
|
dev@489
|
6 WavesComponent,
|
dev@489
|
7 PlayheadRenderer,
|
dev@489
|
8 VerticallyLabelled,
|
dev@489
|
9 VerticalScaleRenderer
|
cannam@471
|
10 } from '../waves-base.component';
|
dev@382
|
11 import {
|
dev@382
|
12 ChangeDetectionStrategy,
|
dev@382
|
13 Component,
|
dev@382
|
14 Input,
|
dev@382
|
15 } from '@angular/core';
|
dev@382
|
16 import Waves from 'waves-ui-piper';
|
dev@477
|
17 import {Grid} from '../FeatureUtilities';
|
dev@382
|
18 import {iceMapper} from '../../spectrogram/ColourMap';
|
dev@382
|
19 import {estimatePercentile} from '../../spectrogram/MatrixUtils';
|
dev@382
|
20
|
dev@382
|
21 @Component({
|
dev@382
|
22 selector: 'ugly-grid',
|
dev@382
|
23 templateUrl: '../waves-template.html',
|
dev@382
|
24 styleUrls: ['../waves-template.css'],
|
dev@405
|
25 changeDetection: ChangeDetectionStrategy.OnPush,
|
dev@405
|
26 providers: [
|
dev@489
|
27 {provide: VerticallyLabelled, useExisting: GridComponent },
|
dev@488
|
28 {provide: VerticalScaleRenderer, useExisting: GridComponent},
|
dev@488
|
29 {provide: PlayheadRenderer, useExisting: GridComponent },
|
dev@405
|
30 {provide: WavesComponent, useExisting: GridComponent}
|
dev@405
|
31 ]
|
dev@382
|
32 })
|
dev@383
|
33
|
dev@477
|
34 export class GridComponent extends VerticallyBinnedWavesComponent<Grid> {
|
cannam@472
|
35
|
dev@477
|
36 @Input() set grid(grid: Grid) {
|
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 }
|
dev@477
|
69
|
dev@489
|
70 get labels(): string[] {
|
cannam@474
|
71 if (!this.feature.binNames || this.feature.binNames.length === 0) {
|
cannam@474
|
72 const binCount = (this.feature.data.length > 0 ?
|
cannam@474
|
73 this.feature.data[0].length : 0);
|
cannam@474
|
74 for (let i = 0; i < binCount; ++i) {
|
dev@477
|
75 this.feature.binNames.push(`${i + 1}`);
|
cannam@474
|
76 }
|
cannam@474
|
77 }
|
cannam@473
|
78 return this.feature.binNames;
|
cannam@471
|
79 }
|
dev@382
|
80 }
|