Files
shoot-miniprograms/src/audioManager.js
2025-08-28 10:39:16 +08:00

128 lines
4.1 KiB
JavaScript

const audioFils = {
第一轮:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fl26qrspvy79.mp3",
第二轮:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fehshrpe5ook.mp3",
第三轮:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fgbz3iimk7yy.mp3",
第四轮:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fjwf50tlxxbi.mp3",
第五轮:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fg63lqrslhm7.mp3",
决金箭轮:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fhjycwubbwil.mp3",
请蓝方射击:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fr0zpluiabph.mp3",
请红方射击:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fu169yerpwey.mp3",
中场休息:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblu6fug8faqrbtwd.mp3",
比赛结束:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblsdl717ilr0b3o0.mp3",
比赛开始:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbblsdl7qlkqgvthfr.mp3",
请开始射击:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbljrfx5guqt5oulk.mp3",
未上靶:
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbkxm60bul0khcoqq.mp3",
"1环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbklufj59qmdo96ha.mp3",
"2环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbklufogy49ousbv4.mp3",
"3环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbklufl3hhijeasck.mp3",
"4环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbklufo8vo7k6jxdz.mp3",
"5环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbklkzq7lrbfpr6ij.mp3",
"6环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbkll0fw7hbmmhxkl.mp3",
"7环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbkll0fkirkanghmf.mp3",
"8环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbkll0cly2noykieg.mp3",
"9环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbkll0gsuumekhpkn.mp3",
"10环":
"https://static.shelingxingqiu.com/attachment/2025-07-14/dbbklgw2dk22ek7qha.mp3",
射击无效:
"https://static.shelingxingqiu.com/attachment/2025-08-26/dcc9qc84rir8gkj3mo.mp3",
距离不足5米:
"https://static.shelingxingqiu.com/attachment/2025-08-27/dcd59px1cavp1hogxi.mp3",
};
class AudioManager {
constructor() {
this.audioMap = new Map();
this.currentPlayingKey = null; // 记录当前播放的音频key
Object.keys(audioFils).forEach((key) => {
const audio = uni.createInnerAudioContext();
audio.src = audioFils[key];
audio.autoplay = false;
// 监听加载状态
audio.onCanplay(() => {
// console.log(`音频 ${key} 已加载完成`);
});
audio.onError((res) => {
console.log(`音频 ${key} 加载失败:`, res.errMsg);
});
// 监听播放结束事件
audio.onEnded(() => {
if (this.currentPlayingKey === key) {
this.currentPlayingKey = null;
}
});
// 监听播放停止事件
audio.onStop(() => {
if (this.currentPlayingKey === key) {
this.currentPlayingKey = null;
}
});
this.audioMap.set(key, audio);
});
}
// 播放指定音频
play(key) {
// 如果有正在播放的音频,先停止
if (this.currentPlayingKey) {
this.stop(this.currentPlayingKey);
}
const audio = this.audioMap.get(key);
if (audio) {
audio.play();
this.currentPlayingKey = key;
}
}
// 停止指定音频
stop(key) {
const audio = this.audioMap.get(key);
if (audio) {
audio.stop();
if (this.currentPlayingKey === key) {
this.currentPlayingKey = null;
}
}
}
// 销毁所有音频实例
destroyAll() {
this.audioMap.forEach((audio) => {
audio.destroy();
});
this.audioMap.clear();
this.currentPlayingKey = null;
}
}
// 导出单例
export default new AudioManager();