Mercurial > hg > ugly-duckling
view src/app/app.component.ts @ 49:92c139e16b51
Disable button whilst extracting (for now) - quick fix to stop multiple process requests being sent (as they aren't queued / no request-response matching is done / process requests are synchronous)
| author | Lucas Thompson <dev@lucas.im> |
|---|---|
| date | Tue, 06 Dec 2016 11:12:56 +0000 |
| parents | af0b4b05311c |
| children | f31b14e2132e |
line wrap: on
line source
import {Component} from '@angular/core'; import {AudioPlayerService} from "./services/audio-player/audio-player.service"; import {FeatureExtractionService} from "./services/feature-extraction/feature-extraction.service"; import {ExtractorOutputInfo} from "./feature-extraction-menu/feature-extraction-menu.component"; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { audioBuffer: AudioBuffer; // TODO consider revising canExtract: boolean; constructor(private audioService: AudioPlayerService, private piperService: FeatureExtractionService) { this.canExtract = false; } onFileOpened(file: File) { this.canExtract = false; const reader: FileReader = new FileReader(); const mimeType = file.type; reader.onload = (event: any) => { this.audioService.loadAudioFromUrl( URL.createObjectURL(new Blob([event.target.result], {type: mimeType})) ); // TODO use a rxjs/Subject instead? this.audioService.decodeAudioData(event.target.result).then(audioBuffer => { this.audioBuffer = audioBuffer; if (this.audioBuffer) this.canExtract = true; }); }; reader.readAsArrayBuffer(file); } extractFeatures(outputInfo: ExtractorOutputInfo): void { if (!this.canExtract) return; this.canExtract = false; this.piperService.process({ audioData: [...Array(this.audioBuffer.numberOfChannels).keys()] .map(i => this.audioBuffer.getChannelData(i)), audioFormat: { sampleRate: this.audioBuffer.sampleRate, channelCount: this.audioBuffer.numberOfChannels }, key: outputInfo.extractorKey, outputId: outputInfo.outputId }).then(data => { this.canExtract = true; console.log(data); }).catch(err => console.error(err)); } }
