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@488
|
6 WavesComponent, PlayheadRenderer, VerticallyBounded, VerticalScaleRenderer
|
cannam@471
|
7 } from '../waves-base.component';
|
dev@382
|
8 import {
|
dev@382
|
9 ChangeDetectionStrategy,
|
dev@382
|
10 Component,
|
dev@382
|
11 Input,
|
dev@382
|
12 } from '@angular/core';
|
dev@382
|
13 import Waves from 'waves-ui-piper';
|
dev@477
|
14 import {Grid} from '../FeatureUtilities';
|
dev@382
|
15 import {iceMapper} from '../../spectrogram/ColourMap';
|
dev@382
|
16 import {estimatePercentile} from '../../spectrogram/MatrixUtils';
|
dev@382
|
17
|
dev@382
|
18 @Component({
|
dev@382
|
19 selector: 'ugly-grid',
|
dev@382
|
20 templateUrl: '../waves-template.html',
|
dev@382
|
21 styleUrls: ['../waves-template.css'],
|
dev@405
|
22 changeDetection: ChangeDetectionStrategy.OnPush,
|
dev@405
|
23 providers: [
|
dev@488
|
24 {provide: VerticallyBounded, useExisting: GridComponent },
|
dev@488
|
25 {provide: VerticalScaleRenderer, useExisting: GridComponent},
|
dev@488
|
26 {provide: PlayheadRenderer, useExisting: GridComponent },
|
dev@405
|
27 {provide: WavesComponent, useExisting: GridComponent}
|
dev@405
|
28 ]
|
dev@382
|
29 })
|
dev@383
|
30
|
dev@477
|
31 export class GridComponent extends VerticallyBinnedWavesComponent<Grid> {
|
cannam@472
|
32
|
dev@477
|
33 @Input() set grid(grid: Grid) {
|
dev@383
|
34 this.feature = grid;
|
dev@382
|
35 }
|
dev@382
|
36
|
dev@383
|
37 protected get featureLayers(): Layer[] {
|
cannam@471
|
38 const startTime = this.feature.startTime;
|
dev@383
|
39 const stepDuration = this.feature.stepDuration;
|
dev@383
|
40 const matrixData = this.feature.data;
|
dev@382
|
41
|
dev@382
|
42 if (matrixData.length === 0) {
|
dev@383
|
43 return [];
|
dev@382
|
44 }
|
dev@382
|
45
|
dev@382
|
46 const targetValue = estimatePercentile(matrixData, 95);
|
dev@382
|
47 const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0);
|
dev@382
|
48 const matrixEntity = new Waves.utils.PrefilledMatrixEntity(
|
dev@382
|
49 matrixData,
|
cannam@471
|
50 startTime,
|
dev@382
|
51 stepDuration
|
dev@382
|
52 );
|
dev@382
|
53
|
dev@383
|
54 return [
|
dev@382
|
55 new Waves.helpers.MatrixLayer(
|
dev@382
|
56 matrixEntity,
|
dev@382
|
57 {
|
dev@382
|
58 gain: gain,
|
dev@382
|
59 height: this.height,
|
dev@382
|
60 normalise: 'none',
|
dev@382
|
61 mapper: iceMapper()
|
dev@382
|
62 }
|
dev@383
|
63 )
|
dev@383
|
64 ];
|
dev@382
|
65 }
|
dev@477
|
66
|
dev@488
|
67 get range(): string[] {
|
cannam@474
|
68 if (!this.feature.binNames || this.feature.binNames.length === 0) {
|
cannam@474
|
69 const binCount = (this.feature.data.length > 0 ?
|
cannam@474
|
70 this.feature.data[0].length : 0);
|
cannam@474
|
71 for (let i = 0; i < binCount; ++i) {
|
dev@477
|
72 this.feature.binNames.push(`${i + 1}`);
|
cannam@474
|
73 }
|
cannam@474
|
74 }
|
cannam@473
|
75 return this.feature.binNames;
|
cannam@471
|
76 }
|
dev@382
|
77 }
|