Telegram Web K with changes to work inside I2P https://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

73 lines
1.5 KiB

/*
* https://github.com/morethanwords/tweb
* Copyright (C) 2019-2021 Eduard Kuzmenko
* https://github.com/morethanwords/tweb/blob/master/LICENSE
*/
const ASSETS_PATH = 'assets/audio/';
export default class AudioAssetPlayer<AssetName extends string> {
private audio: HTMLAudioElement;
private tempId: number;
private assetName: AssetName;
constructor(private assets: AssetName[]) {
this.tempId = 0;
}
public playSound(name: AssetName, loop = false) {
++this.tempId;
this.assetName = name;
try {
const audio = this.createAudio();
audio.autoplay = true;
audio.src = ASSETS_PATH + name;
audio.loop = loop;
audio.play();
} catch(e) {
console.error('playSound', name, e);
}
}
public playSoundIfDifferent(name: AssetName, loop?: boolean) {
if(this.assetName !== name) {
this.playSound(name, loop);
}
}
public createAudio() {
let {audio} = this;
if(audio) {
return audio;
}
audio = this.audio = new Audio();
audio.play();
return audio;
}
public stopSound() {
if(!this.audio) {
return;
}
this.audio.pause();
}
public cancelDelayedPlay() {
++this.tempId;
}
public playSoundWithTimeout(name: AssetName, loop: boolean, timeout: number) {
// timeout = 0;
const tempId = ++this.tempId;
setTimeout(() => {
if(this.tempId !== tempId) {
return;
}
this.playSound(name, loop);
}, timeout);
}
}