uniapp音频类
功能:
1.可以设置固定地时间间隔播放循环
export default {
audio: null,
playInterval: 0, // 播放间隔时间(毫秒)
time: null,
init(src, options) {
let that = this;
that.playInterval = options.playInterval ?? 5000
return new Promise((resolve, reject) => {
try {
if (that.audio === null) {
that.audio = uni.createInnerAudioContext();
that.audio.src = src || 'https://web-ext-storage.dcloud.net.cn/uni-app/ForElise.mp3';
that.setProperty(options)
// 可以在这里设置其他属性,如音量等
console.log('auto+++++++++++++', that.audio)
// utils.sleep(3000);
resolve(that.audio)
} else {
resolve(that.audio)
}
} catch (e) {
//TODO handle the exception
reject()
}
})
},
setProperty(obj) {
Object.assign(this.audio, obj)
},
play() {
if (this.audio) {
this.audio.play();
if (this.playInterval && !this.audio.loop) {
this.audio.onEnded(this.onEndedHandle())
}
}
},
onEndedHandle() {
// 设置定时器,在指定的时间间隔后再次播放
let that = this;
that.time = setTimeout(() => {
that.play()
}, that.playInterval)
console.log(that.playInterval, '设置定时器,在指定的时间间隔后再次播放')
},
pause() {
console.log('暂停')
if (this.audio) {
this.audio.pause();
if (this.playInterval && !this.audio.loop) {
this.clearCustomPlayInterval()
}
}
},
clearCustomPlayInterval() {
clearTimeout(this.time)
console.log(this.time)
this.audio.offEnded()
},
stop() {
if (this.audio) {
if (this.playInterval) {
this.clearCustomPlayInterval()
}
this.audio.stop();
this.audio.destroy(); // 销毁音频上下文
this.audio = null;
}
},
onPlay(callback) {
if (this.audio) {
this.audio.onPlay(callback);
}
},
onPause(callback) {
if (this.audio) {
this.audio.onPause(callback);
}
},
onStop(callback) {
if (this.audio) {
this.audio.onStop(callback);
}
},
onError(callback) {
if (this.audio) {
this.audio.onError(callback)
}
}
};
使用
import musicPlayer from '@/common/musicPlayer';
musicPlayer.init('/static/mp4.mp3', {
obeyMuteSwitch: false,
loop: false,
playInterval: 12000
});