annotate src/app/app.module.ts @ 509:041468f553e1 tip master

Merge pull request #57 from LucasThompson/fix/session-stack-max-call-stack Fix accidental recursion in PersistentStack
author Lucas Thompson <LucasThompson@users.noreply.github.com>
date Mon, 27 Nov 2017 11:04:30 +0000
parents abbc096e0335
children
rev   line source
dev@497 1 import {BrowserModule} from '@angular/platform-browser';
dev@70 2 import {NgModule} from '@angular/core';
dev@497 3 import {FormsModule} from '@angular/forms';
dev@497 4 import {HttpModule} from '@angular/http';
angular-cli@0 5
dev@497 6 import {AppComponent} from './app.component';
dev@497 7 import {WaveformComponent} from './visualisations/waveform/waveform.component';
dev@497 8 import {AudioFileOpenComponent} from './audio-file-open/audio-file-open.component';
dev@497 9 import {PlaybackControlComponent} from './playback-control/playback-control.component';
dev@191 10 import {
dev@191 11 AudioPlayerService,
dev@236 12 ResourceReader
dev@236 13 } from './services/audio-player/audio-player.service';
dev@497 14 import {FeatureExtractionService} from './services/feature-extraction/feature-extraction.service';
dev@497 15 import {FeatureExtractionMenuComponent} from './feature-extraction-menu/feature-extraction-menu.component';
dev@497 16 import {ProgressSpinnerComponent} from './progress-spinner/progress-spinner.component';
dev@135 17 import {
dev@497 18 AudioInputProvider,
dev@135 19 AudioRecorderService,
dev@497 20 MediaRecorder as IMediaRecorder,
dev@135 21 MediaRecorderConstructor,
dev@446 22 MediaRecorderOptions
dev@236 23 } from './services/audio-recorder/audio-recorder.service';
dev@236 24 import {RecordingControlComponent} from './recording-control/recording-control.component';
dev@236 25 import {NotebookFeedComponent} from './notebook-feed/notebook-feed.component';
dev@236 26 import {AnalysisItemComponent} from './analysis-item/analysis-item.component';
dev@236 27 import {ProgressBarComponent} from './progress-bar/progress-bar';
dev@236 28 import {UglyMaterialModule} from './ugly-material.module';
dev@284 29 import {Observable} from 'rxjs/Observable';
dev@347 30 import {PlayHeadComponent} from './playhead/playhead.component';
dev@347 31 import {LivePlayHeadComponent} from './playhead/live-play-head.component';
dev@378 32 import {CurveComponent} from './visualisations/curve/curve.component';
dev@378 33 import {TracksComponent} from './visualisations/tracks/tracks.components';
dev@378 34 import {NotesComponent} from './visualisations/notes/notes.component';
cannam@480 35 import {RegionsComponent} from './visualisations/regions/regions.component';
dev@381 36 import {InstantsComponent} from './visualisations/instants/instants.component';
dev@382 37 import {GridComponent} from './visualisations/grid/grid.component';
dev@393 38 import {VerticalScaleComponent} from './visualisations/vertical-scale.component';
dev@393 39 import {CrossHairInspectorComponent} from './visualisations/cross-hair-inspector.component';
dev@397 40 import {RenderLoopService} from './services/render-loop/render-loop.service';
dev@411 41 import {WavesPlayHeadComponent} from './playhead/waves-ui-play-head.component';
dev@497 42 import {ActionTrayComponent} from './actions/action-tray.component';
dev@446 43 import {RecordRtcMediaRecorder} from './services/audio-recorder/RecordRtcMediaRecorder';
dev@493 44 import {NotificationService} from './services/notifications/notifications.service';
dev@497 45 import {UrlResourceLifetimeManager} from "./services/File";
dev@31 46
dev@93 47 export function createAudioContext(): AudioContext {
dev@31 48 return new (
dev@31 49 (window as any).AudioContext
dev@31 50 || (window as any).webkitAudioContext
dev@31 51 )();
dev@31 52 }
angular-cli@0 53
dev@94 54 export function createAudioElement(): HTMLAudioElement {
dev@94 55 return new Audio();
dev@94 56 }
dev@94 57
dev@135 58 export function createAudioInputProvider(): AudioInputProvider {
dev@135 59 if (navigator.mediaDevices &&
dev@135 60 typeof navigator.mediaDevices.getUserMedia === 'function') {
dev@135 61 return () => navigator.mediaDevices.getUserMedia(
dev@135 62 {audio: true, video: false}
dev@135 63 );
dev@135 64 } else {
dev@135 65 return () => Promise.reject('Recording is not supported in this browser.');
dev@135 66 }
dev@135 67 }
dev@135 68
dev@135 69 declare const MediaRecorder: {
dev@135 70 prototype: IMediaRecorder;
dev@135 71 new(stream: MediaStream,
dev@135 72 options?: MediaRecorderOptions): IMediaRecorder;
dev@135 73 isTypeSupported(mimeType: string): boolean;
dev@135 74 };
dev@135 75
dev@135 76 export function createMediaRecorderFactory(): MediaRecorderConstructor {
dev@135 77 if (typeof MediaRecorder !== 'undefined') {
dev@135 78 return MediaRecorder;
dev@135 79 } else {
dev@446 80 return RecordRtcMediaRecorder;
dev@135 81 }
dev@135 82 }
dev@135 83
dev@194 84 export function createUrlResourceManager(): UrlResourceLifetimeManager {
dev@194 85 return {
dev@194 86 createUrlToResource: (resource: File | Blob): string => {
dev@194 87 return URL.createObjectURL(resource);
dev@194 88 },
dev@194 89 revokeUrlToResource: (url: string) => {
dev@194 90 URL.revokeObjectURL(url);
dev@194 91 }
dev@194 92 };
dev@194 93 }
dev@191 94
dev@236 95 export function createResourceReader(): ResourceReader {
dev@195 96 return (resource) => {
dev@195 97 return new Promise((res, rej) => {
dev@195 98 const reader: FileReader = new FileReader();
dev@195 99 reader.onload = (event: any) => {
dev@195 100 res(event.target.result);
dev@195 101 };
dev@195 102 reader.onerror = (event) => {
dev@195 103 rej(event.message);
dev@195 104 };
dev@195 105 reader.readAsArrayBuffer(resource);
dev@195 106 });
dev@233 107 };
dev@195 108 }
dev@192 109
dev@284 110 export interface Dimension {
dev@284 111 width: number;
dev@284 112 height: number;
dev@284 113 }
dev@284 114 export function createWindowDimensionObservable(): Observable<Dimension> {
dev@284 115 return Observable.fromEvent(window, 'resize', () => ({
dev@284 116 height: window.innerHeight,
dev@284 117 width: window.innerWidth
dev@284 118 })).share();
dev@284 119 }
angular-cli@0 120 @NgModule({
angular-cli@0 121 declarations: [
dev@1 122 AppComponent,
dev@13 123 WaveformComponent,
dev@21 124 AudioFileOpenComponent,
dev@44 125 PlaybackControlComponent,
dev@135 126 RecordingControlComponent,
dev@115 127 FeatureExtractionMenuComponent,
dev@172 128 ProgressSpinnerComponent,
dev@172 129 AnalysisItemComponent,
dev@233 130 NotebookFeedComponent,
dev@347 131 ProgressBarComponent,
dev@347 132 PlayHeadComponent,
dev@359 133 LivePlayHeadComponent,
dev@372 134 CurveComponent,
dev@378 135 TracksComponent,
dev@381 136 NotesComponent,
cannam@480 137 RegionsComponent,
dev@382 138 InstantsComponent,
dev@388 139 GridComponent,
dev@393 140 VerticalScaleComponent,
dev@407 141 CrossHairInspectorComponent,
dev@423 142 WavesPlayHeadComponent,
dev@423 143 ActionTrayComponent
angular-cli@0 144 ],
angular-cli@0 145 imports: [
angular-cli@0 146 BrowserModule,
angular-cli@0 147 FormsModule,
dev@3 148 HttpModule,
dev@236 149 UglyMaterialModule
angular-cli@0 150 ],
dev@1 151 providers: [
dev@94 152 {provide: HTMLAudioElement, useFactory: createAudioElement}, // TODO use something more generic than HTMLAudioElement
dev@94 153 {provide: 'AudioContext', useFactory: createAudioContext}, // use a string token, Safari doesn't seem to like AudioContext
dev@40 154 AudioPlayerService,
dev@135 155 {provide: 'AudioInputProvider', useFactory: createAudioInputProvider},
dev@135 156 AudioRecorderService,
dev@70 157 FeatureExtractionService,
dev@135 158 {provide: 'MediaRecorderFactory', useFactory: createMediaRecorderFactory},
dev@236 159 {provide: 'PiperRepoUri', useValue: 'assets/remote-extractors.json'},
dev@194 160 {provide: 'UrlResourceLifetimeManager', useFactory: createUrlResourceManager},
dev@284 161 {provide: 'ResourceReader', useFactory: createResourceReader},
dev@397 162 {provide: 'DimensionObservable', useFactory: createWindowDimensionObservable},
dev@493 163 RenderLoopService,
dev@493 164 NotificationService
dev@1 165 ],
angular-cli@0 166 bootstrap: [AppComponent]
angular-cli@0 167 })
dev@1 168 export class AppModule {
dev@1 169
dev@1 170 }