mirror of
https://github.com/Zagrios/bs-manager.git
synced 2026-07-03 14:08:25 +02:00
[feature-154] volume slider finished
This commit is contained in:
@@ -1,5 +1,4 @@
|
||||
import { Observable } from "rxjs";
|
||||
import { BehaviorSubject } from "rxjs";
|
||||
import { Observable, BehaviorSubject } from "rxjs";
|
||||
import { ConfigurationService } from "./configuration.service";
|
||||
|
||||
export class AudioPlayerService{
|
||||
@@ -18,24 +17,34 @@ export class AudioPlayerService{
|
||||
private readonly _src$: BehaviorSubject<string> = new BehaviorSubject("");
|
||||
private readonly _playing$: BehaviorSubject<boolean> = new BehaviorSubject(false);
|
||||
private readonly _bpm$: BehaviorSubject<number> = new BehaviorSubject(0);
|
||||
private readonly _volume$: BehaviorSubject<number> = new BehaviorSubject(0);
|
||||
private readonly _volume$: BehaviorSubject<PlayerVolume>;
|
||||
|
||||
private lastVolume: number;
|
||||
|
||||
private constructor(){
|
||||
|
||||
this.config = ConfigurationService.getInstance();
|
||||
|
||||
console.log("BBB", this.config.get<PlayerVolume>("audio-level"));
|
||||
|
||||
this._volume$ = new BehaviorSubject(
|
||||
this.config.get<PlayerVolume>("audio-level") || { volume: 0.5, muted: false }
|
||||
);
|
||||
|
||||
this.lastVolume = this._volume$.value.volume;
|
||||
|
||||
this.player = new Audio();
|
||||
|
||||
this.player.onplay = () => this._playing$.next(true);
|
||||
this.player.onpause = () => this._playing$.next(false);
|
||||
this.player.onended = () => this._playing$.next(false);
|
||||
|
||||
this.player.onvolumechange = () => {
|
||||
this._volume$.next(this.player.volume);
|
||||
this.config.set("audio-level", this.player.volume, true);
|
||||
}
|
||||
|
||||
this.player.volume = this.config.get("audio-level") ?? 0.5;
|
||||
this._volume$.subscribe(volume => {
|
||||
console.log("AAA", volume);
|
||||
this.player.volume = volume.volume;
|
||||
this.player.muted = volume.muted;
|
||||
this.config.set("audio-level", volume);
|
||||
});
|
||||
}
|
||||
|
||||
public play(src: string, bpm = 0): Promise<void>{
|
||||
@@ -56,7 +65,28 @@ export class AudioPlayerService{
|
||||
}
|
||||
|
||||
public setVolume(volume: number): void{
|
||||
this.player.volume = volume;
|
||||
const playerVolume: PlayerVolume = {muted: volume <= 0, volume};
|
||||
this._volume$.next(playerVolume);
|
||||
}
|
||||
|
||||
public setFinalVolume(volume: number): void{
|
||||
if(volume > 0){ this.lastVolume = volume; }
|
||||
const playerVolume: PlayerVolume = {muted: volume <= 0, volume: this.lastVolume};
|
||||
this._volume$.next(playerVolume);
|
||||
}
|
||||
|
||||
public mute(): void{
|
||||
const playerVolume = {...this._volume$.value, muted: true};
|
||||
this._volume$.next(playerVolume);
|
||||
}
|
||||
|
||||
public unmute(): void{
|
||||
const playerVolume = {...this._volume$.value, muted: false};
|
||||
this._volume$.next(playerVolume);
|
||||
}
|
||||
|
||||
public toggleMute(): void{
|
||||
this.muted ? this.unmute() : this.mute();
|
||||
}
|
||||
|
||||
public get src$(): Observable<string>{
|
||||
@@ -68,13 +98,19 @@ export class AudioPlayerService{
|
||||
public get bpm$(): Observable<number>{
|
||||
return this._bpm$.asObservable();
|
||||
}
|
||||
public get volume$(): Observable<number>{
|
||||
public get volume$(): Observable<PlayerVolume>{
|
||||
return this._volume$.asObservable();
|
||||
}
|
||||
|
||||
public get src(): string{ return this._src$.value; }
|
||||
public get playing(): boolean{ return this._playing$.value; }
|
||||
public get bpm(): number{ return this._bpm$.value; }
|
||||
public get volume(): number{ return this._volume$.value; }
|
||||
public get volume(): PlayerVolume{ return this._volume$.value; }
|
||||
public get muted(): boolean{ return this.player.muted; }
|
||||
|
||||
}
|
||||
|
||||
interface PlayerVolume{
|
||||
volume: number;
|
||||
muted: boolean;
|
||||
}
|
||||
Reference in New Issue
Block a user