annotate src/app/app.module.ts @ 236:53ea6406d601

Generate new project with latest @angular/cli, including Angular 4.
author Lucas Thompson <dev@lucas.im>
date Tue, 25 Apr 2017 20:01:09 +0100
parents bd2f5769e7fa
children f0c9c9d860e7
rev   line source
angular-cli@0 1 import { BrowserModule } from '@angular/platform-browser';
dev@70 2 import {NgModule} from '@angular/core';
angular-cli@0 3 import { FormsModule } from '@angular/forms';
angular-cli@0 4 import { HttpModule } from '@angular/http';
angular-cli@0 5
angular-cli@0 6 import { AppComponent } from './app.component';
dev@5 7 import { WaveformComponent } from './waveform/waveform.component';
dev@13 8 import { AudioFileOpenComponent } from './audio-file-open/audio-file-open.component';
dev@21 9 import { PlaybackControlComponent } from './playback-control/playback-control.component';
dev@191 10 import {
dev@191 11 AudioPlayerService,
dev@236 12 UrlResourceLifetimeManager,
dev@236 13 ResourceReader
dev@236 14 } from './services/audio-player/audio-player.service';
dev@236 15 import { FeatureExtractionService } from './services/feature-extraction/feature-extraction.service';
dev@236 16 import { FeatureExtractionMenuComponent } from './feature-extraction-menu/feature-extraction-menu.component';
dev@236 17 import { ProgressSpinnerComponent } from './progress-spinner/progress-spinner.component';
dev@135 18 import {
dev@135 19 AudioRecorderService,
dev@135 20 AudioInputProvider,
dev@135 21 MediaRecorderConstructor,
dev@135 22 MediaRecorder as IMediaRecorder,
dev@135 23 MediaRecorderOptions,
dev@135 24 ThrowingMediaRecorder,
dev@236 25 } from './services/audio-recorder/audio-recorder.service';
dev@236 26 import {RecordingControlComponent} from './recording-control/recording-control.component';
dev@236 27 import {NotebookFeedComponent} from './notebook-feed/notebook-feed.component';
dev@236 28 import {AnalysisItemComponent} from './analysis-item/analysis-item.component';
dev@236 29 import {ProgressBarComponent} from './progress-bar/progress-bar';
dev@236 30 import {UglyMaterialModule} from './ugly-material.module';
dev@31 31
dev@93 32 export function createAudioContext(): AudioContext {
dev@31 33 return new (
dev@31 34 (window as any).AudioContext
dev@31 35 || (window as any).webkitAudioContext
dev@31 36 )();
dev@31 37 }
angular-cli@0 38
dev@94 39 export function createAudioElement(): HTMLAudioElement {
dev@94 40 return new Audio();
dev@94 41 }
dev@94 42
dev@135 43 export function createAudioInputProvider(): AudioInputProvider {
dev@135 44 if (navigator.mediaDevices &&
dev@135 45 typeof navigator.mediaDevices.getUserMedia === 'function') {
dev@135 46 return () => navigator.mediaDevices.getUserMedia(
dev@135 47 {audio: true, video: false}
dev@135 48 );
dev@135 49 } else {
dev@135 50 return () => Promise.reject('Recording is not supported in this browser.');
dev@135 51 }
dev@135 52 }
dev@135 53
dev@135 54 declare const MediaRecorder: {
dev@135 55 prototype: IMediaRecorder;
dev@135 56 new(stream: MediaStream,
dev@135 57 options?: MediaRecorderOptions): IMediaRecorder;
dev@135 58 isTypeSupported(mimeType: string): boolean;
dev@135 59 };
dev@135 60
dev@135 61 export function createMediaRecorderFactory(): MediaRecorderConstructor {
dev@135 62 if (typeof MediaRecorder !== 'undefined') {
dev@135 63 return MediaRecorder;
dev@135 64 } else {
dev@135 65 return ThrowingMediaRecorder;
dev@135 66 }
dev@135 67 }
dev@135 68
dev@194 69 export function createUrlResourceManager(): UrlResourceLifetimeManager {
dev@194 70 return {
dev@194 71 createUrlToResource: (resource: File | Blob): string => {
dev@194 72 return URL.createObjectURL(resource);
dev@194 73 },
dev@194 74 revokeUrlToResource: (url: string) => {
dev@194 75 URL.revokeObjectURL(url);
dev@194 76 }
dev@194 77 };
dev@194 78 }
dev@191 79
dev@236 80 export function createResourceReader(): ResourceReader {
dev@195 81 return (resource) => {
dev@195 82 return new Promise((res, rej) => {
dev@195 83 const reader: FileReader = new FileReader();
dev@195 84 reader.onload = (event: any) => {
dev@195 85 res(event.target.result);
dev@195 86 };
dev@195 87 reader.onerror = (event) => {
dev@195 88 rej(event.message);
dev@195 89 };
dev@195 90 reader.readAsArrayBuffer(resource);
dev@195 91 });
dev@233 92 };
dev@195 93 }
dev@192 94
angular-cli@0 95 @NgModule({
angular-cli@0 96 declarations: [
dev@1 97 AppComponent,
dev@13 98 WaveformComponent,
dev@21 99 AudioFileOpenComponent,
dev@44 100 PlaybackControlComponent,
dev@135 101 RecordingControlComponent,
dev@115 102 FeatureExtractionMenuComponent,
dev@172 103 ProgressSpinnerComponent,
dev@172 104 AnalysisItemComponent,
dev@233 105 NotebookFeedComponent,
dev@233 106 ProgressBarComponent
angular-cli@0 107 ],
angular-cli@0 108 imports: [
angular-cli@0 109 BrowserModule,
angular-cli@0 110 FormsModule,
dev@3 111 HttpModule,
dev@236 112 UglyMaterialModule
angular-cli@0 113 ],
dev@1 114 providers: [
dev@94 115 {provide: HTMLAudioElement, useFactory: createAudioElement}, // TODO use something more generic than HTMLAudioElement
dev@94 116 {provide: 'AudioContext', useFactory: createAudioContext}, // use a string token, Safari doesn't seem to like AudioContext
dev@40 117 AudioPlayerService,
dev@135 118 {provide: 'AudioInputProvider', useFactory: createAudioInputProvider},
dev@135 119 AudioRecorderService,
dev@70 120 FeatureExtractionService,
dev@135 121 {provide: 'MediaRecorderFactory', useFactory: createMediaRecorderFactory},
dev@236 122 {provide: 'PiperRepoUri', useValue: 'assets/remote-extractors.json'},
dev@194 123 {provide: 'UrlResourceLifetimeManager', useFactory: createUrlResourceManager},
dev@195 124 {provide: 'ResourceReader', useFactory: createResourceReader}
dev@1 125 ],
angular-cli@0 126 bootstrap: [AppComponent]
angular-cli@0 127 })
dev@1 128 export class AppModule {
dev@1 129
dev@1 130 }