dev@407
|
1 /**
|
dev@407
|
2 * Created by lucas on 03/06/2017.
|
dev@407
|
3 */
|
dev@407
|
4 import {
|
dev@407
|
5 AfterViewInit,
|
dev@407
|
6 ChangeDetectionStrategy,
|
dev@407
|
7 Component,
|
dev@407
|
8 ContentChildren,
|
dev@407
|
9 Input, OnDestroy,
|
dev@407
|
10 QueryList
|
dev@407
|
11 } from '@angular/core';
|
dev@407
|
12 import {
|
dev@488
|
13 LayerRemover, PlayheadRenderer,
|
dev@407
|
14 WavesComponent
|
dev@407
|
15 } from '../visualisations/waves-base.component';
|
dev@407
|
16 import Waves from 'waves-ui-piper';
|
dev@407
|
17 import {
|
dev@407
|
18 RenderLoopService,
|
dev@407
|
19 TaskRemover
|
dev@407
|
20 } from '../services/render-loop/render-loop.service';
|
dev@407
|
21 import {AudioPlayerService} from '../services/audio-player/audio-player.service';
|
dev@407
|
22
|
dev@407
|
23 @Component({
|
dev@407
|
24 selector: 'ugly-waves-play-head',
|
dev@407
|
25 template: '<ng-content></ng-content>',
|
dev@407
|
26 changeDetection: ChangeDetectionStrategy.OnPush
|
dev@407
|
27 })
|
dev@407
|
28 export class WavesPlayHeadComponent implements AfterViewInit, OnDestroy {
|
dev@407
|
29
|
dev@488
|
30 @ContentChildren(PlayheadRenderer) wavesChildren: QueryList<PlayheadRenderer>;
|
dev@407
|
31 @Input() colour: string;
|
dev@407
|
32 @Input() set isActive(isActive: boolean) {
|
dev@407
|
33 this.mIsActive = isActive;
|
dev@407
|
34 this.removeAllActivePlayheads();
|
dev@407
|
35 if (isActive) {
|
dev@407
|
36 this.setupAnimatedPlayheads();
|
dev@407
|
37 }
|
dev@407
|
38 }
|
dev@407
|
39
|
dev@407
|
40 private removers: (TaskRemover | LayerRemover)[];
|
dev@407
|
41 private mIsActive: boolean;
|
dev@407
|
42
|
dev@407
|
43 constructor(private renderLoop: RenderLoopService,
|
dev@407
|
44 private player: AudioPlayerService) {
|
dev@407
|
45 this.removers = [];
|
dev@407
|
46 }
|
dev@407
|
47
|
dev@407
|
48
|
dev@407
|
49 ngAfterViewInit(): void {
|
dev@407
|
50 this.removeAllActivePlayheads();
|
dev@407
|
51 this.setupAnimatedPlayheads();
|
dev@407
|
52 }
|
dev@407
|
53
|
dev@407
|
54 ngOnDestroy(): void {
|
dev@407
|
55 this.removeAllActivePlayheads();
|
dev@407
|
56 }
|
dev@407
|
57
|
dev@407
|
58 private removeAllActivePlayheads(): void {
|
dev@407
|
59 this.removers.forEach(remove => remove());
|
dev@407
|
60 this.removers = [];
|
dev@407
|
61 }
|
dev@407
|
62
|
dev@407
|
63 private setupAnimatedPlayheads(): void {
|
dev@407
|
64 if (this.wavesChildren && this.mIsActive) {
|
dev@407
|
65 this.wavesChildren.forEach(component => {
|
dev@488
|
66 const cursor = component.renderPlayhead(
|
dev@488
|
67 this.player.getCurrentTime(),
|
dev@488
|
68 this.colour
|
dev@488
|
69 );
|
dev@407
|
70 this.removers.push(
|
dev@488
|
71 cursor.remove,
|
dev@488
|
72 this.renderLoop.addPlayingTask(cursor.update)
|
dev@411
|
73 );
|
dev@407
|
74 });
|
dev@407
|
75 }
|
dev@407
|
76 }
|
dev@407
|
77 }
|