From d210aca1bbfca2eb18fee793bd8ba2ff3fefbaf0 Mon Sep 17 00:00:00 2001 From: Vitaly Date: Fri, 22 Sep 2023 23:29:49 +0300 Subject: [PATCH] fix annoying audiocontext start on page load, remove unused playSound (simplify) --- assets/{click_stereo.mp3 => button_click.mp3} | Bin src/menus/components/button.js | 41 ++++-------------- 2 files changed, 9 insertions(+), 32 deletions(-) rename assets/{click_stereo.mp3 => button_click.mp3} (100%) diff --git a/assets/click_stereo.mp3 b/assets/button_click.mp3 similarity index 100% rename from assets/click_stereo.mp3 rename to assets/button_click.mp3 diff --git a/src/menus/components/button.js b/src/menus/components/button.js index b503c0d0a..d1a402470 100644 --- a/src/menus/components/button.js +++ b/src/menus/components/button.js @@ -1,37 +1,15 @@ //@ts-check +const { LitElement, html, css, unsafeCSS } = require('lit') const widgetsGui = require('minecraft-assets/minecraft-assets/data/1.17.1/gui/widgets.png') -const { options } = require('../../optionsStorage') - -const audioContext = new window.AudioContext() -const sounds = {} +const { options, watchValue } = require('../../optionsStorage') +const buttonClickAudio = new Audio() +buttonClickAudio.src = 'button_click.mp3' // load as many resources on page load as possible instead on demand as user can disable internet connection after he thinks the page is loaded -let loadingSounds = [] -async function loadSound (path) { - loadingSounds.push(path) - const res = await window.fetch(path) - const data = await res.arrayBuffer() - - sounds[path] = await audioContext.decodeAudioData(data) - loadingSounds.splice(loadingSounds.indexOf(path), 1) -} - -export async function playSound (path) { - const volume = options.volume / 100 - - // todo? - if (loadingSounds.includes(path)) return - let soundBuffer = sounds[path] - if (!soundBuffer) throw new Error(`Sound ${path} not loaded`) - - const gainNode = audioContext.createGain() - const source = audioContext.createBufferSource() - source.buffer = soundBuffer - source.connect(gainNode) - gainNode.connect(audioContext.destination) - gainNode.gain.value = volume - source.start(0) -} +buttonClickAudio.load() +watchValue(options, o => { + buttonClickAudio.volume = o.volume / 100 +}) class Button extends LitElement { static get styles () { @@ -156,10 +134,9 @@ class Button extends LitElement { } onBtnClick (e) { - playSound('click_stereo.mp3') + buttonClickAudio.play() this.dispatchEvent(new window.CustomEvent('pmui-click', { detail: e, })) } } -loadSound('click_stereo.mp3') window.customElements.define('pmui-button', Button)