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 }