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@37: import { AudioPlayerService } 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@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: 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@172: NotebookFeedComponent 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@78: {provide: 'PiperRepoUri', useValue: 'assets/remote-plugins.json'} dev@1: ], angular-cli@0: bootstrap: [AppComponent] angular-cli@0: }) dev@1: export class AppModule { dev@1: dev@1: }