dev@31: import {Component} from '@angular/core'; dev@37: import {AudioPlayerService} from "./services/audio-player/audio-player.service"; dev@47: import {FeatureExtractionService} from "./services/feature-extraction/feature-extraction.service"; dev@47: import {ExtractorOutputInfo} from "./feature-extraction-menu/feature-extraction-menu.component"; angular-cli@0: angular-cli@0: @Component({ angular-cli@0: selector: 'app-root', angular-cli@0: templateUrl: './app.component.html', angular-cli@0: styleUrls: ['./app.component.css'] angular-cli@0: }) angular-cli@0: export class AppComponent { dev@31: audioBuffer: AudioBuffer; // TODO consider revising dev@49: canExtract: boolean; dev@1: dev@47: constructor(private audioService: AudioPlayerService, dev@48: private piperService: FeatureExtractionService) { dev@49: this.canExtract = false; dev@48: } dev@16: dev@31: onFileOpened(file: File) { dev@49: this.canExtract = false; dev@31: const reader: FileReader = new FileReader(); dev@31: const mimeType = file.type; dev@31: reader.onload = (event: any) => { dev@31: this.audioService.loadAudioFromUrl( dev@31: URL.createObjectURL(new Blob([event.target.result], {type: mimeType})) dev@31: ); dev@31: // TODO use a rxjs/Subject instead? dev@31: this.audioService.decodeAudioData(event.target.result).then(audioBuffer => { dev@31: this.audioBuffer = audioBuffer; dev@48: if (this.audioBuffer) dev@49: this.canExtract = true; dev@31: }); dev@31: }; dev@31: reader.readAsArrayBuffer(file); dev@16: } dev@47: dev@48: extractFeatures(outputInfo: ExtractorOutputInfo): void { dev@50: if (!this.canExtract || !outputInfo) return; dev@49: this.canExtract = false; dev@47: this.piperService.process({ dev@47: audioData: [...Array(this.audioBuffer.numberOfChannels).keys()] dev@47: .map(i => this.audioBuffer.getChannelData(i)), dev@47: audioFormat: { dev@47: sampleRate: this.audioBuffer.sampleRate, dev@47: channelCount: this.audioBuffer.numberOfChannels dev@47: }, dev@47: key: outputInfo.extractorKey, dev@47: outputId: outputInfo.outputId dev@50: }).then(() => { dev@49: this.canExtract = true; dev@49: }).catch(err => console.error(err)); dev@47: } angular-cli@0: }