annotate src/app/app.module.ts @ 388:5f775358c3cf

Introduce vertical-scale component which is a polymorphic container, the child components know how to render their own scales.
author Lucas Thompson <dev@lucas.im>
date Thu, 01 Jun 2017 10:02:37 +0100
parents c1cedba9557b
children a02e6ec4a9d2
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@347 7 import { WaveformComponent } from './visualisations/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@284 31 import {Observable} from 'rxjs/Observable';
dev@347 32 import {PlayHeadComponent} from './playhead/playhead.component';
dev@347 33 import {LivePlayHeadComponent} from './playhead/live-play-head.component';
dev@378 34 import {CurveComponent} from './visualisations/curve/curve.component';
dev@378 35 import {TracksComponent} from './visualisations/tracks/tracks.components';
dev@378 36 import {NotesComponent} from './visualisations/notes/notes.component';
dev@381 37 import {InstantsComponent} from './visualisations/instants/instants.component';
dev@382 38 import {GridComponent} from './visualisations/grid/grid.component';
dev@388 39 import {VerticalScaleComponent} from "./visualisations/vertical-scale.component";
dev@31 40
dev@93 41 export function createAudioContext(): AudioContext {
dev@31 42 return new (
dev@31 43 (window as any).AudioContext
dev@31 44 || (window as any).webkitAudioContext
dev@31 45 )();
dev@31 46 }
angular-cli@0 47
dev@94 48 export function createAudioElement(): HTMLAudioElement {
dev@94 49 return new Audio();
dev@94 50 }
dev@94 51
dev@135 52 export function createAudioInputProvider(): AudioInputProvider {
dev@135 53 if (navigator.mediaDevices &&
dev@135 54 typeof navigator.mediaDevices.getUserMedia === 'function') {
dev@135 55 return () => navigator.mediaDevices.getUserMedia(
dev@135 56 {audio: true, video: false}
dev@135 57 );
dev@135 58 } else {
dev@135 59 return () => Promise.reject('Recording is not supported in this browser.');
dev@135 60 }
dev@135 61 }
dev@135 62
dev@135 63 declare const MediaRecorder: {
dev@135 64 prototype: IMediaRecorder;
dev@135 65 new(stream: MediaStream,
dev@135 66 options?: MediaRecorderOptions): IMediaRecorder;
dev@135 67 isTypeSupported(mimeType: string): boolean;
dev@135 68 };
dev@135 69
dev@135 70 export function createMediaRecorderFactory(): MediaRecorderConstructor {
dev@135 71 if (typeof MediaRecorder !== 'undefined') {
dev@135 72 return MediaRecorder;
dev@135 73 } else {
dev@135 74 return ThrowingMediaRecorder;
dev@135 75 }
dev@135 76 }
dev@135 77
dev@194 78 export function createUrlResourceManager(): UrlResourceLifetimeManager {
dev@194 79 return {
dev@194 80 createUrlToResource: (resource: File | Blob): string => {
dev@194 81 return URL.createObjectURL(resource);
dev@194 82 },
dev@194 83 revokeUrlToResource: (url: string) => {
dev@194 84 URL.revokeObjectURL(url);
dev@194 85 }
dev@194 86 };
dev@194 87 }
dev@191 88
dev@236 89 export function createResourceReader(): ResourceReader {
dev@195 90 return (resource) => {
dev@195 91 return new Promise((res, rej) => {
dev@195 92 const reader: FileReader = new FileReader();
dev@195 93 reader.onload = (event: any) => {
dev@195 94 res(event.target.result);
dev@195 95 };
dev@195 96 reader.onerror = (event) => {
dev@195 97 rej(event.message);
dev@195 98 };
dev@195 99 reader.readAsArrayBuffer(resource);
dev@195 100 });
dev@233 101 };
dev@195 102 }
dev@192 103
dev@284 104 export interface Dimension {
dev@284 105 width: number;
dev@284 106 height: number;
dev@284 107 }
dev@284 108 export function createWindowDimensionObservable(): Observable<Dimension> {
dev@284 109 return Observable.fromEvent(window, 'resize', () => ({
dev@284 110 height: window.innerHeight,
dev@284 111 width: window.innerWidth
dev@284 112 })).share();
dev@284 113 }
angular-cli@0 114 @NgModule({
angular-cli@0 115 declarations: [
dev@1 116 AppComponent,
dev@13 117 WaveformComponent,
dev@21 118 AudioFileOpenComponent,
dev@44 119 PlaybackControlComponent,
dev@135 120 RecordingControlComponent,
dev@115 121 FeatureExtractionMenuComponent,
dev@172 122 ProgressSpinnerComponent,
dev@172 123 AnalysisItemComponent,
dev@233 124 NotebookFeedComponent,
dev@347 125 ProgressBarComponent,
dev@347 126 PlayHeadComponent,
dev@359 127 LivePlayHeadComponent,
dev@372 128 CurveComponent,
dev@378 129 TracksComponent,
dev@381 130 NotesComponent,
dev@382 131 InstantsComponent,
dev@388 132 GridComponent,
dev@388 133 VerticalScaleComponent
angular-cli@0 134 ],
angular-cli@0 135 imports: [
angular-cli@0 136 BrowserModule,
angular-cli@0 137 FormsModule,
dev@3 138 HttpModule,
dev@236 139 UglyMaterialModule
angular-cli@0 140 ],
dev@1 141 providers: [
dev@94 142 {provide: HTMLAudioElement, useFactory: createAudioElement}, // TODO use something more generic than HTMLAudioElement
dev@94 143 {provide: 'AudioContext', useFactory: createAudioContext}, // use a string token, Safari doesn't seem to like AudioContext
dev@40 144 AudioPlayerService,
dev@135 145 {provide: 'AudioInputProvider', useFactory: createAudioInputProvider},
dev@135 146 AudioRecorderService,
dev@70 147 FeatureExtractionService,
dev@135 148 {provide: 'MediaRecorderFactory', useFactory: createMediaRecorderFactory},
dev@236 149 {provide: 'PiperRepoUri', useValue: 'assets/remote-extractors.json'},
dev@194 150 {provide: 'UrlResourceLifetimeManager', useFactory: createUrlResourceManager},
dev@284 151 {provide: 'ResourceReader', useFactory: createResourceReader},
dev@284 152 {provide: 'DimensionObservable', useFactory: createWindowDimensionObservable}
dev@1 153 ],
angular-cli@0 154 bootstrap: [AppComponent]
angular-cli@0 155 })
dev@1 156 export class AppModule {
dev@1 157
dev@1 158 }