let instance = null; class AudioManager { constructor() { if (instance) { return instance; } this.audioContext = null; this.isPlaying = false; this.userDisabled = false; this.initialized = false; try { const musicState = uni.getStorageSync('musicState') || {}; this.userDisabled = musicState.userDisabled === true; } catch (e) { console.error('读取音乐状态失败:', e); } instance = this; } init() { if (this.initialized) return this; this.audioContext = uni.createInnerAudioContext(); this.audioContext.src = 'https://des.dayunyuanjian.cn/epicSoul/taozi/bg.m4a'; this.audioContext.loop = true; this.audioContext.onPlay(() => { this.isPlaying = true; this._notifyStateChange(); }); this.audioContext.onPause(() => { this.isPlaying = false; this._notifyStateChange(); }); this.audioContext.onStop(() => { this.isPlaying = false; this._notifyStateChange(); }); this.audioContext.onError((res) => { this.isPlaying = false; this._notifyStateChange(); }); this.initialized = true; return this; } play() { if (this.userDisabled) return; this.init(); if (!this.isPlaying) { this.audioContext.play(); } } pause() { if (!this.initialized || !this.isPlaying) return; this.audioContext.pause(); } togglePlay() { this.init(); if (this.isPlaying) { this.pause(); this.userDisabled = true; } else { this.userDisabled = false; this.play(); } try { uni.setStorageSync('musicState', { userDisabled: this.userDisabled }); } catch (e) { console.error('保存音乐状态失败:', e); } return this.isPlaying; } _notifyStateChange() { uni.$emit('audioStateChanged', { isPlaying: this.isPlaying, userDisabled: this.userDisabled }); } getPlayingStatus() { return this.isPlaying; } getUserDisabled() { return this.userDisabled; } } export default new AudioManager();