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