Implement audio volume and loop properties
This commit is contained in:
parent
132c6c9ad6
commit
fdbcd98a9a
@ -29,7 +29,9 @@ import {
|
|||||||
ON_ACTION_TRIGGER_BUTTON,
|
ON_ACTION_TRIGGER_BUTTON,
|
||||||
TRIGGER_JITSI_PROPERTIES,
|
TRIGGER_JITSI_PROPERTIES,
|
||||||
TRIGGER_WEBSITE_PROPERTIES,
|
TRIGGER_WEBSITE_PROPERTIES,
|
||||||
WEBSITE_MESSAGE_PROPERTIES
|
WEBSITE_MESSAGE_PROPERTIES,
|
||||||
|
AUDIO_VOLUME_PROPERTY,
|
||||||
|
AUDIO_LOOP_PROPERTY
|
||||||
} from "../../WebRtc/LayoutManager";
|
} from "../../WebRtc/LayoutManager";
|
||||||
import {GameMap} from "./GameMap";
|
import {GameMap} from "./GameMap";
|
||||||
import {coWebsiteManager} from "../../WebRtc/CoWebsiteManager";
|
import {coWebsiteManager} from "../../WebRtc/CoWebsiteManager";
|
||||||
@ -661,8 +663,10 @@ export class GameScene extends ResizableScene implements CenterListener {
|
|||||||
this.connection.setSilent(true);
|
this.connection.setSilent(true);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
this.gameMap.onPropertyChange('playAudio', (newValue, oldValue) => {
|
this.gameMap.onPropertyChange('playAudio', (newValue, oldValue, allProps) => {
|
||||||
newValue === undefined ? audioManager.unloadAudio() : audioManager.playAudio(newValue, this.getMapDirUrl());
|
const volume = allProps.get(AUDIO_VOLUME_PROPERTY) as number|undefined;
|
||||||
|
const loop = allProps.get(AUDIO_LOOP_PROPERTY) as boolean|undefined;
|
||||||
|
newValue === undefined ? audioManager.unloadAudio() : audioManager.playAudio(newValue, this.getMapDirUrl(), volume, loop);
|
||||||
});
|
});
|
||||||
|
|
||||||
this.gameMap.onPropertyChange('playAudioLoop', (newValue, oldValue) => {
|
this.gameMap.onPropertyChange('playAudioLoop', (newValue, oldValue) => {
|
||||||
|
@ -41,7 +41,7 @@ class AudioManager {
|
|||||||
this.audioPlayerVol.value = '' + this.volume;
|
this.audioPlayerVol.value = '' + this.volume;
|
||||||
}
|
}
|
||||||
|
|
||||||
public playAudio(url: string|number|boolean, mapDirUrl: string, loop=false): void {
|
public playAudio(url: string|number|boolean, mapDirUrl: string, volume: number|undefined, loop=false): void {
|
||||||
const audioPath = url as string;
|
const audioPath = url as string;
|
||||||
let realAudioPath = '';
|
let realAudioPath = '';
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ class AudioManager {
|
|||||||
realAudioPath = mapDirUrl + '/' + url;
|
realAudioPath = mapDirUrl + '/' + url;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.loadAudio(realAudioPath);
|
this.loadAudio(realAudioPath, volume);
|
||||||
|
|
||||||
if (loop) {
|
if (loop) {
|
||||||
this.loop();
|
this.loop();
|
||||||
@ -100,8 +100,7 @@ class AudioManager {
|
|||||||
localStorage.setItem('volume', '' + volume);
|
localStorage.setItem('volume', '' + volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private loadAudio(url: string, volume: number|undefined): void {
|
||||||
private loadAudio(url: string): void {
|
|
||||||
this.load();
|
this.load();
|
||||||
|
|
||||||
/* Solution 1, remove whole audio player */
|
/* Solution 1, remove whole audio player */
|
||||||
@ -119,6 +118,7 @@ class AudioManager {
|
|||||||
this.audioPlayerElem.append(srcElem);
|
this.audioPlayerElem.append(srcElem);
|
||||||
|
|
||||||
this.audioPlayerDiv.append(this.audioPlayerElem);
|
this.audioPlayerDiv.append(this.audioPlayerElem);
|
||||||
|
this.volume = volume ? Math.min(volume, this.volume) : this.volume;
|
||||||
this.changeVolume();
|
this.changeVolume();
|
||||||
this.audioPlayerElem.play();
|
this.audioPlayerElem.play();
|
||||||
|
|
||||||
|
@ -31,6 +31,9 @@ export const TRIGGER_JITSI_PROPERTIES = 'jitsiTrigger';
|
|||||||
export const WEBSITE_MESSAGE_PROPERTIES = 'openWebsiteTriggerMessage';
|
export const WEBSITE_MESSAGE_PROPERTIES = 'openWebsiteTriggerMessage';
|
||||||
export const JITSI_MESSAGE_PROPERTIES = 'jitsiTriggerMessage';
|
export const JITSI_MESSAGE_PROPERTIES = 'jitsiTriggerMessage';
|
||||||
|
|
||||||
|
export const AUDIO_VOLUME_PROPERTY = 'audioVolume';
|
||||||
|
export const AUDIO_LOOP_PROPERTY = 'audioLoop';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This class is in charge of the video-conference layout.
|
* This class is in charge of the video-conference layout.
|
||||||
* It receives positioning requests for videos and does its best to place them on the screen depending on the active layout mode.
|
* It receives positioning requests for videos and does its best to place them on the screen depending on the active layout mode.
|
||||||
|
Loading…
Reference in New Issue
Block a user