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.

92 lines
2.1 KiB

// 全局音频管理工具
export const GlobalAudioManager = {
// 获取当前全局音频实例
getCurrentAudio() {
const app = getApp();
return app && app.globalData ? app.globalData.currentAudio : null;
},
// 设置全局音频实例
setCurrentAudio(audioContext) {
const app = getApp();
if (app && app.globalData) {
app.globalData.currentAudio = audioContext;
}
},
// 清除全局音频实例
clearCurrentAudio() {
const app = getApp();
if (app && app.globalData) {
if (app.globalData.currentAudio) {
try {
app.globalData.currentAudio.stop();
app.globalData.currentAudio.destroy();
} catch (error) {
console.error('销毁全局音频失败:', error);
}
}
app.globalData.currentAudio = null;
}
},
// 检查是否有音频在播放
isAudioPlaying() {
const audio = this.getCurrentAudio();
return audio && !audio.paused;
},
// 暂停当前音频
pauseCurrentAudio() {
const audio = this.getCurrentAudio();
if (audio && !audio.paused) {
audio.pause();
// 通知状态变化
this.notifyAudioStateChange(false);
return true;
}
return false;
},
// 播放当前音频
playCurrentAudio() {
const audio = this.getCurrentAudio();
if (audio && audio.paused) {
audio.play();
// 通知状态变化
this.notifyAudioStateChange(true);
return true;
}
return false;
},
// 停止当前音频
stopCurrentAudio() {
const audio = this.getCurrentAudio();
if (audio) {
audio.stop();
// 通知状态变化
this.notifyAudioStateChange(false);
return true;
}
return false;
},
// 通知音频状态变化
notifyAudioStateChange(isPlaying) {
if (typeof uni !== 'undefined') {
uni.$emit('audioPlaying', isPlaying);
}
},
// 获取当前音频的src
getCurrentAudioSrc() {
const audio = this.getCurrentAudio();
return audio ? audio.src : null;
}
};
// 将工具挂载到全局
if (typeof uni !== 'undefined') {
uni.$globalAudio = GlobalAudioManager;
}