Mercurial > hg > ugly-duckling
annotate src/app/audio-file-open/audio-file-open.component.ts @ 16:7e3ab6f8792f
Rough waveform loading, issues exist regarding communicating changes from child components (unless using the current workaround with explicit zone running)... investigating.
author | Lucas Thompson <dev@lucas.im> |
---|---|
date | Thu, 27 Oct 2016 17:08:57 +0100 |
parents | 0571cf863026 |
children | 953932e9ba82 |
rev | line source |
---|---|
dev@16 | 1 import { |
dev@16 | 2 Component, OnInit, ViewChild, ElementRef, Output, |
dev@16 | 3 EventEmitter |
dev@16 | 4 } from '@angular/core'; |
dev@13 | 5 |
dev@15 | 6 interface AudioContextConstructor { |
dev@15 | 7 new(): AudioContext |
dev@15 | 8 } |
dev@15 | 9 |
dev@15 | 10 interface WindowAudioContext { |
dev@15 | 11 AudioContext?: AudioContextConstructor; |
dev@15 | 12 webkitAudioContext?: AudioContextConstructor |
dev@15 | 13 } |
dev@15 | 14 |
dev@13 | 15 @Component({ |
dev@13 | 16 selector: 'app-audio-file-open', |
dev@13 | 17 templateUrl: './audio-file-open.component.html', |
dev@13 | 18 styleUrls: ['./audio-file-open.component.css'] |
dev@13 | 19 }) |
dev@13 | 20 export class AudioFileOpenComponent implements OnInit { |
dev@13 | 21 |
dev@13 | 22 @ViewChild('open') open: ElementRef; |
dev@16 | 23 @Output() audioLoaded: EventEmitter<AudioBuffer>; |
dev@13 | 24 |
dev@15 | 25 private audioContext: AudioContext; |
dev@15 | 26 |
dev@15 | 27 constructor() { |
dev@16 | 28 this.audioLoaded = new EventEmitter<AudioBuffer>(); |
dev@16 | 29 |
dev@15 | 30 // TODO make a service which provides the AudioContext? |
dev@15 | 31 const factory: WindowAudioContext = (window as WindowAudioContext); |
dev@15 | 32 this.audioContext = new (factory.AudioContext || factory.webkitAudioContext)(); |
dev@15 | 33 } |
dev@13 | 34 |
dev@13 | 35 ngOnInit() { |
dev@13 | 36 } |
dev@13 | 37 |
dev@15 | 38 decodeAudio(files: FileList) { |
dev@15 | 39 if (files.length > 0) { |
dev@15 | 40 const reader: FileReader = new FileReader(); |
dev@15 | 41 reader.onload = (event: any) => { |
dev@15 | 42 this.audioContext.decodeAudioData(event.target.result, buffer => { |
dev@16 | 43 this.audioLoaded.emit(buffer); |
dev@15 | 44 }); |
dev@15 | 45 }; |
dev@15 | 46 reader.readAsArrayBuffer(files[0]); |
dev@15 | 47 } |
dev@13 | 48 } |
dev@13 | 49 |
dev@13 | 50 openAudioDialog() { |
dev@13 | 51 this.open.nativeElement.click(); |
dev@13 | 52 } |
dev@13 | 53 } |