Mercurial > hg > ugly-duckling
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>(); |