Mercurial > hg > ugly-duckling
annotate src/app/services/audio-player/audio-player.service.ts @ 37:f6e58c2accb0
Move service into subdirectory.
author | Lucas Thompson <dev@lucas.im> |
---|---|
date | Thu, 01 Dec 2016 15:40:57 +0000 |
parents | |
children | ec38b85be3ac |
rev | line source |
---|---|
dev@37 | 1 import {Injectable, Inject} from '@angular/core'; |
dev@37 | 2 |
dev@37 | 3 @Injectable() |
dev@37 | 4 export class AudioPlayerService { |
dev@37 | 5 |
dev@37 | 6 constructor(@Inject(HTMLAudioElement) private audioElement: HTMLAudioElement /* TODO probably shouldn't play audio this way */, |
dev@37 | 7 @Inject('AudioContext') private audioContext: AudioContext) { |
dev@37 | 8 } |
dev@37 | 9 |
dev@37 | 10 getCurrentTime(): number { |
dev@37 | 11 return this.audioElement.currentTime; |
dev@37 | 12 } |
dev@37 | 13 |
dev@37 | 14 isPlaying(): boolean { |
dev@37 | 15 return !this.audioElement.paused; |
dev@37 | 16 } |
dev@37 | 17 |
dev@37 | 18 decodeAudioData(buffer: ArrayBuffer): Promise<AudioBuffer> { |
dev@37 | 19 return new Promise((res, rej) => this.audioContext.decodeAudioData(buffer, res, rej)); |
dev@37 | 20 } |
dev@37 | 21 |
dev@37 | 22 loadAudioFromUrl(url: string): void { |
dev@37 | 23 this.audioElement.pause(); |
dev@37 | 24 this.audioElement.src = url; |
dev@37 | 25 } |
dev@37 | 26 |
dev@37 | 27 togglePlaying(): void { |
dev@37 | 28 this.isPlaying() ? this.audioElement.pause() : this.audioElement.play(); |
dev@37 | 29 } |
dev@37 | 30 |
dev@37 | 31 setVolume(value: number): void { |
dev@37 | 32 this.audioElement.volume = value; // TODO check bounds? |
dev@37 | 33 } |
dev@37 | 34 |
dev@37 | 35 seekBy(seconds: number): void { |
dev@37 | 36 // TODO some kind of error handling? |
dev@37 | 37 this.audioElement.currentTime += seconds; |
dev@37 | 38 } |
dev@37 | 39 |
dev@37 | 40 seekToStart(): void { |
dev@37 | 41 this.audioElement.currentTime = 0; |
dev@37 | 42 } |
dev@37 | 43 |
dev@37 | 44 seekToEnd(): void { |
dev@37 | 45 this.audioElement.currentTime = this.getDuration(); |
dev@37 | 46 } |
dev@37 | 47 |
dev@37 | 48 getDuration(): number { |
dev@37 | 49 return this.audioElement.duration; |
dev@37 | 50 } |
dev@37 | 51 } |