angular-cli@0: import { BrowserModule } from '@angular/platform-browser'; dev@70: import {NgModule} from '@angular/core'; angular-cli@0: import { FormsModule } from '@angular/forms'; angular-cli@0: import { HttpModule } from '@angular/http'; angular-cli@0: angular-cli@0: import { AppComponent } from './app.component'; dev@31: import { MaterialModule } from "@angular/material"; dev@5: import { WaveformComponent } from './waveform/waveform.component'; dev@13: import { AudioFileOpenComponent } from './audio-file-open/audio-file-open.component'; dev@21: import { PlaybackControlComponent } from './playback-control/playback-control.component'; dev@191: import { dev@191: AudioPlayerService, dev@192: UrlResourceLifetimeManager, ResourceReader dev@191: } from "./services/audio-player/audio-player.service"; dev@40: import { FeatureExtractionService } from "./services/feature-extraction/feature-extraction.service"; dev@44: import { FeatureExtractionMenuComponent } from "./feature-extraction-menu/feature-extraction-menu.component"; dev@115: import { ProgressSpinnerComponent } from "./progress-spinner/progress-spinner.component"; dev@135: import { dev@135: AudioRecorderService, dev@135: AudioInputProvider, dev@135: MediaRecorderConstructor, dev@135: MediaRecorder as IMediaRecorder, dev@135: MediaRecorderOptions, dev@135: ThrowingMediaRecorder, dev@135: } from "./services/audio-recorder/audio-recorder.service"; dev@135: import {RecordingControlComponent} from "./recording-control/recording-control.component"; dev@172: import {NotebookFeedComponent} from "./notebook-feed/notebook-feed.component"; dev@172: import {AnalysisItemComponent} from "./analysis-item/analysis-item.component"; dev@233: import {ProgressBarComponent} from "./progress-bar/progress-bar"; dev@31: dev@93: export function createAudioContext(): AudioContext { dev@31: return new ( dev@31: (window as any).AudioContext dev@31: || (window as any).webkitAudioContext dev@31: )(); dev@31: } angular-cli@0: dev@94: export function createAudioElement(): HTMLAudioElement { dev@94: return new Audio(); dev@94: } dev@94: dev@135: export function createAudioInputProvider(): AudioInputProvider { dev@135: if (navigator.mediaDevices && dev@135: typeof navigator.mediaDevices.getUserMedia === 'function') { dev@135: return () => navigator.mediaDevices.getUserMedia( dev@135: {audio: true, video: false} dev@135: ); dev@135: } else { dev@135: return () => Promise.reject('Recording is not supported in this browser.'); dev@135: } dev@135: } dev@135: dev@135: declare const MediaRecorder: { dev@135: prototype: IMediaRecorder; dev@135: new(stream: MediaStream, dev@135: options?: MediaRecorderOptions): IMediaRecorder; dev@135: isTypeSupported(mimeType: string): boolean; dev@135: }; dev@135: dev@135: export function createMediaRecorderFactory(): MediaRecorderConstructor { dev@135: if (typeof MediaRecorder !== 'undefined') { dev@135: return MediaRecorder; dev@135: } else { dev@135: return ThrowingMediaRecorder; dev@135: } dev@135: } dev@135: dev@194: export function createUrlResourceManager(): UrlResourceLifetimeManager { dev@194: return { dev@194: createUrlToResource: (resource: File | Blob): string => { dev@194: return URL.createObjectURL(resource); dev@194: }, dev@194: revokeUrlToResource: (url: string) => { dev@194: URL.revokeObjectURL(url); dev@194: } dev@194: }; dev@194: } dev@191: dev@195: export function createResourceReader(): ResourceReader{ dev@195: return (resource) => { dev@195: return new Promise((res, rej) => { dev@195: const reader: FileReader = new FileReader(); dev@195: reader.onload = (event: any) => { dev@195: res(event.target.result); dev@195: }; dev@195: reader.onerror = (event) => { dev@195: rej(event.message); dev@195: }; dev@195: reader.readAsArrayBuffer(resource); dev@195: }); dev@233: }; dev@195: } dev@192: angular-cli@0: @NgModule({ angular-cli@0: declarations: [ dev@1: AppComponent, dev@13: WaveformComponent, dev@21: AudioFileOpenComponent, dev@44: PlaybackControlComponent, dev@135: RecordingControlComponent, dev@115: FeatureExtractionMenuComponent, dev@172: ProgressSpinnerComponent, dev@172: AnalysisItemComponent, dev@233: NotebookFeedComponent, dev@233: ProgressBarComponent angular-cli@0: ], angular-cli@0: imports: [ angular-cli@0: BrowserModule, angular-cli@0: FormsModule, dev@3: HttpModule, dev@89: MaterialModule angular-cli@0: ], dev@1: providers: [ dev@94: {provide: HTMLAudioElement, useFactory: createAudioElement}, // TODO use something more generic than HTMLAudioElement dev@94: {provide: 'AudioContext', useFactory: createAudioContext}, // use a string token, Safari doesn't seem to like AudioContext dev@40: AudioPlayerService, dev@135: {provide: 'AudioInputProvider', useFactory: createAudioInputProvider}, dev@135: AudioRecorderService, dev@70: FeatureExtractionService, dev@135: {provide: 'MediaRecorderFactory', useFactory: createMediaRecorderFactory}, dev@191: {provide: 'PiperRepoUri', useValue: 'assets/remote-plugins.json'}, dev@194: {provide: 'UrlResourceLifetimeManager', useFactory: createUrlResourceManager}, dev@195: {provide: 'ResourceReader', useFactory: createResourceReader} dev@1: ], angular-cli@0: bootstrap: [AppComponent] angular-cli@0: }) dev@1: export class AppModule { dev@1: dev@1: }