src/vs/platform/audioCues/browser/audioCueService.ts/AudioCueService/playSound
class AudioCueService:	public async playSound(sound: Sound, allowManyInParallel = false): Promise<void> {
		if (!allowManyInParallel && this.playingSounds.has(sound)) {
			return;
		}

		this.playingSounds.add(sound);

		const url = FileAccess.asBrowserUri(
			`vs/platform/audioCues/browser/media/${sound.fileName}`
		).toString();
		const audio = new Audio(url);
		audio.volume = this.getVolumeInPercent() / 100;
		audio.addEventListener('ended', () => {
			this.playingSounds.delete(sound);
		});
		try {
			try {
				// Don't play when loading takes more than 1s, due to loading, decoding or playing issues.
				// Delayed sounds are very confusing.
				await raceTimeout(audio.play(), 1000);
			} catch (e) {
				console.error('Error while playing sound', e);
			}
		} finally {
			audio.remove();
		}
	}