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 }