dev@382: /** dev@382: * Created by lucast on 31/05/2017. dev@382: */ cannam@471: import { cannam@473: VerticallyBinnedWavesComponent, dev@489: WavesComponent, dev@489: PlayheadRenderer, dev@489: VerticallyLabelled, dev@489: VerticalScaleRenderer cannam@471: } from '../waves-base.component'; dev@382: import { dev@382: ChangeDetectionStrategy, dev@382: Component, dev@382: Input, dev@382: } from '@angular/core'; dev@382: import Waves from 'waves-ui-piper'; dev@477: import {Grid} from '../FeatureUtilities'; dev@382: import {iceMapper} from '../../spectrogram/ColourMap'; dev@382: import {estimatePercentile} from '../../spectrogram/MatrixUtils'; dev@382: dev@382: @Component({ dev@382: selector: 'ugly-grid', dev@382: templateUrl: '../waves-template.html', dev@382: styleUrls: ['../waves-template.css'], dev@405: changeDetection: ChangeDetectionStrategy.OnPush, dev@405: providers: [ dev@489: {provide: VerticallyLabelled, useExisting: GridComponent }, dev@488: {provide: VerticalScaleRenderer, useExisting: GridComponent}, dev@488: {provide: PlayheadRenderer, useExisting: GridComponent }, dev@405: {provide: WavesComponent, useExisting: GridComponent} dev@405: ] dev@382: }) dev@383: dev@477: export class GridComponent extends VerticallyBinnedWavesComponent { cannam@472: dev@477: @Input() set grid(grid: Grid) { dev@383: this.feature = grid; dev@382: } dev@382: dev@383: protected get featureLayers(): Layer[] { cannam@471: const startTime = this.feature.startTime; dev@383: const stepDuration = this.feature.stepDuration; dev@383: const matrixData = this.feature.data; dev@382: dev@382: if (matrixData.length === 0) { dev@383: return []; dev@382: } dev@382: dev@382: const targetValue = estimatePercentile(matrixData, 95); dev@382: const gain = (targetValue > 0.0 ? (1.0 / targetValue) : 1.0); dev@382: const matrixEntity = new Waves.utils.PrefilledMatrixEntity( dev@382: matrixData, cannam@471: startTime, dev@382: stepDuration dev@382: ); dev@382: dev@383: return [ dev@382: new Waves.helpers.MatrixLayer( dev@382: matrixEntity, dev@382: { dev@382: gain: gain, dev@382: height: this.height, dev@382: normalise: 'none', dev@382: mapper: iceMapper() dev@382: } dev@383: ) dev@383: ]; dev@382: } dev@477: dev@489: get labels(): string[] { cannam@474: if (!this.feature.binNames || this.feature.binNames.length === 0) { cannam@474: const binCount = (this.feature.data.length > 0 ? cannam@474: this.feature.data[0].length : 0); cannam@474: for (let i = 0; i < binCount; ++i) { dev@477: this.feature.binNames.push(`${i + 1}`); cannam@474: } cannam@474: } cannam@473: return this.feature.binNames; cannam@471: } dev@382: }