comparison src/app/services/audio-player/audio-player.service.ts @ 192:e4f38975c2bc

Introduce interface for reading a file, once again avoiding specific browser implementation.
author Lucas Thompson <dev@lucas.im>
date Thu, 23 Mar 2017 15:42:34 +0000
parents ea735ebeed0e
children ac57ddba8ba9
comparison
equal deleted inserted replaced
191:ea735ebeed0e 192:e4f38975c2bc
5 export interface UrlResourceLifetimeManager { 5 export interface UrlResourceLifetimeManager {
6 createUrlToResource(resource: File | Blob): string; 6 createUrlToResource(resource: File | Blob): string;
7 revokeUrlToResource(url: string): void; 7 revokeUrlToResource(url: string): void;
8 } 8 }
9 9
10 export type ResourceReader = (resource: File | Blob) => Promise<ArrayBuffer>;
10 @Injectable() 11 @Injectable()
11 export class AudioPlayerService { 12 export class AudioPlayerService {
12 13
13 private currentObjectUrl: string; 14 private currentObjectUrl: string;
14 private playingStateChange: Subject<boolean>; 15 private playingStateChange: Subject<boolean>;
16 private seeked: Subject<number>; 17 private seeked: Subject<number>;
17 seeked$: Observable<number>; 18 seeked$: Observable<number>;
18 19
19 constructor(@Inject(HTMLAudioElement) private audioElement: HTMLAudioElement /* TODO probably shouldn't play audio this way */, 20 constructor(@Inject(HTMLAudioElement) private audioElement: HTMLAudioElement /* TODO probably shouldn't play audio this way */,
20 @Inject('AudioContext') private audioContext: AudioContext, 21 @Inject('AudioContext') private audioContext: AudioContext,
22 @Inject('ResourceReader') private readResource: ResourceReader,
21 @Inject( 23 @Inject(
22 'UrlResourceLifetimeManager' 24 'UrlResourceLifetimeManager'
23 ) private resourceManager: UrlResourceLifetimeManager) { 25 ) private resourceManager: UrlResourceLifetimeManager) {
24 this.currentObjectUrl = ''; 26 this.currentObjectUrl = '';
25 this.playingStateChange = new Subject<boolean>(); 27 this.playingStateChange = new Subject<boolean>();